Aktuelles Verzeichnis in TC auslesen mittels AHK

German support forum

Moderators: white, Hacker, Stefan2

mtemp2
Member
Member
Posts: 107
Joined: 2009-01-15, 18:51 UTC

Aktuelles Verzeichnis in TC auslesen mittels AHK

Post by *mtemp2 »

Hi,
auf "Rechner 1" kann ich über folgende Befehle mittels Autohotkey in einem Speichern- oder Öffnen-Dialogfenster eines beliebigen Programms den aktuellen Pfad aus TotalCommander auslesen (Einfügen in die Zwischenablage), in diese Dialogfenster einfügen und somit schnell zu dem Verzeichnis springen:

# eingetragen in usercmd.ini:

Code: Select all

[em_copyPath]
button=wcmicons.dll,45
cmd=cm_CopySrcPathToClip
# im Autohotkey-Skript rufe ich mittels einer Tastenkombination diesen Befehl auf:

Code: Select all

v_UserCommand := "em_copyPath"
SendUserCommand(v_UserCommand)
# Funktion (identisch zu http://www.ghisler.ch/board/viewtopic.php?p=133889#133889):

Code: Select all

SendUserCommand(ByRef v_UserCommand)
{
	VarSetCapacity(CopyDataStruct, 12, 0)
	NumPut(Asc("E"), CopyDataStruct, 0)
	NumPut(Asc("M"), CopyDataStruct, 1)
	NumPut(StrLen(v_UserCommand)+1, CopyDataStruct, 4)
	NumPut(&v_UserCommand, CopyDataStruct, 8)
	SendMessage, 0x4A, 0, &CopyDataStruct,, ahk_class TTOTAL_CMD
	VarSetCapacity(CopyDataStruct, 0)
}

Auf "Rechner 2" mit ähnlichen Pfad-/Programmeinstellungen etc. hingegen funktioniert dies nicht: der Funktionsaufruf liefert nicht das aktuelle Verzeichnis (cm_CopySrcPathToClip) aus TC zurück (in die Zwischenablage).

Ziemlich nervig, da ich nicht weiß, was auf "Rechner 2" anders eingerichtet sein soll...

Weiß jemand Rat & Tat?

Danke!
Carlos
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Vermutung:

Auf Rechner 2 läuft der TC mit erhöhten Rechten("Als Administrator"), während AHK mit normalen Rechten gestartet wurde?

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

Post by *Hacker »

mtemp2,
Nebenbei:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
	ControlGetText, PathInTC, TMyPanel5
	StringReplace, PathInTC, PathInTC, >, \
	SendInput, {Raw}%PathInTC%
Return
Einfach mal im Feld wo der Pfad rein soll Win-A drücken.

HTH
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.
mtemp2
Member
Member
Posts: 107
Joined: 2009-01-15, 18:51 UTC

Post by *mtemp2 »

HolgerK wrote:Auf Rechner 2 läuft der TC mit erhöhten Rechten("Als Administrator"), während AHK mit normalen Rechten gestartet wurde?
ah, stimmt, so was in der Art kann sein -- hab jedoch gerade nur Zugriff auf Rechner 2 und weiß nicht, wie Rechner 1 aussieht, also innendrin ;)

Oder vielleicht liegts an unterschiedlichen AHK-Versionen. Hier auf Rechner 2 habe ich die 64-Bit-Version installiert. Morgen mal in Rechner 1 reinschauen...


Danke für Deine Vermutung. Morgen seh ich weiter.
mtemp2
Member
Member
Posts: 107
Joined: 2009-01-15, 18:51 UTC

Post by *mtemp2 »

Hacker wrote:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD
; Default shortcut is Win-A
$#a::
	ControlGetText, PathInTC, TMyPanel5
	StringReplace, PathInTC, PathInTC, >, \
	SendInput, {Raw}%PathInTC%
Return
Einfach mal im Feld wo der Pfad rein soll Win-A drücken.
Wenn ich Deinen Code richtig verstehe und auch nachdem ich ihn ausprobiert habe:
Damit erhalte ich aber nur bei aktivem TC den aktuellen Pfad, nicht jedoch von einem anderen Programm heraus. Richtig?
Genau letzteres möchte ich jedoch erreichen -- was auch auf Rechner 1 funktioniert, Skript beginnend mit:

Code: Select all

#IfWinActive, ahk_class #32770
^+s::
#IfWinActive, ahk_class bosa_sdm_Mso96
^+s::
#IfWinActive, ahk_class bosa_sdm_Microsoft Office Word 11.0
{
	^+s::
		v_UserCommand := "em_copyPath"
		SendUserCommand(v_UserCommand)
usw.
Carlos
User avatar
Hacker
Moderator
Moderator
Posts: 13052
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

mtemp2,
Damit erhalte ich aber nur bei aktivem TC den aktuellen Pfad, nicht jedoch von einem anderen Programm heraus. Richtig?
Nein, das wäre ja unnütz. Einfach mal Notepad aufmachen und Win-A drücken.

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.
mtemp2
Member
Member
Posts: 107
Joined: 2009-01-15, 18:51 UTC

Post by *mtemp2 »

Hacker wrote:Nein, das wäre ja unnütz.
Wollte sicher gehen, richtig verstanden zu werden... wobei ich leider "mein" IfWinActive mit "Deinem" IfWinExist verwechselt hatte. Missverständnis meinerseits.

Dein Skript klappt also tatsächlich und dies bei geringerem Codeaufwand :)
Allerdings habe ich bei "meinem" IfWinActive das Problem, dass ich dann nicht über "ControlGetText, left_path, TPathPanel1" ('TPathPanel' in TC > v7.5) auf den Pfad zugreifen kann, die Variable bleibt leer.
Klappt Deine Methode also nicht bei Benutzung innerhalb von "IfWinActive"? Denn die Tastenkombination soll nur in bestimmten Fällen greifen; nämlich dann, wenn ich dieses Öffnen-Dialogfenster geöffnet habe. Ich nutze also:

Code: Select all

#IfWinActive, ahk_class #32770
^+s::
...
Doch wie gesagt, darin kann ich nicht Deine Methode nutzen.

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

Post by *Hacker »

mtemp2,
Mal mit

Code: Select all

ControlGetText, PathInTC, TMyPanel5, ahk_class TTOTAL_CMD
anstatt

Code: Select all

ControlGetText, PathInTC, TMyPanel5
versuchen.

HTH
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.
mtemp2
Member
Member
Posts: 107
Joined: 2009-01-15, 18:51 UTC

Post by *mtemp2 »

Zuerst: Danke Euch allen!

Denn nun hab ichs (auch verstanden :-))!

Ich muss also wirklich noch ", ahk_class TTOTAL_CMD" dranhängen, damit ich innerhalb "meiner Konstruktion" über die zuvor genannte Codezeile den Pfad in TC auslesen kann:

Code: Select all

ControlGetText, PathInTC, TMyPanel5, ahk_class TTOTAL_CMD
Allerdings darf es nicht "TMyPanel5" heißen (was wiederum ein leeres Ergebnis zurückgibt, was mich wohl auch oben/bisher immer irritiert hatte), sondern "TMyPanel4" (= Rückgabe des Pfades in der Kommandozeile)!
Und somit verstehe ich nun auch den anfangs erwähnten Replace-Vorgang:

Code: Select all

StringReplace, PathInTC, PathInTC, >, \
... zumal ich irgendwann der Meinung war, ich müsste mit "TPathPanel1" bzw. "TPathPanel2" arbeiten (= Pfad des linken bzw. rechten Verzeichnisses), aber ich ja so nicht das aktive Verzeichnis herausfinden konnte...

Lange Rede, kurz zusammengefasst bzw. Romans Skriptzeilen zusammengefügt:

Code: Select all

ControlGetText, PathInTC, TMyPanel4, ahk_class TTOTAL_CMD
StringReplace, PathInTC, PathInTC, >, \
SendInput, {Raw}%PathInTC%
==

Mein ursprüngliches Problem habe ich damit vielleicht auch erschlagen, hab jedoch gerade nur Zugriff auf "Rechner 1", wo es schon zuvor funktionert hatte. Mögliche unterschiedliche Rechtevergabe muss ich also später mal untersuchen.

Bis dahin: Danke :)!
User avatar
tuska
Power Member
Power Member
Posts: 3740
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Hallo,
mich würde diese Funktion auch sehr interessieren, jedoch schaffe ich es nicht, den Code richtig einzubinden.
Zuerst habe ich die usercmd.ini angelegt - mit Kommando cm_CopySrcPathToClip und als Tastenkombination WIN + A ausgewählt (dies funktioniert soweit).
Danach habe ich eine Datei "Pfad.ahk" angelegt mit folgendem

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 
; Default shortcut is Win-A
v_UserCommand := "em_copyPath" 
SendUserCommand(v_UserCommand)
$#a:: 
	ControlGetText, PathInTC, TMyPanel4, ahk_class TTOTAL_CMD 
	StringReplace, PathInTC, PathInTC, >, \ 
	SendInput, {Raw}%PathInTC%
Return
Es stört idF jedoch

Code: Select all

v_UserCommand := "em_copyPath" 
SendUserCommand(v_UserCommand)
und wenn ich diesen Code weglasse, dann erhalte ich keinen Pfad eingefügt (in offene Notepad Textdatei vor Speicherung). Nur einmal hat der Code (in welcher Kombination weiß ich nicht mehr) eine Wirkung gehabt: Es wurde die Statuszeile vom linken Panel d. TC eingefügt(!).
Bitte um Unterstützung.
Gruß,
Karl
User avatar
tuska
Power Member
Power Member
Posts: 3740
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Die Statuszeile vom linken Panel wird bei mir eingefügt wenn ich den

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD 

; Default shortcut is Win-A 
$#a:: 
   ControlGetText, PathInTC, TMyPanel5 
   StringReplace, PathInTC, PathInTC, >, \ 
   SendInput, {Raw}%PathInTC% 
Return
verwende.
Gruß,
Karl
User avatar
Hacker
Moderator
Moderator
Posts: 13052
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Hallo tuska,
Man braucht im TC nichts zu konfigurieren. Keine usercmd.ini, keine Tastenkombination. Das Skript, wie du es in deinem letzten Beitrag hast, funktioniert einwandfrei, du musst nur "TMyPanel5" anpassen, d.h. die richtige Nummer finden.

HTH
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: 3740
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Hallo Roman,
gerade in diesem Moment habe ich durch Suchen die richtige Nummer gefunden, aber danke für den Hinweis!
Mein Code lautet

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
und jetzt funktioniert alles wie gewünscht!
Danke nochmals!
Gruß,
Karl
mtemp2
Member
Member
Posts: 107
Joined: 2009-01-15, 18:51 UTC

Post by *mtemp2 »

Hacker wrote:du musst nur "TMyPanel5" anpassen, d.h. die richtige Nummer finden.
tuska wrote:gerade in diesem Moment habe ich durch Suchen die richtige Nummer gefunden
Da ich gerade selber irritiert wurde, wieso "TMyPanel3" in Deinem Code, Tuska, bei mir nichts ausgibt, hier nur nochmals der Hinweis, dass diese Benennung der "TC-Komponenten" abhängig von der verwendeten TC-Version ist. Ich muss zB unter v7.5, wie oben geschrieben, TMyPanel4 benutzen.
User avatar
tuska
Power Member
Power Member
Posts: 3740
Joined: 2007-05-21, 12:17 UTC

Post by *tuska »

Hallo mtemp2,
ich verwende dzt. die aktuelle TC-Version 7.56a.
Danke für den zusätzlichen wertvollen Hinweis.[/b]
Gruß,
Karl
Post Reply