Aktuelles Verzeichnis in TC auslesen mittels AHK

German support forum

Moderators: white, Hacker, Stefan2

User avatar
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

I was wondering why you always have to replace the '>' sign. :roll:

I rather had replaced the '*.*' part.

Now I know:
MsgBox %TCWindowText%

:wink:


- - -


That 'RegExMatch' syntax didn't worked for me either.
(EDIT: lag am eingeschaltetem "[_] Show drive combobox")
I only know "NewStr := RegExReplace()" syntax.
I have here 1.1.22.09 currently.


So I have tested another code which works for me with 32-bit TC8/TC9:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
   WinGetText, TCWindowText, ahk_class TTOTAL_CMD

Loop, parse, TCWindowText , `n, `r
{
    PathInTC = %A_LoopField%
    StringTrimRight, PathInTC , PathInTC , 1
    break
}

msgbox %PathInTC%\
;Send, {Raw}%PathInTC%\
Return

That should work with AHK 1.0 (classic) too.



 
Last edited by Stefan2 on 2016-06-18, 07:25 UTC, edited 1 time in total.
User avatar
Hacker
Moderator
Moderator
Posts: 13064
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Stefan2,
How can this work for you? It just takes the whole TC window text and uses the first line (which is the total and the free space on the current drive here).
Wie kann das bei dir funktionieren? Das Skript nimmt doch nur den ganzen Text im TC Fenster und gibt die erste Zeile aus (was bei mir der gesamte bzw. freie Speicherplatz ist).

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
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

EDIT:

Es liegt an "[x] Show drive combobox"




Bei TC8 und unverbasteltest TC9 in 32-bit:

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
   WinGetText, TCWindowText, ahk_class TTOTAL_CMD
   msgbox %TCWindowText%

  Loop, parse, TCWindowText , `n, `r
  {
      PathInTC = %A_LoopField%
      StringTrimRight, PathInTC , PathInTC , 1
      break
  }

  msgbox %PathInTC%\
  ;Send, {Raw}%PathInTC%\
Return



Ergebnis bei "[x] Show drive combobox"

---------------------------
01.ahk
---------------------------
d:\d\ASAP Uitlities Excel>
0 k / 19.666 k in 0 / 2 file(s)
d:\d\ASAP Uitlities Excel\*.*
[-d-]
[daten] 257.319.140 k of 625.026.044 k free
0 k / 54.578 k in 0 / 147 file(s), 0 / 2 dir(s)
d:\a\Sysinternals\*.*
[-d-]
[daten] 257.319.140 k of 625.026.044 k free
---------------------------
OK
---------------------------
---------------------------
01.ahk
---------------------------
d:\d\ASAP Uitlities Excel\
---------------------------
OK
---------------------------



Ergebnis bei "[_] Show drive combobox"
---------------------------
01.ahk
---------------------------
[daten] 257.318.620 k of 625.026.044 k free
[daten] 257.318.620 k of 625.026.044 k free
d:\d\ASAP Uitlities Excel>
0 k / 19.666 k in 0 / 2 file(s)
...
...
.....
---------------------------
OK
---------------------------
---------------------------
01.ahk
---------------------------
d:\d\ASAP Uitlities Excel\
---------------------------
OK
---------------------------





Na prima! Wieder nichts verlässliches.


- - - EDIT 2:

So sollte es funktionieren

bei "[X] Show drive combobox"
und
bei "[_] Show drive combobox"

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
   WinGetText, TCWindowText, ahk_class TTOTAL_CMD
   msgbox %TCWindowText%\

  Loop, parse, TCWindowText , `n, `r
  {
    IfInString, A_LoopField, \
    {
      PathInTC = %A_LoopField%
      StringTrimRight, PathInTC , PathInTC , 1
      break
    }
  }

  msgbox %PathInTC%\
  ;Send, {Raw}%PathInTC%\
Return



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

Post by *Hacker »

Stefan2,
Was funktioniert denn an meiner Variante nicht?

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
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Hacker wrote:Stefan2,
Was funktioniert denn an meiner Variante nicht?

Roman
Die 'PathInTC' Variable bei "RegExMatch(TCWindowText, "(?<=\n).*?(?=>)", PathInTC)" wird bei mir nicht gefüllt.

Deshalb ist mein Endergebnis nur dieser zusätzliche Backslash \.
(EDIT: lag am eingeschaltetem "[_] Show drive combobox")


Ich habe hier 1.1.22.09 laufen.
Dort lautet die Syntax "FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])"

Das hat mich verwirrt.





Aber das habe ich nicht ausprobiert, weil ich am Anfang nicht verstanden hatte, wieso da dieses '>' Zeichen im Spiel ist.
Deshalb hatte ich mir über den Loop die erste Zeile geholt, und dann mit diesem Konstrukt weitergemacht.



Ich bin dann mal AFK.



 
Last edited by Stefan2 on 2016-06-18, 07:29 UTC, edited 1 time in total.
User avatar
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Ah, Eins noch:






<<<<<<<<< WM_USER+50 = Posts: 1074







:lol:


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

Post by *tuska »

2Roman & 2Stefan2
Danke für Eure Bemühungen. Leider haben diese [noch] nicht zu dem gewünschten Ergebnis geführt.

Was soll grundsätzlich erreicht werden?
1. Start des AHK-Skripts
2. TC starten, gewünschtes Verzeichnis aufrufen, zB %Commander_Path%\Tests in dem man eine beliebige Datei speichern möchte (Textdatei,Word,Excel,etc.)
3. Eine beliebige Textdatei mit "Datei - speichern unter..." in dem zuvor im TC gewählten Verzeichnis, d.h. %Commander_Path%\Tests speichern, indem man zuvor in dem Dialog den Cursor VOR den Dateinamen setzt und gleichzeitig WIN + A drückt. Der Pfad aus TC wird VOR dem Dateinamen - sofern das AHK-Skript richtig funktioniert - und noch VOR dem speichern eingefügt.

Begründung:
Wenn man in einer Anwendung (Textdatei, Word, Excel, etc.) mit "Datei - speichern unter..." das gewünschte Verzeichnis erreichen will, dann muß man sich uU ganz schön "durcharbeiten" bis man in das gewünschte Verzeichnis gelangt, währenddessen man sich im TC wesentlich schneller durch die Verzeichnisstruktur bewegen kann bzw. gespeicherte Verzeichnisse verfügbar hat.

Für mich funktioniert hier bisher nur das Skript von Herrn Ghisler unter TC 9.0 beta1+2 64 bit, Win10 Pro x64:
http://ghisler.ch/board/viewtopic.php?p=310423#310423

Da ich die 64-bit Version von TC 9.0 verwende würde mir das persönlich auch ausreichen. Bei evtl. weiteren Tests kann ich dennoch meine Unterstützung anbieten - aber vielleicht möchtet Ihr Eure Skripte unter den o.a. Voraussetzungen auch mal selbst ausprobieren?
Last edited by tuska on 2016-06-18, 07:28 UTC, edited 1 time in total.
User avatar
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Hacker wrote:Stefan2,
Was funktioniert denn an meiner Variante nicht?

Roman
Sie funktioniert nicht, wenn man "[_] Show drive combobox" eingeschaltet hat. (siehe Posts oben)







 
User avatar
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

SendMessage 1074, 21, ControlGetText, PathInTC

Post by *Stefan2 »

ghisler(Author) wrote: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...
Correct ControlGetText syntax:

Code: Select all

#SingleInstance, Force

#IfWinExist, ahk_class TTOTAL_CMD
$#a::	;press shortcut Win-A
	;TC v9: WM_USER+50 = 1074  ;See Hstory.txt "08.06.16 Release Total Commander 9.0 beta 1"
	SendMessage 1074, 21, 0, , ahk_class TTOTAL_CMD
	MsgBox ErrorLevel: %ErrorLevel%     ; e.g.:66308

	;AHK-L v1.1.22.09:
	;ControlGetText, OutputVar [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]
	;To operate upon a control's HWND (window handle), 
	;leave the Control parameter blank 
	;and specify <<<ahk_id %ControlHwnd%>>> for the WinTitle parameter
	ControlGetText, varPathInTC, , ahk_id %ErrorLevel%

	StringReplace, varPathInTC, varPathInTC, >, \
	;SendInput, {Raw}%varPathInTC% ;// << requested command by user tuska
	MsgBox PATH: %varPathInTC% 
Return



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

Post by *tuska »

ErrorLevel: 7014276 unter TC 9.0ß2 64 bit, Win10 Pro x64.
ErrorLevel: 0 unter TC 8.52a 64 bit, Win10 Pro x64.
Gruß,
Karl
User avatar
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

tuska wrote:ErrorLevel: 7014276 unter TC 9.0ß2 64 bit, Win10 Pro x64.
Kein Problem.

Dieser ErrorLevel is nur quasi die Hausnummer, die ID des Controls.
Diese ID muss man ermitteln, und dann in Folge verwenden.

In etwa wie die Telefonauskunft:
- "Wie ist denn die Nummer vom TC, bitte?" (SendMessage 1074, 21)
- "Die lautet 7014276 !" (siehe %ErrorLevel%)
- "OK, danke, dann probier ich mal den TC unter der 7014276 zu erreichen." (ControlGetText, myVar, , ahk_id %ErrorLevel%)


Bei mir ist diese Nummer halt zurzeit bei TC9-32 die '66308'.


tuska wrote:ErrorLevel: 0 unter TC 8.52a 64 bit, Win10 Pro x64.
(TC 8 hat ja noch kein WM_USER+50)





Alle drei Skripte funktionieren bei mir unter 32-bit TC v9

Meins
http://ghisler.ch/board/viewtopic.php?p=310491#310491 - - - EDIT 2:

Romans
http://ghisler.ch/board/viewtopic.php?p=310438#310438 - - - bei ausgeschaltetem "[_] Show drive combobox"

Christians
http://ghisler.ch/board/viewtopic.php?p=310532#310532 - - - mit korrigierter ControlGetText Syntax


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

Post by *tuska »

2Stefan2
Ja, wenn diese Skripte bei Euch funktionieren, dann ist ja alles gut (und funktionieren vermutlich auch für andere User).

Für mich als Normalanwender funktioniert nur das mit TC 9 64-bit.
(Habe jetzt allerdings nur Code unter 1. Link getestet ... "Meins" - "EDIT 2" wurde berücksichtigt - dann habe ich schon aufgegeben).

Vielleicht könntet ihr ja für andere User (Normalanwender ohne Programmierkenntnisse ) die Code-Varianten für TC 9 32-bit und TC 8.52a 32+64-bit in der Form zur Verfügung stellen, bei denen es mit copy/paste dann funktionieren sollte - [oder eine Zusammenfassung mit sämtlichen Code-Varianten wäre wünschenswert].

Ich werde meine Tests mit den bisher verlautbarten Codes für diese Varianten einstellen, da ich hier nicht mehr weiterkomme.
Gruß,
Karl
User avatar
Hacker
Moderator
Moderator
Posts: 13064
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Stefan2,
Sie funktioniert nicht, wenn man "[_] Show drive combobox" eingeschaltet hat. (siehe Posts oben)
Danke schön, habe es reproduzieren können. So vielleicht?

Code: Select all

#IfWinExist, ahk_class TTOTAL_CMD

; Default shortcut is Win-A
$#a::
	WinGetText, TCWindowText, ahk_class TTOTAL_CMD
	RegExMatch(TCWindowText, "m)(?<=^).*?(?=>)", PathInTC)
	Send, {Raw}%PathInTC%\
Return
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
Stefan2
Power Member
Power Member
Posts: 4157
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Hacker wrote: So vielleicht?
Ja, funktioniert bei mir mit TC8/TC9 in 32-bit ENG (auf Win7/32)
mit und ohne "[_] Show drive combobox"

:thumpsup:





(tuska, die nächste Woche teste ich mal TC/64 auf Win7/64 und Win8
... Hm, eigentlich kann ich ja auch auf Win10 testen, muss ich nur mal raus holen)








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

Post by *tuska »

2Roman & 2Stefan

Mit diesem hier von Roman verlautbarten Code:
http://ghisler.ch/board/viewtopic.php?p=310542#310542
ist es nun auch mir gelungen unter folgenden Versionen Tests erfolgreich durchzuführen:
TC 8.52a 64 bit, Win10 Pro x64.
TC 8.52a 32 bit, Win10 Pro x64.
TC 9.0ß1 64 bit, Win10 Pro x64.
TC 9.0ß1 32 bit, Win10 Pro x64.
TC 9.0ß2 64 bit, Win10 Pro x64.
TC 9.0ß2 32 bit, Win10 Pro x64.

Vielen Dank für Eure Bemühungen!

Wenn ich mir noch eine Anmerkung erlauben darf:
> bei dem Code von Herrn Ghisler wird der Pfad vor dem Dateinamen unverzüglich eingefügt.
> bei dem o.a. Code erfolgt die Ausrollung des Pfades vor dem Dateinamen langsamer.
Das stellt für mich aber kein Problem dar.

Besten Dank nochmals!
Gruß,
Karl
Post Reply