Aktuelles Verzeichnis in TC auslesen mittels AHK

German support forum

Moderators: white, Hacker, Stefan2

User avatar
Hacker
Moderator
Moderator
Posts: 13052
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

mtemp2,
Die Nummerierung hängt sowohl vom TC als auch vom AHK ab, man muss halt verschiedene ausprobieren. :)

Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Pfad.ahk unter Windows 7

Post by *tuska »

Hallo,
unter Windows XP hat dieser Code bei mir funktioniert:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

; Default shortcut is Win-A 
$#a:: 
   ControlGetText, PathInTC, TMyPanel3, ahk_class TTOTAL_CMD 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return
Unter Windows 7 habe ich AutoHotkey neu installiert und den genannten Code mit TMyPanel1 bis TMyPanel5 ausprobiert, jedoch ohne Erfolg.

Für einen Rat wäre ich sehr dankbar.
Gruß,
Karl
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Lass mich raten: Du benutzt jetzt den 64Bit TC?

Mit "AU3_Spy.exe" kannst du den Klassen-Namen des Pfad-Controls neben der Kommandozeile abfragen: ClassNN : "Window8"

Gruss
Holger
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Hallo Holger,
ja, ich benutze jetzt den TC 64Bit (TOTALCMD64.EXE umbenannt in Explorer.exe [wegen Norton Internet Security 2014]).

Mit "AU3_Spy.exe" bekomme ich immer andere Werte in ClassNN,
je nachdem in welches Fenster ich klicke (TC, Excel, usf.).

Kannst Du mir bitte noch genauer erklären was ich tun muß.
Danke!
Gruß,
Karl
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

- AU3_Spy starten
- in den TC klicken
- mit der Maus über die Pfadangabe neben der Kommandozeile hovern (notfalls Kommandozeile erst sichtbar schalten)
- Den Namen von "Now Under Mouse Cursor" ClassNN: ... ablesen.

Wie bereits gesagt, sollte Window8 sein (TC8.5b11 x64).
Diesen Namen dann anstelle von TMyPanelN in deinem Script benutzen.

Gruss
Holger
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Pfad.ahk unter Windows 7

Post by *tuska »

Hallo Holger,
vielen Dank für Deine detaillierte Beschreibung - jetzt funktioniert's!

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

; Default shortcut is Win-A 
$#a:: 
   ControlGetText, PathInTC, Window7, ahk_class TTOTAL_CMD 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return
TMyPanelN habe ich auf Window7 geändert.

Nochmals danke!
Gruß,
Karl
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Pfad einfügen in "Speichern-unter"-Dialog – WIN+A

Post by *tuska »

Leider habe ich wieder ein Problem mit diesem Skript - nun mit TC 9.0 - und bitte um Unterstützung.
Ich verwende TC 9.0ß2 64 bit, Win10 Pro x64 mit folgendem Code:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

; Default shortcut is Win-A 
$#a:: 
   ControlGetText, PathInTC, Window8, ahk_class TTOTAL_CMD 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return
Meine Vorgangsweise ist immer dieselbe:
1. Start des AHK-Skripts über den Autostart, d.h. C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
2. TC starten, gewünschtes Verzeichnis aufrufen
3. z.B. eine Textdatei mit "Datei - speichern unter..." in dem gewünschten - zuvor im TC gewählten Verzeichnis -
speichern indem man in dem Dialog zuvor den Cursor vor den Dateinamen setzt und WIN + A drückt (Pfad aus TC wird eingefügt).

> Unter TC 8.52a ist das speichern (mit autom. eingefügtem Pfad!) wie vorher beschrieben nach wie vor möglich
> Unter TC 9.0 (Beta 1 und 2) wird der Pfad vor dem Dateinamen nicht mehr automatisch eingefügt.
Erst wenn ich das AHK-Skript im System-Tray beende und neu starte - dann funktioniert es auch in TC 9.0.
Dies ist auf die Dauer etwas lästig, denn man sieht ja im Systray das gestartete Skript (nur leider hat es keine Auswirkung bis zum Neustart)

Weiß jemand Rat?
Gruß,
Karl
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48021
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Bei TC9 kann man neu eine Message wm_user+50 an das Hauptfenster schicken, um das Window-Handle eines Dialogelements zurückzuerhalten.

Dazu muss wparam auf einen der folgenden Werte gesetzt werden:
1=leftlist, 2=rightlist, 3=active list, 4=inactive list, 5=leftheader, 6=rightheader, 7=leftsize, 8=rightsize, 9=leftpath, 10=rightpath, 11=leftinfo, 12=rightinfo, 13=leftdrives, 14=rightdrives, 15=leftpanel, 16=rightpanel, 17=bottompanel, 18=lefttree, 19=righttree, 20=cmdline, 21=curdirpanel, 22=inplaceedit, 23=splitpanel, 24=leftdrivepanel, 25=rightdrivepanel, 26=lefttabs, 27=righttabs, 28=buttonbar, 29=buttonbarvertical

Hier sieht man wie man das anwendet:
http://ghisler.ch/board/viewtopic.php?p=310249
Author of Total Commander
https://www.ghisler.com
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

2Ghisler(author)

Vielen Dank für Ihre Hinweise und den Link zu den Beispielen.

Ich habe als Nichtprogrammierer jetzt trotzdem mehrere Versuche gestartet [OT: ganz schön anstrengend und meist erfolglos].
Es ist mir anhand der Beispiele gelungen bei active panel (1=left, 2=right)
das Hinweisfenster "Answer from TC, active panel (1=left, 2=right) : 1" zu erhalten.

Wenn ich das Fenster mit "OK" bestätige, dann funktioniert alles!

Leider weiß ich nicht, wie man dieses Fenster unterdrücken könnte.
Ein Versuch mit einem Code aus einem anderen AHK-Skript: Send, {OK}
war nicht erfolgreich (vielleicht auch an falscher Stelle eingesetzt?).

Dzt. sieht der unvollständige Code so aus:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

{ 
     SendMessage 1074, 1000, 0, , ahk_class TTOTAL_CMD 
     MsgBox Answer from TC, active panel (1=left, 2=right) : %ErrorLevel%
     return
 }
; WM_USER+50  = 1074
; Default shortcut is Win-A 
$#a:: 
   ControlGetText, PathInTC, Window8, ahk_class TTOTAL_CMD 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return
Bitte daher nochmals um einen Tipp um das Hinweisfenster zu entfernen.
Besten Dank im voraus.
Gruß,
Karl
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Hoppla, kaum macht man es richtig, funktioniert's auch schon:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

$#a:: 
   ControlGetText, PathInTC, Window8, ahk_class TTOTAL_CMD 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return

{ 
     SendMessage 1074, 1000, 0, , ahk_class TTOTAL_CMD 
     MsgBox Answer from TC, active panel (1=left, 2=right) : %ErrorLevel%
     return
 }
; WM_USER+50  = 1074
; Default shortcut is Win-A
Besten Dank nochmals für die Unterstützung!
Gruß,
Karl
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 48021
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Das Panel mit dem aktuellen Verzeichnis ist curdirpanel, das ist Nummer 21. Also muss man aufrufen:
SendMessage 1074, 21, 0, , ahk_class TTOTAL_CMD

Das Resultat sollte dann in %ErrorLevel% stecken.

Also ruft man auf:
SendMessage 1074, 21, 0, , ahk_class TTOTAL_CMD
ControlGetText, PathInTC, %ErrorLevel%, ahk_class TTOTAL_CMD
StringReplace, PathInTC, PathInTC, >, \
SendInput, {Raw}%PathInTC%

Sorry, hatte noch nicht die Zeit das zu testen...
Author of Total Commander
https://www.ghisler.com
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

ghisler(Author) wrote:... Sorry, hatte noch nicht die Zeit das zu testen...
Danke für den neuen Code (siehe untenstehend)!

> Ihren Code habe ich in dieses AHK-Skript gegeben und es läuft perfekt ab TC 9.0 64-bit!
> Unter TC 9.0 32-bit funktioniert das AHK-Skript nicht.

> Unter TC 8.52a funktioniert das AHK-Skript nicht, da es diese Befehle erst ab TC 9.0 gibt.
Mit dem Code wie hier angegeben funktioniert's in TC 8.52a [Edit: nun auch nicht mehr!]:
http://ghisler.ch/board/viewtopic.php?p=310335#310335

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

$#a:: 
   ControlGetText, PathInTC, Window8, ahk_class TTOTAL_CMD 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return

{ 
SendMessage 1074, 21, 0, , ahk_class TTOTAL_CMD 
 ControlGetText, PathInTC, %ErrorLevel%, ahk_class TTOTAL_CMD 
 StringReplace, PathInTC, PathInTC, >, \ 
 SendInput, {Raw}%PathInTC%
 return
 }
; WM_USER+50  = 1074
; Default shortcut is Win-A
Last edited by tuska on 2016-06-18, 06:33 UTC, edited 1 time in total.
Gruß,
Karl
User avatar
Hacker
Moderator
Moderator
Posts: 13052
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

This script works universally in both 32-bit and 64-bit TC, 8.52a and 9.0 Beta.
Dieses Skript funktioniert universell, sowohl mit dem 32-bit als auch mit dem 64-bit TC, 8.52a und 9.0 Beta.

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
	WinGetText, TCWindowText, ahk_class TTOTAL_CMD
	RegExMatch(TCWindowText, "(?<=\n).*(?=>)", PathInTC)
	Send, {Raw}%PathInTC%\
Return
I will have to try out the new functions, too.
Die neuen Funktionen werde ich noch ausprobieren müssen.

Roman

EDIT: Deutschen Text hinzugefügt, sorry.
Last edited by Hacker on 2016-06-17, 21:20 UTC, edited 1 time in total.
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
User avatar
tuska
Power Member
Power Member
Posts: 3741
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Könntest Du Dein Script bitte prüfen - im Moment wird vor dem Dateinamen nur ein "\" Backslash ergänzt.
Danke!
Gruß,
Karl
User avatar
Hacker
Moderator
Moderator
Posts: 13052
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

tuska,
im Moment wird vor dem Dateinamen nur ein "\" Backslash ergänzt
Vor welchem Dateinamen?

BTW: Funktioniert hier einwandfrei seit Jahren. Ich weiss leider nicht, was ich da überprüfen könnte. :|

EDIT: Vielleicht ändert das was?

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
	WinGetText, TCWindowText, ahk_class TTOTAL_CMD
;	RegExMatch(TCWindowText, "\n(.*)>", PathInTC)
	RegExMatch(TCWindowText, "(?<=\n).*?(?=>)", PathInTC)
	Send, {Raw}%PathInTC%\
Return
TIA
Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
Post Reply