FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

German support forum

Moderators: Stefan2, white, sheep, Hacker

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

FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Stefan2 » 2018-09-03, 15:41 UTC

TCs' Benutzer definierte Kommandos / Eigene Befehle / Erweiterte Befehle (em_xxxxx)


Finde mich (unterschiedliche Bezeichnungen für dieses Thema):
Benutzer-definierter Befehl (BDB) // Benutzer-definiertes Kommando (BDK) // User defined command (UDC) // extended command em_
Erweiterter Befehl (em_xxxxx , em-Befehl em-Kommando) als Ergänzung zu internen Befehlen (commandos cm_xxxxx)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Zur Vertiefung

Für weitere Informationen siehe auch:

"Button anlegen / Buttonbar erstellen / Icons"
https://ghisler.ch/board/viewtopic.php?f=2&t=50016&p=342115

TC Automatisieren Skripten (Generelle Infos) >> Post 2 - Quoting / Anführungszeichen
https://ghisler.ch/board/viewtopic.php?p=336059#p336059


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Benutzer definierte Kommandos

Als Alternative zu den TC internen “cm_irgendwas” Kommandos,
(siehe TOTALCMD.INC -Datei im TC-Ordner: cm_RightBySize, cm_RenameOnly, cm_CompareDirs,...)

kannst du auch eigene Anwenderbefehle, “em_irgendwas”, erstellen.
(z.B.: em_Rechner, em_StarteAHKprogramm, em_RunNotepad, em_OpenTCFolder, em_GoToMyHome)

Um eigene Befehle zu erstellen, folge einem dieser beiden Möglichkeiten.


Möglichkeit 1, manuelle Erstellung durch editieren der „usercmd.ini“

Merke 1: die usercmd.ini befindet sich immer im Ordner mit der wincmd.ini. (Siehe Hilfe-Menü > Über TC > Pfade)
Merke 2: falls keine usercmd.ini vorhanden ist, erstelle eine normale Textdatei mit diesem Namen.

-----------------------------

Code: Select all

[em_MyCommandName] 
cmd=    "Kommando": kompletter oder relativer Pfad zum gewünschten Programm, oder ein internes cm_xxx oder Benutzer Kommando em_xxx.
param=  "Parameter": Parameter zu deinem Programm, bzw. TC-interne Parameter wie zB %P %N %T %L %F %S .....
path=   "Startpfad": Arbeitsordner, bleibt meistens leer, da das gerade aktive Panel (Fenster) als Arbeitsverzeichnis verwendet wird.
menu=   "Tooltip”: Bezeichnung, eigene Erklärung zu diesem Befehl.
button= "Icondatei": Pfad zur Datei mit dem Icon, zB wcmicons.dll
iconic= "1": Programmfenster minimiert, -oder- "0": Programmfenster  maximiert ausführen 
-----------------------------

Tipp: öffne einen existierenden Button per Rechtsklick, dann drücke die F1-Taste und lies weiter.

Nur CMD muss hier verwendet werden.
PARAM und ICONIC nur bei Bedarf.
PATH bleibt meistens leer, da das gerade aktive Panel (Fenster) als Arbeitsverzeichnis verwendet wird,
Die Zeilen MENU und BUTTON nur dann, falls dieses BDB auch als Kommando in einem Button verwendet werden soll.




Beispiele
totalcmd\usercmd.ini wrote:[em_Rechner]
cmd=calc.exe

[em_StarteAHKprogramm]
cmd=%Commander_Path%\MyTools\AHK\AutoHotkey.exe
param=%P%O.ahk

[em_RunNotepad]
cmd=notepad

[em_OpenTCFolder]
cmd=explorer %Commander_Path%

[em_GoToMyHome]
cmd= CD %USERPROFILE%\My Documents

[em_ReNamer]
cmd=%Commander_Path%\MyTools\ReNamer\ReNamer.exe
Param=/list "%L"

[em_CopyBasenameToClip]
cmd=%comspec% /c
param=del %%tmp%%\tctmp & for /f "tokens=*" %%B in ('dir /b %S') do @echo %%~nB >> %%tmp%%\tctmp & type %%tmp%%\tctmp |clip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Möglichkeit 2, über den Dialog

(Siehe auch die Anmerkungen bei "Möglichkeit 1")


- Buttonbar > rechte Maustaste > "Ändern..." drücken.
- Ganz links im Button-Dialog den Button "Anfügen" drücken (Nur falls gleich ein neuer Button gewünscht wird (anstatt nur ein UDC zu erstellen).
Oder, einfach zur Sicherheit, da sonst das letzte Kommando in der Bar geändert wird, falls am Ende aus Versehen auf [OK] geklickt wird)

- Im Button-Dialog auf das [Lupensymbol] klicken

(Oder stattdessen 'cm_CommandBrowser' in die TC-Befehlszeile eingeben)

-- Links, die Kategorie "usercmd.ini" auswählen
(Falls noch keine usercmd.ini existiert, wird eine Datei mit diesem Namen im TC-Ordner erstellt)
-- Unten, auf Button [Neu] klicken

-- Einen Name für den benutzerdefinierten Befehl eingeben, z.B. [ em_MeinErstesUDC ] (das "em_" muss sein!)
-- Auf Button [OK] klicken

--- Eigenschaften für den Befehl eingeben.
zum Beispiel:
Kommando: Notepad
Parameter: "%O.txt"
Startpfad:
Icondatei; Notepad
Icon:
Tooltip: Erstelle Textdatei mit Namen unter Cursor.

--- Den Eigenschaften-Dialog mit [OK] schließen.
-- Den Befehlsbrowser mit [OK] schließen.

- Den Button-Dialog schließen, falls geöffnet.
ACHTUNG!
Mit [OK] wird der letzte Befehl in der Buttonbar durch den neuen benutzerdefinierten Befehl überschrieben.
Falls nicht gewünscht (sondern nur ein UDC erstellt werden sollte), den Button-Dialog mit [Abbrechen] schließen.

Fertig.


- - -


Siehe auch das Wiki > http://www.ghisler.ch/wikide/index.php/Benutzerdefinierte_Befehle

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Qouting / Anführungszeichen: "...."
Beachte das Pfade mit Leerzeichen und Parameter korrekt gequoted (in Anführungszeichen "..." gesetzt) sein müssen.
Die TC-interne Parameter quoted der TC oftmals selbst, aber nur da wo es laut Herr Ghisler Sinn ergibt.
(das automatische Quoting macht er bei %N, bei %P%N, bei %P%S sowie bei %T%M) Das ist ein Thema für sich. Ausprobieren!
Um konsequent einheitlich zu arbeiten, hilft meistens nur das Entfernen der Anführungszeichen im aufgerufenen Skript und explizit neu setzen.
(((ACHTUNG: beim Aufruf externer Programme/Skripte werden oftmals die (äußeren) Anführungszeichen entfernt, daher muss man diese
deshalb im Parameterfeld doppelt " "----" " (oder bei PowerShell-Skripten gar dreifach: " " "...." " ", oder einfache verwenden: '...') angeben.)))



Schrägstrich hinter Ordnernamen
Bitte beachte, dass der Parameter %P ein abschließenden Backslash "\" anhängt.
Dies passiert auch bei Listen wie %F und %L, das kann man dann benutzen, um in Skripten, Ordner von Dateien unterscheiden zu können.
Ein %P in Anführungszeichen >>> "%P" ergibt somit zB den String "C:\Temp\".
Nun gibt es Porgramme, welche das ' \" ' am Ende als ein escapen des Anführungszeichen sehen,
dass ergibt einen String wie zB ' "C:\Temp ' OHNE abschließendes Anführungszeichen.
Hier kann der folgende Trick helfen: verwende "%P." (mit abschließendem Punkt) ,
dass ergibt den String "C:\Temp\.", welchen das aufgerufene Programm hoffentlich versteht.
Oder hänge einen extra Backslash "\" an: "%P\", was zu "C:\Temp\\" expandiert wird,
was wiederum "escape" das "\"-Zeichen bedeutet, es wird somit aufgehoben und als "C:\Temp" interpretiert.
Es kommt immer auf das aufgerufene Programm bzw. Interpreter an, wie der vom TC übergebene String erkannt und verwertet wird.
Hier hilft oft nur bloßes ausprobieren, oder durchsuche das Forum nach Beispiele.




- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Verwende ein Benutzer-definierte Kommando auch als Befehl in einem Button

Beispiel:

Kommando: em_MeinErstesUDC
Parameter:
Startpfad:
Icondatei: (falls etwas bei "button=..." eingetragen wurde, dann wird diese Icon hier automatisch auch eingetragen,
ansonsten trage hier zB WCMICONS.DLL ein)
Icon:
Tooltip: (falls etwas bei "menu=..." eingetragen wurde, dann wird der Text hier auch automatisch eingetragen,
ansonsten trage hier einen "Text frei nach Wahl" ein)

Wichtig ist, das Kommando über das Lupen-Symbol Icon auszuwählen, und nicht einfach nur den Namen des Kommandos eintragen!



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Weise einem Befehl (em_ oder cm_) ein Tastaturkürzel zu

Öffne „Konfigurieren > Einstellungen > Diverses“
* Bei Tastaturkürzel wähle eine freie Kombination
* Klicke auf das Vergrößerungsglas um ein Kommando auszusuchen
* Tippe em_ (oder cm_) zum filtern und wähle das gewünschte Kommando (z.B.: em_Rechner)
* Schließe den Einstellungsdialog mit [OK]
* Noch einmal [OK] und Fertig.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Ein paar Anmerkungen, gefunden im Forum
FRAGE:
Kommando: %COMMANDER_PATH%\ADDONS\TCMENU.EXE
Parameter: %APPDATA%\GHISLER\windows.bar
Leider bekomme ich %APPDATA%, als Parameter für den TCmenu Aufruf, vom TC nicht expandiert. Geht das und wie?

ANTWORT:
Nein, geht nicht.
Umgebungsvariablen wie %APPDATA% werden im Parameterfeld nicht aufgelöst um Verwechslungen mit den internen Platzhaltern ( z.B. %P%N ) zu vermeiden

Umgebungsvariablen gehen nur im Feld "Kommando".

Verschiebe die Parameter von Parameter nach Kommando. z.B.
Kommando: %COMMANDER_PATH%\ADDONS\TCMENU.EXE %APPDATA%\GHISLER\windows.bar
Parameter: <leer>

Falls %COMMANDER_PATH% oder %APPDATA% Leerzeichen enthält, müssen Sie noch doppelte Anführungszeichen verwenden:
Kommando: "%COMMANDER_PATH%\ADDONS\TCMENU.EXE" "%APPDATA%\GHISLER\windows.bar"
Parameter: <leer>

Eine Alternative wäre eventuell ein Umweg über COMSPEC.
Prozentzeichen in "Parameter" müssen dabei verdoppelt werden, damit der Kommandointerpreter die Variablen erweitert:

Kommando : %COMSPEC% /c start "" "%COMMANDER_PATH%\ADDONS\TCMENU.EXE"
Parameter: "%%APPDATA%%\GHISLER\windows.bar"

tuska Posted: Tue Oct 20, 2015 22:44 Post subject: Datei per Email senden - Shortcut
http://ghisler.ch/board/viewtopic.php?t=40130

- em_ User-Kommando erstellen:

1. Rechtsklick auf einen freien Platz neben der Symbolleiste > auf "Ändern" drücken
2. Button "Anfügen" drücken
3. Klick auf das Lupen-Symbol

4. Links unter "Kategorie" nach unten scrollen und Klick auf "usercmd.ini"
5. Klick auf Button "Neu..."
6. Neuer Name für Befehl eingeben, zB em_Datei_an_Email, dann OK drücken
7. Kommando, Parameter, Icondatei, Tooltip erfassen (drücke F1-Taste für Hilfe)
______
______Kommando: outlook
______Parameter: /a %P%N
(Siehe support.office.com article/Command-line-switches-for-Outlook)
______Icondatei: C:\WINDOWS\System32\shell32.dll => das Brief-Symbol auswählen
______Tooltip: Strg + E | Datei unter Cursor mit Outlook versenden
______

8. OK, OK, OK drücken



- Tastaturkürzel anlegen:

1. Menü "Konfigurieren" - Einstellungen - Diverses auswählen
2. Tastenkombinationen umdefinieren: zum Beispiel
______anhaken von "Strg +",
______dann rechts außen das Dropdown-Feld anklicken und den Buchstaben "E" auswählen
3. In der Zeile von "Befehl" auf die Lupe klicken
4. In der Kategorie wieder usercmd.ini auswählen
5. Den Befehl "em_Datei_an_Email" anklicken, dann OK-Button drücken
6. ACHTUNG - Wichtig: Jetzt den grünen Pfeil rechts von der Lupe anklicken
7. OK anklicken
FERTIG

Ab jetzt sollte mit dem zeigen auf eine Datei im TC (Markierung nicht erforderlich)
und drücken von Strg + E eine neue Outlook-Nachricht erscheinen,
bei dem automatisch die Datei als Anhang vorhanden ist.

Gruß
Karl


 

User avatar
Frizz
Junior Member
Junior Member
Posts: 54
Joined: 2011-06-18, 12:20 UTC

Re: FAQs: TCs' Benutzer-definierte Befehle (BDB) (em_xxxxx) UserCmd.ini

Post by *Frizz » 2018-09-03, 17:51 UTC

@Stefan2
Buttonbar > rechte Maustaste > "Ändern..."
Im Button-Dialog auf das [Lupensymbol] klicken
wie weiter unten Tuska zitiert wird:
1. Rechtsklick auf einen freien Platz neben der Symbolleiste > auf "Ändern" drücken
2. Button "Anfügen" drücken
Anfügen, da sonst das letzte, bestehende Kommando geändert wird.
Rutscht mir ab und an durch. :roll:
Gruß Frizz


User avatar
Lucky Joe
Junior Member
Junior Member
Posts: 91
Joined: 2012-07-25, 10:30 UTC

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Lucky Joe » 2018-10-02, 19:59 UTC

Hallo zusammen,

eine sehr schöne Einführung - Danke dafür!
Ich beschäftige mich gerade mit em_xxxxx und Autohotkey. Mein erstes Script funktioniert auch schon ganz gut; Ist-Stand:

1. In der "UserCmd.ini" neuen Eintrag erzeugt:
[em_Test]
cmd=d:\Scripte\TC\Test.ahk
param=%P%N

2. Zuweisen eines Tastenkürzels zu diesem Eintrag

3. Test.ahk geschrieben (benennt Datei unter dem Cursor um)

Code: Select all

#NoEnv
#SingleInstance force

Parameter := %0%
If (Parameter = 0)
{
	MsgBox, Keine Datei ausgewählt!
	Exit Sub
}

TCDatei = %1%

If InStr(FileExist(TCDatei), "D")
{
	msgText = Routine bei Verzeichnissen nicht erlaubt.
	MsgBox, 16, Fehler, %msgText%, 5
	Exit Sub
}

SplitPath, TCDatei,, Pfad, Erweiterung, Dateiname

MyDatei = %Pfad%\%Dateiname%
Zaehler := 0
Loop
{
	IfNotExist, %MyDatei%.%Zaehler%.%Erweiterung%
	{
		NameNeu = %MyDatei%.%Zaehler%.%Erweiterung%
		Break
	}
	Zaehler++
}
FileMove, %TCDatei%, %NameNeu%
PostMessage, 1075, 540
Bis zur vorletzten Zeile läuft das auch einwandfrei, allerdings fehlt mir ein "Refresh" der Ansicht, also der interne Befehl "Quelle neu einlesen". Der Befehl "PostMessage, 1075, 540" hier funktioniert nicht.

Rufe ich ein Script "extern" auf, dann liest AHK mit "PostMessage, 1075, 540" die Quelle neu ein und aktualisiert die Darstellung entsprechend.

Was muss ich bei dem Autohotkey-Script eingeben, damit TotalCommander die Anzeige aktualisiert?

Danke im Voraus!
Lucky Joe

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

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Stefan2 » 2018-10-02, 21:17 UTC

2Lucky Joe

kA, aber versuch's mal mit 'Send' statt 'Post'.


Ansonsten vielleicht einfach Strg+R senden? (STRG+R Quellverzeichnis neu einlesen)

#IfWinActive, ahk_class TTOTAL_CMD
Send ^R



Oder vorher ein
Sleep, 50


HTH? :?
 

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

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Hacker » 2018-10-02, 21:30 UTC

Lucky Joe,
Stefan2 wrote:versuch's mal mit 'Send' statt 'Post'
Nee, tue das nicht, denn es ändert sich nichts jedoch wirst du darauf 5 Sekunden länger warten.
Versuch's mal mit

Code: Select all

PostMessage, 1075, 540, , , ahk_class TTOTAL_CMD
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
Dalai
Power Member
Power Member
Posts: 6565
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Dalai » 2018-10-02, 21:39 UTC

Wo wird denn festgelegt, wohin die Message geschickt wird? Beim Senden von Nachrichten würde ich immer dafür sorgen, dass das Ziel ganz genau definiert ist. Zudem kann bei Problemen das Auswerten von ErrorLevel nicht schaden.

Strg+R an ein TC-Fenster zu senden sollte man vermeiden, denn der Benutzer kann diese Tastenkombination redefiniert haben. Ja, wenn man das Skript nur selbst verwendet, mag das gehen, aber in ein paar Monaten/Jahren wundert man sich, warum im TC "irgendwas komisches passiert".

Grüße
Dalai
#101164 Personal licence
Athlon X4 880K, 16 GiB RAM, Gigabyte F2A88X-D3HP, Win7 x64

Plugins: Services2, Startups

User avatar
Lucky Joe
Junior Member
Junior Member
Posts: 91
Joined: 2012-07-25, 10:30 UTC

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Lucky Joe » 2018-10-03, 09:18 UTC

Vielen Dank für eure Antworten. Die Lösung von Roman funktioniert perfekt - jetzt kommt mir das Script auch nicht mehr so langsam vor.

Viele Grüße
Lucky Joe

PS: Was bedeutet "HTH"?

User avatar
HolgerK
Power Member
Power Member
Posts: 5070
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *HolgerK » 2018-10-03, 10:00 UTC

Lucky Joe wrote:
2018-10-03, 09:18 UTC
PS: Was bedeutet "HTH"?
Such dir was aus:
https://acronyms.thefreedictionary.com/HTH

Mir persönlich gefällt "Hotter Than Hell" eigentlich ganz gut... ;-)

Ansonsten: https://de.wikipedia.org/wiki/Liste_von_Abk%C3%BCrzungen_(Netzjargon)#H

HTH?
Holger
Make our planet great again

User avatar
Lucky Joe
Junior Member
Junior Member
Posts: 91
Joined: 2012-07-25, 10:30 UTC

Re: FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini

Post by *Lucky Joe » 2018-10-03, 10:12 UTC

YTH - THX ... yes that helped - thanks :-)

Post Reply