"komplexe" benutzerdefinierte Ansicht

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
User avatar
hoppfrosch
Junior Member
Junior Member
Posts: 67
Joined: 2004-10-20, 05:39 UTC

"komplexe" benutzerdefinierte Ansicht

Post by *hoppfrosch »

Ich möchte eine "komplexe" benutzerdefinierte Ansicht realisieren und möglichst mit einer einzigen Aktion (z.B. Button) aktivieren

Mit manueller Eingabe gelingt mir das, ich habe noch Probleme das zu automatisieren. Was ich momentan mache ist:
  1. Setzen eines benutzerdefinierten Dateifilters

    Lefteous schreibt in http://www.ghisler.ch/board/viewtopic.php?t=11851, dass es die Möglichkeit gibt, den Befehl

    Code: Select all

    cd >MYFILTER
    in benutzerdefinierten Kommandos zu verwenden (mit MYFILTER: Name eines benutzerdefinierten Dateifilters)

    Ich habe diesen Befehl auf ein benutzerdefiniertes Kommando (z.B. em_Test) gelegt.
  2. Auswahl des Benutzerdefinierten Views

    Code: Select all

    cm_SrcCustomView4
  3. Flat-View auswählen

    Code: Select all

    cm_DirBranch
Nun meine Fragen:
  • Wie mache ich es am effektivsten diese Kommandos als einen Satz hintereinander ausführen zu lassen?
  • Ich habe versucht ein Batchskript zu schreiben, welches die Kommandos an den TC schickt (mit Hilfe von http://www.ghisler.ch/wiki/index.php/AutoHotkey:_Send_a_command_to_Total_Commander). Das Ganze scheitert daran, dass das Autohotkey-Skript keine benutzerdefinierten Kommandos verarbeitet. Gibt es irgendein ähnliches Tool, welches in der Lage ist, auch benutzerdefinierte Kommandos zu verarbeiten?
  • Fragen zum Befehl:

    Code: Select all

    cd >MYFILTER
    • Wo ist diese Funktionalität dokumentiert? Die Suche danach in der TC-Hilfe bringt nichts (welche Schlagworte verwendet man? Weder cd noch Filter bringt irgendwas dazu ...)
    • Wo kann man diesen Befehl im TC überall verwenden? In der Kommandozeile funktioniert der Befehl schon mal nicht ... Funktioniert der Befehl nur in benutzerdefinierten Kommandos?
Danke,
Hoppfrosch
User avatar
van Dusen
Power Member
Power Member
Posts: 684
Joined: 2004-09-16, 19:30 UTC
Location: Sinzig (Rhein), Germany

Post by *van Dusen »

hoppfrosch wrote:Ich habe versucht ein Batchskript zu schreiben, welches die Kommandos an den TC schickt (mit Hilfe von http://www.ghisler.ch/wiki/index.php/AutoHotkey:_Send_a_command_to_Total_Commander). Das Ganze scheitert daran, dass das Autohotkey-Skript keine benutzerdefinierten Kommandos verarbeitet.
Die Lösung für AHK findest Du hier (Thread "[Question] about em_cmds")
hoppfrosch wrote:Gibt es irgendein ähnliches Tool, welches in der Lage ist, auch benutzerdefinierte Kommandos zu verarbeiten?
Da gäbe es zum Beispiel noch AutoIt. Ein AutoIt-Script, welches auf der Kommandozeile mehrere TC-Kommandos (eingebaute cm_*- und benutzerdefinierte em_*-Kommandos) entgegennimmt und nacheinander an den TC sendet, sähe z.B. so aus:

Code: Select all

$ver = "SendCommandsToTC V1.0, van Dusen 16.09.2007"
;*** Aufruf z.B.: SendCommandsToTC em_cdArchive cm_SrcCustomView11 cm_DirBranch
;*** em_cdArchive      = CD >Archive
;*** cm_SrcCustomView11 = 281 (benutzerdefinierte Spaltenansicht #11)
;*** cm_DirBranch      = 2026 (Zweigansicht)

AutoItSetOption("WinTitleMatchMode", 4)
$hTC = WinGetHandle("classname=TTOTAL_CMD")
$strIncFile = EnvGet("COMMANDER_PATH") & "\TOTALCMD.INC"
$strTCIncSections = IniReadSectionNames($strIncFile)

For $i = 1 To $CmdLine[0]
	
	$ok = False
	Switch StringLeft($CmdLine[$i], 3)
		
		Case "cm_"
			For $j = 1 To $strTCIncSections[0]
				$intTCCmd = IniRead($strIncFile, $strTCIncSections[$j], $CmdLine[$i], "0") * 1
				If $intTCCmd > 0 Then
					DllCall("user32.dll", "int", "PostMessage", "hwnd", $hTC, "int", 1075, "int", $intTCCmd, "int", 0)
					$ok = True
					Sleep(100)
					ExitLoop
				EndIf
			Next
			If Not $ok Then MsgBox(48, $ver, $CmdLine[$i] & " (Kommando #" & $i & ")" & @LF & "nicht in " & $strIncFile & " gefunden!"); debug
			
		Case "em_"
			$structEmCmd = DllStructCreate("char[" & StringLen($CmdLine[$i]) + 1 & "]")
			DllStructSetData($structEmCmd, 1, $CmdLine[$i])
			
			$structCOPYDATA = DllStructCreate("udword;dword;ptr")
			DllStructSetData($structCOPYDATA, 1, Asc("E") + 256 * Asc("M"))
			DllStructSetData($structCOPYDATA, 2, StringLen($CmdLine[$i]))
			DllStructSetData($structCOPYDATA, 3, DllStructGetPtr($structEmCmd))
			
			;*** Windows-Messagecode WM_COPYDATA = 0x4A
			DllCall("user32.dll", "int" , "SendMessage", "hwnd", $hTC, "int", 0x4A, "int", 0, "ptr", DllStructGetPtr($structCOPYDATA))
			
			$structEmCmd = ""
			$structCOPYDATA = ""
			Sleep(100)
			
		Case Else
			MsgBox(48, $ver, $CmdLine[$i] & " (Kommando #" & $i & ")" & @LF & "wird nicht unterstützt!")
			
	EndSwitch
	
Next
Aufruf z.B.:
SendCommandsToTC em_cdArchive cm_SrcCustomView11 cm_DirBranch
icfu
Power Member
Power Member
Posts: 6052
Joined: 2003-09-10, 18:33 UTC

Post by *icfu »

Die Lösung für AHK findest Du hier (Thread "[Question] about em_cmds")
Die Syntax hat sich mittlerweile vereinfacht; hier wäre die Basisfunktion zum Senden eines benutzerdefinierten Kommandos:

Code: Select all

v_UserCommand := "em_BlaBla"
SendUserCommand(v_UserCommand)

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)
}
Icfu
This account is for sale
User avatar
hoppfrosch
Junior Member
Junior Member
Posts: 67
Joined: 2004-10-20, 05:39 UTC

Post by *hoppfrosch »

Danke für die bisherigen Lösungsvorschläge.
Ich halte mich an die Autohotkey-Lösung (eine zusätzliche Skriptsprache reicht mir eigentlich ...)

Offen sind noch meine Fragen bezüglich "cd":
Fragen zum Befehl:

Code: Select all

cd >MYFILTER
* Wo ist diese Funktionalität dokumentiert? Die Suche danach in der TC-Hilfe bringt nichts (welche Schlagworte verwendet man? Weder cd noch Filter bringt irgendwas dazu ...)
* Wo kann man diesen Befehl im TC überall verwenden? In der Kommandozeile funktioniert der Befehl schon mal nicht ... Funktioniert der Befehl nur in benutzerdefinierten Kommandos?
Post Reply