Externe Software suchen und anwenden

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Externe Software suchen und anwenden

23 Oct 2019, 16:33

Hallo gregster!
Das scheint doch eine Irfanview-Fehlermeldung zu sein, oder?
Das spräche eher dafür, dass Irfanview startet, aber irgendwas nicht findet, dass in den Parametern angegeben ist.
Das glaube ich ebenfalls. Irgendwas steht da ja von einem Anführungszeichen. Bloß, was das zu bedeuten hat???
Ist die Zwischenablage tatsächlich gefüllt zu diesem Zeitpunkt?
Ganz bestimmt. Denn wenn ich den IrfanView dann manuell aufrufe, kann ich mit Stgr+v oder über das Menü das Bild erstellen, ganz so, wie es vorgesehen ist. Außerdem funktioniert derselbe Code ja auf dem anderen Computer.
Kann das tatsächlich daran liegen, daß ich zwei Ordner mit installierter Software habe - eben einmal Program Files und dann Programme (x86)? Sucht der Befehl %A_ProgramFiles%\IrfanView\i_view32.exe nicht in allen Programmordnern nach der angegebenen Software?
zu 3.: Du meinst den Ordner, wo das docx herkommt? Wie unter 2.: Den Pfad des aktiven Dokuments verwenden.
Nein, es handelt sich um Ordner mit Bilddateien, die gerade geöffnet sind. Unterschiedliche Bilderserien sind darin enthalten, die durch Startseiten getrennt werden sollen.
Im Tutorial habe ich den Befehl

Code: Select all

id := WinExist("A")
gefunden, mit dem man die ID des aktuellen Fensters bestimmen kann. Nur wie ich die in einen Pfad umwandle bzw. in die Speicheranweisung einbauen soll, weiß ich nicht. Ob es eine Möglichkeit gibt, den Pfad des aktuellen Fensters (also nicht einer Datei!) zu bestimmen, habe ich nicht gefunden.

All das kann ich natürlich leider auch erst wieder ausprobieren und testen, wenn das mit dem IrfanView klappt. :(

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Externe Software suchen und anwenden

24 Oct 2019, 16:43

Hallo nochmal!

Ich habe jetzt den IrfanView nochmals neu installiert, ebenfalls in der 32Bit-Version. Jetzt scheint es wieder zu klappen. Allerdings gehen bei der Erstellung der Bilder über das Script die Formatierungen von Schriftfarbe, -Größe und -typ in dem einen Textfeld des Worddokuments verloren. Wenn ich das allerdings manuell einkopiere, bleiben sie bestehen. Wie bekomme ich das hin?

@ KHA:
Ich habe Deinen Code auch einmal eingefügt und angepaßt. Ich hatte natürlich noch nicht die Möglichkeit, diesen an anderen Computern mit 64Bit-Version oder ganz ohne IrfanView auszuprobieren. Aber auf dem meinigen funktioniert es - bis auf die oben bereits erwähnten Probleme mit der Textformatierung.

Viele Grüße von Meister Lampe
KHA
Posts: 401
Joined: 21 Aug 2018, 11:11

Re: Externe Software suchen und anwenden

25 Oct 2019, 10:32

Hallo, ich weiß es nicht, ob es an IrfanView Einstellungen liegt, aber bei mir wird die Formatierung (Schriftart, Schriftröße und Farbe 1:1 übernommen.
test.jpg
test.jpg (6.34 KiB) Viewed 4392 times
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Externe Software suchen und anwenden

26 Oct 2019, 01:28

Also ich habe keine Probleme mit der Formatierung - die bleibt erhalten, wie bei KHA. Ob in Textfeldern oder außerhalb...

Bei etlichen Versuchen mit verschiedenen Layout-Varianten und -Positionen habe ich genau einmal die Fehlermeldung mit dem " bekommen. Das war unmittelbar nachdem ich eine Textbox verschoben habe, aber ich konnte seitdem das Problem nicht mehr reproduzieren.

Was das Auslesen des Ordners aus dem File Explorer angeht (wenn ich richtig verstehe) - das müsste gehen über eine Schnittstelle. Ich guck mal, ob ich's finde.

Edit: Als einfacher Workaround lässt sich der vollständige Pfad im Fenstertitel anzeigen (in den Explorer-Optionen aktivieren) und dann natürlich als wintitle-Text auslesen:
pfad anzeigen lassen.jpg
pfad anzeigen lassen.jpg (82.41 KiB) Viewed 4359 times
Zumindest dann, wenn die Explorer-Addresszeile einen Pfad anzeigt - also nicht wenn man einen angepinnten Schnellzugriff-Link benutzt hat.
User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Externe Software suchen und anwenden

29 Oct 2019, 15:53

Hallo gregster!

Du hast mir in einem Deiner letzten Posts empfohlen:
zu 4.: Das Bild? wieso wieder eingeben? Speicher den Pfad doch in einer Variable zu weiteren Verwendung, wenn du das Bild erstellst: Wenn du run PfadzumBild ausführst, sollte das Bild im Standardviewer für diese Dateiendung angezeigt werden.
Ich habe das jetzt mal versucht, aber da kommt folgende Fehlermeldung:

Code: Select all

---------------------------
AHK-Tool StAF_3.1.13_extrakt.ahk
---------------------------
Error:  Failed attempt to launch program or document:
Action: <D:\Users\Bernhard\Eigene Hotkeys\HotKeys fürs Verzeichnen\Arbeitsdateien AHK-Tool StAF\K 678--7_123.jpg>
Params: <>

Specifically: Das System kann die angegebene Datei nicht finden.

	Line#
	714: oWord := ComObjActive("Word.Application")
	715: oRange := oWord.ActiveDocument.Range.Copy
	718: Run,%I_view_exe% /clippaste /convert=%Arbeitsdateien%\%VD_NameNeu%.jpg
	721: oWord.ActiveDocument.Close(0)  
	722: oWord.Quit()  
--->	724: Run,%Arbeitsdateien%\%VD_NameNeu%.jpg
	725: Return
	
The current thread will exit.
---------------------------
OK   
---------------------------
Im originalen Code sieht das aber so aus:

Code: Select all

oWord := ComObjActive("Word.Application")
   oRange := oWord.ActiveDocument.Range.Copy

   ;Run, %I_view_exe% /clippaste /convert=c:\test\test.jpg
   Run, %I_view_exe% /clippaste /convert=%Arbeitsdateien%\%VD_NameNeu%.jpg
         
   ;Run, "%A_ProgramFiles%\IrfanView\i_view32.exe" /clippaste /convert=%Arbeitsdateien%\%VD_NameNeu%.jpg
   oWord.ActiveDocument.Close(0)
   oWord.Quit()
   
   Run %Arbeitsdateien%\%VD_NameNeu%.jpg
return
Man beachte, daß in der Fehlermeldung in der angemahnten Zeile Nr. 724 nach dem Run ein Komma steht, in meinem Code aber nicht.
Ich hatte zuerst gedacht, das wäre eine automatische Korrekturempfehlung und das Komma zur Probe eingesetzt. Dadurch hat sich aber nichts verändert, auch die Fehlermeldung kommt noch. Dabei bdefindet sich die Datei ja genau an dieser Stelle, dorthin wurde 3 Zeilen vorher abgespeichert. Das kann man sehen, wenn man das Programm bei geöffnetem Ordner laufen läßt.
Kann das daran liegen, daß der Run-Befehl vielleicht keine Variablen duldet? Aber wie soll ich das sonst machen?

Viele Grüße von Meister Lampe
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Externe Software suchen und anwenden

30 Oct 2019, 06:22

Moin,

das jeweils erste Komma kann man weglassen. Der Interpreter fügt es bei Bedarf automatisch ein.
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Externe Software suchen und anwenden

31 Oct 2019, 02:31

Wie just me schon sagte, das Komma wird's nicht sein. Ansonsten von hier aus schwer zu sagen.
Kann das daran liegen, daß der Run-Befehl vielleicht keine Variablen duldet? Aber wie soll ich das sonst machen?
Nee, Variablen sollten kein Problem sein. Das funktioniert ohne Probleme hier:

Code: Select all

I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe"
Arbeitsdateien := "C:\Users\g\Downloads"
VD_NameNeu := "K 123--999_123"

Run, %I_view_exe% /clippaste /convert=%Arbeitsdateien%\%VD_NameNeu%.jpg
msgbox
Run, %Arbeitsdateien%\%VD_NameNeu%.jpg
Alternativ kannst du %I_view_exe% wieder hinzufügen: Run, %I_view_exe% %Arbeitsdateien%\%VD_NameNeu%.jpg
Aber die Fehlermeldung deutet ja aher darauf hin, dass die jpg-Datei nicht gefunden wird... warum auch immer.

Edit:
Wahrscheinlich existiert die Datei noch nicht so schnell nach dem convert-Befehl - sie muss ja erstmal erstellt werden. Entweder probier großzügiges Sleep oder eine Schleife mit FileExist() bevor du versuchst, die Datei zu öffnen (am besten mit einem Timeout, für den Fall, dass bei der Erstellung der Datei etwas schief läuft).
hd0202
Posts: 183
Joined: 04 Oct 2013, 03:07
Location: Germany near Cologne

Re: Externe Software suchen und anwenden

31 Oct 2019, 07:11

schon mal an RunWait gedacht ?
Hubert
User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Externe Software suchen und anwenden

31 Oct 2019, 17:01

Hallo gregster!

Jetzt funktioniert das Script eigentlich ganz gut, lediglich mit der Einschränkung, daß beim ersten Durchlauf nach dem Start wieder die Fehlermeldung kommt und das Bild nicht aufgerufen wird. Aber korrekt erstellt wird es jetzt.
Ich habe ganz am Ende auch noch FileDelete eingefügt, so wird der Word-Entwurf dann gleich wieder gelöscht, nachdem er seine Pflicht erfüllt hat.
Das ganze Script für dieses Modul sieht jetzt folgendermaßen aus (dann könnt Ihr auch mal den Zusammenhang besser erkennen):

Code: Select all

; Virtuelles Deckblatt erstellen:
F11::
VirtuellesDeckblatt:
If (AktSign = "")
   {
      MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
      IfMsgBox Ok
      {
         Gosub Auswahlfenster
         return
      }
      else
      return
   }
   Clipboard := ""
   VD_IBoxText =
   (
   
   Ein vituelles Deckblatt zum 
   Bestand %AktSign% wird erstellt.
   Geben Sie die Aktensignatur ein!
   )
   InputBox, VD_SignBox, Virtuelles Deckblatt, %VD_IBoxText%, ,240, 185, 
   If ErrorLevel
      return
   else
   id_Arbeitsfenster := WinExist("A")
   VD_SignNeu := VD_SignBox
   ;VD_AktSign := AktSign
   VD_AktSign := StrReplace(AktSign, "--", "/")
   ;MsgBox %VD_AktSign%
   DocumentPath := VD_Vorlage
   BookmarkName1 := "AktSign_Marke"   
   BookmarkName2 := "Signatur_Marke"
   
   oWord := ComObjCreate("Word.Application")
   oDoc := oWord.Documents.Open(DocumentPath)
   oWord.Visible := 1, oWord.Activate
   oDoc.Bookmarks(BookmarkName1).Select
   oDoc.Bookmarks(BookmarkName1).Range.Text := VD_AktSign
   Send, {Left}{Del}
   oDoc.Bookmarks(BookmarkName2).Select
   oDoc.Bookmarks(BookmarkName2).Range.Text := VD_SignNeu
   Send, {Left}{Del}
   
   Send, {PGUP}
   Send, ^a
   Send, ^c
   VD_SignName := Format("{:0" . StellenSign . "}", VD_SignNeu)
   VD_NameNeu := AktSign . "_" . VD_SignName 
   ;MsgBox, %VD_NameNeu%
   oWord.ActiveDocument.SaveAs(A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\" . VD_NameNeu . ".docx")
   ;oWord.ActiveDocument.SaveAs(A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\VD_docDateien\" . VD_NameNeu . ".docx")
   ;oWord.ActiveDocument.SaveAs("id_ArbeitsFenster" . VD_NameNeu . ".docx")
   
   RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
   IF !(I_view_exe)
   {
   RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
   RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
   }
   IF !(I_view_exe)
   {
   MsgBox, Bitte IrfanView Installieren.
   Return
   }
   oWord := ComObjActive("Word.Application")
   oRange := oWord.ActiveDocument.Range.Copy

   Run, %I_view_exe% /clippaste /convert=%Arbeitsdateien%\%VD_NameNeu%.jpg
         
   oWord.ActiveDocument.Close(0)
   oWord.Quit()
   FileDelete, %Arbeitsdateien%\%VD_NameNeu%.docx
  
   Run %Arbeitsdateien%\%VD_NameNeu%.jpg
return
Dabei ist das "Auswahlfenster" eine Gui zum Auswählen extern gespeicherter Vorgaben, die auch dann die Vaiable füllen, die in das eine Textfeld geschrieben wird. Die für das andere Textfeld wird über die InputBox eingegeben. Kann man dort eigentlich einen dritten Button hereinsetzen? Bei einer MsgBox ist das möglich, wenn man in den Parametern die Optionen entsprechend verändert.
Was ebenfalls immernoch wünschenswert wäre, ist die Abspeicherung der neue erstellten Bilddatei im aktuell geöffneten Explorerfenster bzw. Dateienordner.

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Externe Software suchen und anwenden

11 Jul 2020, 14:32

Hallo!

Ich muß noch einmal nachhaken.
Ich habe vor dem oben behandelten Sript mit der Irfanview-Anwendung nun - auch auf Eure Anregung - jetzt eine Nachfrage nach dem Programm stehen:

Code: Select all

IF !(I_view_exe)
   {
   Warnung_IViewText =
   (
   Sie benötigen das Bildprogramm IrfanView!
   )
   MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
   Return
   }
Kann mir jemand erklären, warum die Warnmeldung ausgerechnet erscheint, wenn IrfanView installiert ist? Ich habe hier doch absichtlich das "NOT"-Anführungszeichen vor die Bedingung gesetzt. Wenn ich das wegnehme, wird sie ignoriert, d.h. es läuft mit u. ohne IrfanView weiter (nur klappt dann natürlich die gewünschte Anwendung nicht).
Wo ist da der Haken? Wahrscheinlich nur ein Häkchen, aber auch das will gefunden werden... :eh:

Viele Grüße von Meister Lampe
gregster
Posts: 8916
Joined: 30 Sep 2013, 06:48

Re: Externe Software suchen und anwenden

11 Jul 2020, 22:51

Die Frage ist, was ist der Inhalt von I_view_exe zum Prüfzeitpunkt - wenn die Variable blank (= false) ist, würde ! sie zu true ändern.

Ich würde ja eher FileExist() verwenden... denn im Moment prüfst du lediglich den Inhalt der Variablen, nicht ob die Datei wirklich gefunden wird.

Spoiler

Code: Select all

I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe"

IF !FileExist(I_view_exe)
   {
   Warnung_IViewText =
   (
   Sie benötigen das Bildprogramm IrfanView!
   )
   MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
   Return
   }
halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Re: Externe Software suchen und anwenden

17 Jul 2020, 05:05

Ich habe auch ein paar AHK-Skripte, die IrfanView als Tool nutzen (z. B. für das Erzeugen und Ablegen eines Screenshoots).

Für den Aufruf gehe ich dabei insbesondere bei den Skripten, die ich weitergebe, einen anderen Weg: Ich kompiliere die AHK-Skripte und integriere die i_view32.exe direkt in die kompilierte Datei (per AHK2EXE). Damit kann ich immer und überall auf die IrfanView Basisfunktionen zugreifen.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 24 guests