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

German support forum

Moderators: sheep, Hacker, Stefan2, white

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

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

Post by *Stefan2 »

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

cm_irgendwas = interner Befehl
em_irgendwas = Benutzerbefehl

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

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

Was jetzt genau als Kommando eingtragen wird ist von Fall zu Fall unterschiedlich,
meistens sind es Einräge, wie man sie auch in eine DOS Batchdatei bzw. in das schwarze DOS-Fenster (cmd.exe) schreiben würde.
Siehe hierzu die Beispiele, lies die Hilfe (siehe unten) oder suche im Forum nach den Stichwörtern (wie zB usercmd.ini), zur Not erstelle einen neuen Thread mit deiner Frage.


Um solch einen eigenen Befehl zu erstellen, folge einem dieser beiden Möglichkeiten.


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

Für erfahrene Anwender ist ein direktes Editieren der usercmd.ini der schnellste Weg, um ein neues Benutzerkommando anzulegen.
Du kannst aber gerne auch die Möglichkeit 2 (über den Dialog, siehe unten) verwenden.

Die usercmd.ini befindet sich immer im Ordner mit der wincmd.ini. (Speicherort siehe Menü "Hilfe > Über Total Commander... > INI-Dateien").
Falls keine usercmd.ini vorhanden ist, erstelle eine normale Textdatei mit diesem Namen (die "Möglichkeit 2" unten erstellt diese Datei automatisch).


Beispieleintrag
-----------------------------

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 
-----------------------------

Tipps:

Öffne einen existierenden Button per Rechtsklick und "Ändern...",
dann drücke die F1-Taste oder klicke den [Hilfe]-Button und lies weitere Details.

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 BDK 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


[em_ExtractToFolder]
; extracting a zip into folder with ZIP-filename as folder name.
; https://ghisler.ch/board/viewtopic.php?p=384429#p384429
; Usage: 7za <command> [<switches>...] <archive_name>
;    x: eXtract files with full paths
;    -y: assume Yes on all queries
;    -o{Directory}: set Output directory
; TC params:
;    %O Dateiname ohne Erweiterung (hier für den Ordnernamen verwendet)
;    %N Dateiname.ext
;    %P für Pfad ist nicht nötig, da der TC sowieso mit dem aktuellen aktiven Pfad arbeitet
cmd="%Commander_Path%\TOOLs\PACKER\7za.exe"
param=x -y -o"%O" %N
; ; Note: %O muss in Anführungszeichengesetzt sein, für den Fall, dass der Archivname Leerzeichen enthält.
; ; Bei %N macht TC das automatisch von sich aus, wenn er ein Leerzeichen entdeckt.
; ; Verwende ein führendes ?-Zeichen als erstes Zeichen beim Parameter, um dies selbst aus zu testen.
; ; (Ja, dieser Automatismus ist manchmal hinderlich weil inkonsequent, da hilf nur "%O.%E" statt %N zu verwenden)


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


Möglichkeit 2, über den Dialog

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


BenutzerDefinierterBefehl // User defined command (UDC) in der usercmd.ini anlegen

- Buttonbar > rechte Maustaste > "Ändern..." drücken.
(Oder Menü "Konfigurieren > Buttonbar ändern...")

- - "Buttonbar ändern" - - -
- - Links den Button "Anfügen" drücken.
(Ansonsten ändert man den vorhandenen letzten Button!)

- - Bei "Kommando" auf das [Lupensymbol] klicken
(Das starte den 'cm_CommandBrowser')

- - - - "Befehl wählen" - - -
- - - - Links, ganz unten die Kategorie "usercmd.ini" auswählen.
(Falls noch keine usercmd.ini existiert, wird sie im TC-Ordner erstellt)
- - - -
- - - - Unten, auf Button [Neu] klicken.
- - - -
- - - - "Neuer Namen für Befehl (em_xyz)" eingeben,
- - - - z.B. em_MeinErstesUDC (das "em_" muss sein!).
- - - - [OK] "Neuer Namen für Befehl (em_xyz)"

- - - - - "Einzelnen Button ändern" - - -
- - - - - Eigenschaften für den Befehl eingeben. Beispiel:
- - - - -
- - - - - Kommando : Notepad.exe
- - - - - Parameter: "%O.txt"
- - - - - Startpfad: freilassen, um immer im aktuell aktiven Ordner zu arbeiten.
- - - - - Icondatei: Notepad.exe <<oder zB wcmicons.dll>>
- - - - - Icon . . : bei mehreren verfügbaren Icons das gewünschte auswählen.
- - - - - Tooltip .: Erstelle Textdatei mit Namen unter Cursor|Neue Zeile|Erneuter Zeilenumbruch.
- - - - -
- - - - - Klicke auf [Hilfe] für weitere Informationen
- - - - - [OK] "Einzelnen Button ändern"

- - - - [OK] "Befehl wählen"

- - [OK] "Buttonbar ändern" >> ACHTUNG!
Mit [OK] wird ein neuer Button angelegt, bzw. der letzte vorhandene Button überschrieben.
Falls man hier aber nur einen UserBefehl (UDC) anlegen wollte, hier mit [Abbrechen] schließen.

Fertig.


Kompletter Artikel unter https://ghisler.ch/board/viewtopic.php?p=346779#p346779 (diese Seite hier)
-- Verwende einen BenutzerDefinierterBefehl // User defined command (UDC) auch als Befehl in einem Button
-- Weise einem Befehl (em_ oder cm_) ein Tastaturkürzel zu
-- Qouting / Anführungszeichen
--

- - -

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 einen BenutzerDefinierterBefehl // User defined command (UDC) 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

- - -

Icons for your own em_commands in the main menu
https://ghisler.ch/board/viewtopic.php?f=3&t=67366
by *petermad » Mon Mar 30, 2020 13:49
If you want icons for your own em_commands in the main menu, you have to edit myicons.inc accordingly.
The number of the first em_command in your .mnu file will be 10000 in the myicons.inc file,
so if you want to use for example icon 88 in myicons.dll for your first em_command, you have to put:
10000=88
in your myicons.inc file.
...
.....



- - -


 

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

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

Post by *Frizz »

@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
Member
Member
Posts: 125
Joined: 2012-07-25, 10:30 UTC

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

Post by *Lucky Joe »

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
Herzliche Grüße aus dem Rheinland
Lucky Joe

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

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

Post by *Stefan2 »

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: 11758
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

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

Post by *Hacker »

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: 7187
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 »

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
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups

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

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

Post by *Lucky Joe »

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"?
Herzliche Grüße aus dem Rheinland
Lucky Joe

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

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

Post by *HolgerK »

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
Member
Member
Posts: 125
Joined: 2012-07-25, 10:30 UTC

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

Post by *Lucky Joe »

YTH - THX ... yes that helped - thanks :-)
Herzliche Grüße aus dem Rheinland
Lucky Joe

Post Reply