Bildschirmschoner aktivieren



  • Hi,

    irgendwie bin ich zu blöd dazu!
    Beim Mausklick auf mein TrayIcon mach ich folgendes:

    SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);

    und es passiert nix... 😕

    was mach ich falsch??



  • Könnte ja auch den ganzen sourcecode posten:

    #include <windows.h>
    #include "resource.h"
    #include "GlobaleVariablen.h"
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
    
         wndclass.style         = 0;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon		   = 0;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = "ImitScreensaver";
    
    	RegisterClass (&wndclass);
    
         hwnd = CreateWindow ("ImitScreensaver", TEXT ("ImitScreensaver"),
                             WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
    					0,
    					0,
    					0,
    					0,NULL, NULL, hInstance, NULL);
    
    	while (GetMessage (&msg, NULL, 0, 0))
    	{
    		TranslateMessage (&msg);
    		DispatchMessage (&msg);
    	}
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         switch (message)
         {
         case WM_CREATE:
    		nidTrayIcon.cbSize = sizeof(nidTrayIcon);
    		nidTrayIcon.hIcon = LoadIcon ((HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDI_ICON));
    		nidTrayIcon.hWnd = hwnd;
    		nidTrayIcon.uCallbackMessage = (WM_USER + 1);
    		nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    		nidTrayIcon.uID = 0x0200;
    
    		strcpy(nidTrayIcon.szTip, "Start Screensaver");
    		nidTrayIcon.szTip[18] = '\0';
    
    		Shell_NotifyIcon(NIM_ADD, &nidTrayIcon);
              break;
    
    	case (WM_USER + 1):
    	{
    		switch(lParam)
    		{
    			case WM_LBUTTONUP:
    				//SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);
    				SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);
    				break;
    			case WM_RBUTTONUP:
    				SendMessage(hwnd, WM_DESTROY, 0, 0);
    				break;
    		}
    		break;
    	}
    
         case WM_DESTROY:
    		Shell_NotifyIcon(NIM_DELETE, &nidTrayIcon);
              PostQuitMessage (0); //und tschüß
              return 0 ;
         }
    	//weitergabe an DefWindowProc
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    


  • blöde frage:
    hast du nen bildschirmschoner in den desktopeigenschaften überhaupt eingestellt? 🙂

    aber sonst müsste das eigentlich funktionieren...



  • maconey, so blöd ist die Frage gar nicht 😉

    is aber einer ausgewählt...



  • hi!
    so wies aussieht kannst du mit SystemParametersInfo() den bildschirmschoner nicht starten.. ist etwas missverständlich in der doku erklärt... wenn du SPI_SETSCREENSAVEACTIVE, FALSE... als parameter angibst startet der bildschirmschoner nicht, d.h. wohl das du mit TRUE das wieder einschalten kannst, aber den bildschirmschoner selber nicht starten kannst... (ist für mich die einzigst plausible erklärung)

    du könntest höchstens versuchen die ausgewählte .scr datei zu ermitteln und mit GetProcAddress die methode, also den bildschirmschoner zu starten...
    das müsste eigentlich funktionieren!

    gruss,

    matthias



  • das geht viel einfacher *G*

    SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

    :-))



  • Danke funkt 😉

    oh man... hab schon an mir gezweifelt...


Anmelden zum Antworten