Bildschirmschoner - Einstiegspunkt nicht gefunden



  • Hi Leute,
    ich möchte einen Bildschirmschoner schreiben. Allerdings funktioniert bei mir nicht mal das Grundgerüst. Folgender Code stürzt mit der Meldung
    "foo.scr - Einsprungspunkt nicht gefunden
    Der Prozedureinsprungspunkt "ChangeWindowMessageFilter" wurde in der DLL "USER32.dll" nicht gefunden." ab. Angezeigt wird nur die Messagebox.
    Ich vermute mal, irgendeine dll wurde ersetzt oder so. Wie kann ich das feststellen?
    Gelinkt hab ich: scrnsave.lib comctl32.lib

    #include <windows.h> 
    #include <scrnsave.h>
    
    BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
    
    BOOL WINAPI RegisterDialogClasses(HANDLE hInst);
    
    LRESULT WINAPI ScreenSaverProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
    	switch(message) 
    	{ 
    		case WM_CREATE:
    			break; 
    		case WM_DESTROY:
    			PostQuitMessage(0); 
    			break;
    		case WM_PAINT: 
    			break; 
    		default: 
    			return DefScreenSaverProc(hwnd, message, wParam, lParam);
    	}
    	return 0; 
    }
    
    BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
    	return FALSE; 
    } 
    
    BOOL WINAPI RegisterDialogClasses(HANDLE hInst) 
    { 
    	return TRUE; 
    }
    

    Gruß Hazzel



  • Vista?
    Wer verwendet "ChangeWindowMessageFilter"?



  • Jochen Kalmbach schrieb:

    Vista?

    Nein, WinXP Professional SP 2.

    Jochen Kalmbach schrieb:

    Wer verwendet "ChangeWindowMessageFilter"?

    Wie finde ich das raus? 😉



  • Indem Du nach "ChangeWindowMessageFilter" in den Sourcen suchst?

    Du solltest auch sicherstellen, dass Du die WINVER, _WIN32_WINNT und _WIN32_IE richtig defeiniert hast!

    Wenn Du VS2008 verwendest, siehe targetver.h in Deinem Projekt!

    Dann lässt sich das Projekt nämlich gar nicht compilieren, wenn diese Dinge auf XP oder W2k eingestellt sind!



  • In der MSDN steht, dass man mindestens Vista für die Funktion braucht. Daran wirds wohl liegen.

    Dann lässt sich das Projekt nämlich gar nicht compilieren, wenn diese Dinge auf XP oder W2k eingestellt sind!

    Was denn nun? Auf Vista lassen oder auf XP stellen? Funktioniert leider beides nicht.

    Edit: Ja ich benutz VisualC++ 2008 Express.



  • *Alle* Projekte mit Folgenden Einstellungen in "targetver.h" übersetzen:

    #ifndef WINVER
    #define WINVER 0x0500
    #endif
    
    #ifndef _WIN32_WINNT
    #define _WIN32_WINNT 0x0500
    #endif
    
    #ifndef _WIN32_WINDOWS
    #define _WIN32_WINDOWS 0x0410
    #endif
    
    #ifndef _WIN32_IE
    #define _WIN32_IE 0x0500
    #endif
    

    Und dann nochmals neu übersetzen!



  • Immer noch die gleiche Meldung 😞



  • Dann linkst Du gegen eine LIB, die nur für Vista gebaut wurde!



  • Ich habe jetzt die beiden libs SCRNSAVE.LIB und SCRNSAVW.LIB mit der entsprechenden Version einer VS 2003 .NET Installation ersetzt. Es geht! Vielen Dank.
    Aber muss ich jetzt jede lib ersetzen?



  • Jede, die in einer zu hohen Version vorliegt.



  • Du musst *jede* LIB mit dem *gleichen* Compiler erzeugen!


Anmelden zum Antworten