Welche Dateierweiterung oder welcher Datentyp oder welches Protokoll startet welches Programm? Das Tool kann diese Frage schnell beantworten. Einfach die Dateierweiterung mit oder ohne Punkt (txt oder .txt) eingeben und es wird der Programmaufruf mit den Parametern angezeigt. Enthält der Aufruf Variablen, werden diese in einer zusätzlichen Zeile aufgelöst. War der kurze Dateiname angegeben, wird in einer zusätzlichen Zeile der lange Name angezeigt.
Interessieren nur die systemweiten Angaben, kann der Eingabe ein * vorangestellt (*txt oder *.txt) oder der Datentyp (txtfile) eingegeben werden.
[Blockierte Grafik: http://s3.postimage.org/tdflyimfj/Screen_08_03_2013_14_Uhr_10_39_Sek.jpg]
Code
' 4k-Wettbewerb @Volkmar 2013
$H WINDOWS.PH
$H Messages.PH
WindowStyle 538
WindowTitle "Kommandoermittler"
Window (%MaxX \ 3),(%MaxY \ 3)
CLS ~GetSysColor(15)
Var Int SFont = External("gdi32.dll", "GetStockObject", ~Ansi_Var_Font)
SetDialogFont SFont
UserMessages $10
Set("ErrorLevel", 0)
Declare String L, Name, Command, Command2, ExTyp, Int OK, Edit, Text, Liste, Ende
DEF $SOK "\Shell\Open\Command"
DEF $SMW "Software\Microsoft\Windows\"
DEF $CVE "CurrentVersion\Explorer\FileExts"
Edit = Create("Edit", %HWnd, "", 4, 4, 88, 22)
Text = Create("Text", %HWnd, "", 96, 6, Width(%HWnd) - 102, 18)
Liste = Create("ListBox", %HWnd, 0, 4, 28, Width(%HWnd) - 8, Height(%HWnd) - 32)
WhileNot Ende
SetFocus(Edit)
WaitInput
If %UMessage = $10
Break
ElseIf %Key = 13
GetCmd2(Trim$(GetText$(Edit)))
EndIf
EndWhile
End
Proc GetCmd2
Parameters String CMD
Var Int Sys = 0
ClearList Liste
SetText Edit, ""
Name = ReadINI$("HKEY_1",$SMW + $CVE + "\" + CMD + "\UserChoice", "ProgID")
If Name = ""
Name = ReadINI$("HKEY_1", $SMW + "Shell\Associations\UrlAssociations\" + CMD + "\UserChoice", "ProgID")
Case Name = "" : Name = ReadINI$("HKEY_1",$SMW + $CVE + "\." + CMD + "\UserChoice", "ProgID")
EndIf
If Name = ""
'
EndIf
If Name = ""
GetCMD(CMD)
Sys = 1
Else
Command = ReadINI$("HKEY_2", "Software\Classes\" + Name + $SOK, "")
AddString(Liste, CMD)
AddString(Liste, "ProgrammID: " + Name)
AddString(Liste, "Kommando: " + Command)
GetExCMD(Command)
EndIf
IfNot Sys
AddString(Liste, "")
GetCMD(CMD)
EndIf
SetMaxWide(Liste, SFont)
EndProc
Proc GetCmd
Parameters String CMD
If CMD <> ""
Case GetCount(Liste) : AddString(Liste, "----------")
AddString(Liste,"System")
AddString(Liste, CMD)
OK = 0
WhileNot OK
L = Left$(Cmd, 1)
If L = "*"
CMD = Del$(CMD, 1, 1)
ElseIf L <> "."
CMD = "." + CMD
Else
OK = 1
EndIf
EndWhile
Name = ReadINI$("HKEY_0", CMD, "")
Command = ReadINI$("HKEY_0", CMD + $SOK, "")
ExTyp = ReadINI$("HKEY_0", Name, "")
Case Command = "" : Command = ReadINI$("HKEY_0", Name + $SOK, "")
If Command = ""
If Left$(CMD, 1, 1) = "."
CMD = Del$(CMD, 1, 1)
Command = ReadINI$("HKEY_0", CMD + $SOK, "")
Case ExTyp = "" : ExTyp = ReadINI$("HKEY_0", CMD, "")
EndIf
If Command = ""
'
Case Command = "" : Command = "< keine aufrufdefinition >"
EndIf
EndIf
Case (Left$(Command, 2) = "%1") Or (Mid$(Command, 2, 2) = "%1") : \
Command = "[%1 = Platzhalter für ausführbare Anwendung] " + Command
Case Name = "" : Name = ExTyp
AddString(Liste, "Datentyp: " + Name)
AddString(Liste, "Kommando: " + Command)
SetText Text, CMD + " = " + ExTyp
GetExCMD(Command)
EndIf
EndProc
Proc GetExCMD
Parameters String Command
Var String Command2 = Space$(261)
If Instr("~", SubStr$(Command, 1, " "))
Command2 = SubStr$(Command, 1, " ")
Command2 = Translate$(Command2, Chr$($22), "")
Command2 = Chr$($22) + LongName$(Command2) + "\q" + Del$(Command, 1, Len(SubStr$(Command, 1, " ")))
Else
External("Kernel32", "ExpandEnvironmentStringsA", Addr(Command), Addr(Command2), 260)
EndIf
Command2 = Trim$(Command2)
Case Upper$(Command) <> Upper$(Command2) : AddString(Liste, "Kommando: " + Command2)
EndProc
Proc SetMaxWide
Parameters Int Liste, SFont
Declare Int MW, OFont, String Zeile, Mem Point
Struct TPoint = X&, Y&
DIM Point, TPoint
OFont = ~SelectObject(%HDC, SFont)
WhileLoop 0, GetCount(Liste) - 1
Zeile = GetString$(Liste, &Loop)
~GetTextExtentPoint32(%HDC, Addr(Zeile), Len(Zeile), Point)
Case Point.X& > MW : MW = Point.X&
EndWhile
~SelectObject(%HDC, OFont)
Dispose Point
SendMessage(Liste, ~lb_SetHorizontalExtent, MW + 6, 0)
EndProc
Alles anzeigen
Gruß Volkmar