Bei Beenden durch Herunterfahren Code ausführen



  • Ich habe ein Programm geschrieben dessen Fenster über

    ShowWindow(hWnd, SW_HIDE);
    

    unsichtbar ist, nun soll das Programm wenn es z.b durch das Herunterfahren des Rechners oder abmelden beendet wird noch ein kleines Stückchen Code ausführen
    mit

    WM_DESTROY
    

    komm ich leider nicht weiter, Kann mir jemand helfen ?



  • Wieso reicht dir WM_DESTROY nicht?



  • Weil der Code aus irgend einem Grund nicht ausgeführt wird ich vermute das WM_DESTROY nicht ausgelöst wird wenn das Programm durchs Herunterfahren beendet wird.



  • Doch wird es definitiv 😉



  • was ist denn wenn du die shutdown.exe ersetzt ? geht das so ???



  • ok bin noch Anfänger was WinAPI angeht habe hier ein stück Code der Veranschaulichen soll was nicht klappt:

    #define STRICT
    #include <windows.h>
    #include <stdio.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    const char szAppName[] = "Ein eigenes Fenster";
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
     	HWND       hWnd;
      	MSG        msg;
       	WNDCLASS   wc;
    
    	wc.style         =  CS_HREDRAW | CS_VREDRAW;
    	wc.lpfnWndProc   =  WndProc;  
     	wc.cbClsExtra    =  0;
    	wc.cbWndExtra    =  0;
    	wc.hInstance     =  hInstance;
    	wc.hCursor       =  LoadCursor(NULL,IDC_ARROW);
    	wc.hIcon         =  LoadIcon(NULL,IDI_APPLICATION);
    	wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wc.lpszClassName =  szAppName;
      	wc.lpszMenuName  =  NULL;
    	RegisterClass(&wc);
    	hWnd = CreateWindow(szAppName,
                           "Titelleiste",
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT,          
                           CW_USEDEFAULT,          
                           CW_USEDEFAULT,         
                           CW_USEDEFAULT,          
                           NULL,
                           NULL,
                           hInstance,
                           NULL);
    	ShowWindow(hWnd, SW_HIDE);
       	UpdateWindow(hWnd);
    
    	while (GetMessage(&msg, NULL, 0, 0))
      	{
    	TranslateMessage(&msg);
          DispatchMessage(&msg);
     	}
    
    	return msg.wParam;
    }
    
    	LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	FILE *datei;
    
    	switch (message)
      	 {
    		case WM_DESTROY:
    	     		 {
    	   			datei= fopen("test.txt","a");
    				fprintf(datei,"hallo");
    				fclose(datei);
    
    				PostQuitMessage(0);
    	         		return 0;
    	     		}
      	 }
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    in diesem Fall sollte er also eigendlich hallo in die test.txt schreiben, macht er aber nicht, wo liegt mein Fehler !



  • Gib stattdessen mal ne MessageBox aus.
    Wer weiss was das Current-Directory ist und wo er die Datei hinspeichern täte 😉



  • getestet
    macht nix, tut nix
    funktioniert leider nicht.



  • schau dir doch mal WM_QUERYENDSESSION (und WM_ENDSESSION) an, ist vllt. sinnvoller als WM_DESTROY 😉 wenn es um die ausführung von code vor dem herunterfahren geht



  • Danke super das hat geklappt.


Anmelden zum Antworten