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:

  1. Das Programm besitzt ein Manifest, damit Windows seine hübschen visuellen Stile malt.
  2. 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>> ohne Fenster. 😉

Scheinbar benutzt MessageBox(), wenn visuelle Stile für ein Programm aktiviert sind, Funktionen aus Shell32.dll, linkt sich aber selbst nicht an die Bibliothek, sondern benutzt nur GetProcAddress().

Dumm nur, dass das nicht dokumentiert ist!

Eine Reaktion zu “Shell32 Manifestiert”

  1. a

    a

    Kays Senf » Blog Archiv » Shell32 Manifestiert

Einen Kommentar schreiben

Time limit is exhausted. Please reload the CAPTCHA.