Shell32 Manifestiert
Ich bin gerade dabei eine Alternative für SuDown zu programmieren, die auf einem eigenen gesicherten Desktop die Benutzerdaten abfragt und als Hintergrund einen unscharfen und abgedunkelten Schnappschuss des normalen Desktops darstellt.
Beim Testen in der Release-Version fiel mir auf, das die Funktion MessageBox() nicht wollte. 😕 Kein Fenster zu sehen, nur ein <<Dong>> aus dem Lautsprecher und Schluss mit Lustig! 😯 GetLastError() liefert 127 = ERROR_PROC_NOT_FOUND („Die angegebene Prozedur wurde nicht gefunden.“) 😕
Depends.exe zeigte mir deutlich, dass das Programm statisch zu „User32.dll„s Export „MessageBoxA“ gelinkt ist. Nach ewigem suchen fand ich durch Zufall heraus, dass mein Problem zwei Ursachen hat:
- Das Programm besitzt ein Manifest, damit Windows seine hübschen visuellen Stile malt.
- Das Programm war nicht zu Shell32 gelinkt.
Seltsam, aber wahr!
[Achtung, Suchbild!]
Das hier geht nicht:
#include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { //LoadLibrary("Shell32.dll"); MessageBox(0,0,0,0); return 0; }
Und das hier geht:
#include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { LoadLibrary("Shell32.dll"); MessageBox(0,0,0,0); return 0; }
Alternativ dazu kann man auch das erste Beispiel ohne Manifest kompilieren, z.B. als „MsgBoxTest.exe“ und ausführen.
Das funktioniert.
Dann kopiert man „MsgBoxTest.exe.manifest“ in das Verzeichnis von MsgBoxTest.exe und startet MsgBoxTest.exe noch mal…
Siehe da, <<Dong
Dumm nur, dass das nicht dokumentiert ist!
Am 20. Juni 2016 um 18:12 Uhr
a
Kays Senf » Blog Archiv » Shell32 Manifestiert