von Stephan » Do, 21.10.2021 21:27
Er funktioniert, bis auf eine Kleinigkeit.
aber dann nur durch Zufall, denn der Pfad zur exe steht doch fest im Shellaufruf:
Code: Alles auswählen
Shell("""C:\Temp\_Stephan\Screenshot mit eingebettetem NIRCMD\nircmd.exe""",1, "savescreenshot " & sBildName)
und das kann nicht funktionieren, da doch die exe in einen Variablen Pfad ausgepackt wird:
aber das Bild wird nicht im selben Ordner der Calcdatei gespeichert, sondern immer in:
...\AppData\Local\VirtualStore\Program Files\LibreOffice\program\...
überraschendes (oder übersehe ich etwas?) Programmverhalten, das das Bild gerade in diesem Pfad gespeichert wird - das es nicht im gewünschten Pfad gespeichert wird ist deshalb so weil garkein Pfad angegeben wird, denn "sBildName" ist nur ein Dateiname ohne Pfad;
Code: Alles auswählen
Shell("""C:\Temp\_Stephan\Screenshot mit eingebettetem NIRCMD\nircmd.exe""",1, "savescreenshot " & sBildName)
hier hingegen gibt es einen Pfad, nämlich "sDirPath":
Code: Alles auswählen
' Programm-Hinweis
Msgbox "Screenshot gespeichert in: " & chr(10) & _
sDirPath & "\" & sBildname,64, "Programmende"
ich habe jetzt den Code korrigiert und etwas besser geschrieben, so sollte es passen:
Code: Alles auswählen
Dim sUrl$, sDirUrl$
Dim sPath$, sDirPath$
Sub initialisieren()
GlobalScope.BasicLibraries.loadLibrary("Tools")
sUrl = ThisComponent.URL
'Den Pfad ohne Dateiname extrahieren
sDirPath = DirectoryNameoutofPath(sUrl,"/")
ThisComponent.calculate()
z = createUnoService("com.sun.star.packages.Package")
Dim args(0)
args(0) = ThisComponent.URL
z.initialize(args())
schreiben = createUnoService("com.sun.star.ucb.SimpleFileAccess")
stream = z.getByHierarchicalName("hilfe/" & "nircmd.exe").GetInputStream()
schreiben.WriteFile(sDirPath & "/nircmd.exe", stream)
End Sub
Sub screeenhot()
initialisieren()
' Datum- und Zeitstempel formatieren
sStamp = "_" & Format(Year(Now), "0000") & Format(Month(Now), "00") & Format(Day(Now), "00") & "_" & _
Format(Hour(Now), "00") & "-" & Format(Minute(Now), "00") & "-" & Format(Second(Now), "00")
' Dateiname zusammensetzen
sBildName = "Bild2" & sStamp & ".png"
' Programm über die Kommandozeile aufrufe, die Parameter übergeben und den Screenshot speichern
Shell("""" & ConvertFromURL(sDirPath & "/nircmd.exe") & """", 1, "savescreenshot " & ConvertFromURL(sDirPath & "/" & sBildname))
Wait 10 'warten damit Dialog nicht auf Screenshot sichtbar wird
' Programm-Hinweis
Msgbox "Screenshot gespeichert in: " & chr(10) & _
ConvertFromURL(sDirPath & "/" & sBildname),64, "Programmende"
End Sub
Gruß
Stephan
[quote]Er funktioniert, bis auf eine Kleinigkeit.[/quote]
aber dann nur durch Zufall, denn der Pfad zur exe steht doch fest im Shellaufruf:
[code]Shell("""C:\Temp\_Stephan\Screenshot mit eingebettetem NIRCMD\nircmd.exe""",1, "savescreenshot " & sBildName)[/code]
und das kann nicht funktionieren, da doch die exe in einen Variablen Pfad ausgepackt wird:
[code]schreiben.WriteFile(sDirUrl & "/" & alles(2), stream)[/code]
[quote]aber das Bild wird nicht im selben Ordner der Calcdatei gespeichert, sondern immer in:
...\AppData\Local\VirtualStore\Program Files\LibreOffice\program\...[/quote]
überraschendes (oder übersehe ich etwas?) Programmverhalten, das das Bild gerade in diesem Pfad gespeichert wird - das es nicht im gewünschten Pfad gespeichert wird ist deshalb so weil garkein Pfad angegeben wird, denn "sBildName" ist nur ein Dateiname ohne Pfad;
[code]Shell("""C:\Temp\_Stephan\Screenshot mit eingebettetem NIRCMD\nircmd.exe""",1, "savescreenshot " & sBildName)[/code]
hier hingegen gibt es einen Pfad, nämlich "sDirPath":
[code]' Programm-Hinweis
Msgbox "Screenshot gespeichert in: " & chr(10) & _
sDirPath & "\" & sBildname,64, "Programmende"[/code]
ich habe jetzt den Code korrigiert und etwas besser geschrieben, so sollte es passen:
[code]Dim sUrl$, sDirUrl$
Dim sPath$, sDirPath$
Sub initialisieren()
GlobalScope.BasicLibraries.loadLibrary("Tools")
sUrl = ThisComponent.URL
'Den Pfad ohne Dateiname extrahieren
sDirPath = DirectoryNameoutofPath(sUrl,"/")
ThisComponent.calculate()
z = createUnoService("com.sun.star.packages.Package")
Dim args(0)
args(0) = ThisComponent.URL
z.initialize(args())
schreiben = createUnoService("com.sun.star.ucb.SimpleFileAccess")
stream = z.getByHierarchicalName("hilfe/" & "nircmd.exe").GetInputStream()
schreiben.WriteFile(sDirPath & "/nircmd.exe", stream)
End Sub
Sub screeenhot()
initialisieren()
' Datum- und Zeitstempel formatieren
sStamp = "_" & Format(Year(Now), "0000") & Format(Month(Now), "00") & Format(Day(Now), "00") & "_" & _
Format(Hour(Now), "00") & "-" & Format(Minute(Now), "00") & "-" & Format(Second(Now), "00")
' Dateiname zusammensetzen
sBildName = "Bild2" & sStamp & ".png"
' Programm über die Kommandozeile aufrufe, die Parameter übergeben und den Screenshot speichern
Shell("""" & ConvertFromURL(sDirPath & "/nircmd.exe") & """", 1, "savescreenshot " & ConvertFromURL(sDirPath & "/" & sBildname))
Wait 10 'warten damit Dialog nicht auf Screenshot sichtbar wird
' Programm-Hinweis
Msgbox "Screenshot gespeichert in: " & chr(10) & _
ConvertFromURL(sDirPath & "/" & sBildname),64, "Programmende"
End Sub
[/code]
Gruß
Stephan