So, ich habe am Wochenende mal geschaut, was das mit dem "Öffnen mit..." auf sich hat.
Der ShellExecuteHook wird aufgerufen und man kann nicht unterscheiden, ob das Kommando wirklich gemeint ist ist. :'(
Hier mal ein Mitschnitt der SuRun Debug-Version:
Explorer "open":
---------------------------------------------------------------------
msk=24200807 verb=Open, file=..., dir=..., idlist=12EC70, class=, hkc=4D2
Explorer "open with":
---------------------------------------------------------------------
msk=25A00803 verb=(null), file=..., dir=..., idlist=0, class=, hkc=28E
TC "open":
---------------------------------------------------------------------
msk=00000807 verb=Open, file=..., dir=(null), idlist=B7548, class=, hkc=1E6
TC "open with":
---------------------------------------------------------------------
msk=01800803 verb=(null), file=..., dir=(null), idlist=0, class=, hkc=212
---------------------------------------------------------------------
"open with" flags:
SEE_MASK_ASYNCOK 0x01000000 ==CMIC_MASK_ASYNCOK
SEE_MASK_NOZONECHECKS 0x00800000 ==CMIC_MASK_NOZONECHECKS
Explorer "open" flags:
CMIC_MASK_CONTROL_DOWN 0x20000000 ==CMIC_MASK_PTINVOKE
SEE_MASK_FLAG_LOG_USAGE 0x04000000 ==CMIC_MASK_FLAG_LOG_USAGE
SEE_MASK_HMONITOR 0x00200000
TC+Explorer "open" flags:
SEE_MASK_FLAG_SHELLEXEC 0x00000800
SEE_MASK_CLASSKEY 0x00000003
SEE_MASK_IDLIST 0x00000004
---------------------------------------------------------------------
Die einzigen Unterschiede sind, dass bei "Öffnen mit..." die Flags CMIC_MASK_ASYNCOK und CMIC_MASK_NOZONECHECKS gesetzt sind und das SEE_MASK_IDLIST fehlt.
CMIC_MASK_NOZONECHECKS ist z.B. in Windows 2000 nicht definiert und CMIC_MASK_ASYNCOK kann auch so gesetzt sein...
Ob ShellExecute(Ex) immer SEE_MASK_IDLIST setzt kann ich nicht feststellen.
Es ist zum heulen!
Es sieht so aus, als ob man damit leben muss, dass "Öffnen mit..." mit automagisch zu startenden Programmen nicht funktioniert. :-( ...Das wirklich Blöde ist, dass es auch mit Programmen nicht funktioniert, die SuRun als administrativ zu startende Programme einstuft.
Ich habe auch mal VS2005 Express in einer VM installiert und versucht, SuRun zu kompilieren...
Bis das funktioniert, das wird noch etwas dauern.
Neben der for(;;) Schleifen-Kompatibilität wurde in VS8 auch die Standard-Klassenbibliothek geändert und der Manifest-Parser geht nicht.
Ich werde evtl. SuRun auf die StrSafe-Funktionen umstricken oder ganz mit dynamisch allockierten Strings arbeiten...mal sehen.