Windows-Beenden-Dialog



  • wo bleiben die profis?



  • HIER!!!

    Bastel' dir einfach 'n eigenen Beenden-Dialog mit MFC oder VCL.

    [ Dieser Beitrag wurde am 26.11.2002 um 15:30 Uhr von nEo SkYwAlKeR editiert. ]



  • Falls du das ganze für NT/2K/XP brauchst kannst du dir mal das hier anschauen:
    Displaying the Shutdown Dialog Box (MSDN)



  • flenders
    dein link ist doch das gleiche was DocJunioR oben gepostet hat...

    nEo SkYwAlKeR
    darum gehts nicht... ist mir klar das selber machen kann... ich moechte einfach nur wissen ob es fertige funktionen dafuer gibt!



  • @ toom.

    Da wird Dir wirklich nix bleiben als einfach einen Dialog zu schreiben. Win95/98 sieht sowas einfach nicht vor.



  • Hi,

    ich glaube das es da doch was gibt. Ich habe mal aus Spaß, unter Windows XP den Programm Manager von Windows 95 gestartet. Dort gab es im Menü eine Option "Beenden". Als ich das aufgerufen hatte, kam der Windows XP Beenden-Dialog. Vielleicht gibt es da ja auch eine undokumentiere Funktion. 😕



  • Das ist allerdings möglich.
    Immerhin gibt es in der Referenz auch immer mal wieder Funktionen bei denen steht

    Diese Funktion ist nicht implementiert.



  • Hi nochmal,

    ich habe gerade einfach mal in google nach "shutdown dialog" gesucht und bin auf ein paar VB-Beispiele gefunden, die die Funktion "SHShutDownDialog" benutzen. Die Funktion ist anscheinend nicht dokumentiert und muss wohl per GetProcAddress aus der shell32.dll geladen werden. Ich werd's gleich mal ausprobieren...



  • typedef LONG (CALLBACK *SHUTDOWNDLG) (LONG);
    
    HINSTANCE hDll = LoadLibrary("shell32.dll");
    SHUTDOWNDLG SHShutDownDialog;
    if(hDll != 0)
    {
       SHShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hDll, (LPSTR)60);
       SHShutDownDialog(0);
    }
    FreeLibrary(hDll);
    

    Hehe, war schneller. 😉

    [ Dieser Beitrag wurde am 26.11.2002 um 23:07 Uhr von WebFritzi editiert. ]



  • Mist :p



  • thx, dat funzt gut, aber mit einem hacken... ich glaube ich muss noch den ruckgabewert bearbeiten weil sonst nix passiert... der rechner faehrt nicht runter... wisst ihr was fuer ruckgabewerte die funktion zurueck gibt?



  • Hi,

    also bei mir klappts. 😕
    Konnte es allerdings nur unter Windows XP testen. Hab alle 3 Buttons ausprobiert ("Standby", "Ausschalten", "Neu starten") und jeder hat getan was er sollte. 🙂



  • ok, funzt bei mir auch (hat vorhin nur bisschen gehackt...)



  • greetings, ich habe das bsp. von docjunior auch in der msdn
    gefunden. nun möchte ich einen anderen coputer im netzwerk
    herunterfahren lassen (XP), doch irgendwie krieg ich das net hin.
    hier was ich bisher gemacht hab:
    geb ich einen computernamen ein, den es nicht im LAN gibt, wird die erste (0101010101) und die zweite (020202020) fehlermeldung
    ausgegeben. gibt es den namen aber wird nur die zweite ausgegeben.

    -vielleicht kann mir ja jemand weiterhelfen.

    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
                            int iShowCmd)
    {
    
        HANDLE hToken; 
        TOKEN_PRIVILEGES tkp; 
        char szComName[] = "razor";
    
        if (!OpenProcessToken(GetCurrentProcess(), 
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) Beep(300,100);
    
        if(!LookupPrivilegeValue(szComName, SE_REMOTE_SHUTDOWN_NAME,  
            &tkp.Privileges[0].Luid))
            MessageBox(NULL, "1010101010", "10101010", 0);
    
        tkp.PrivilegeCount = 1;  
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    
        AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
            (PTOKEN_PRIVILEGES)NULL, 0);  
    
        if (GetLastError() != ERROR_SUCCESS) Beep(300,1000);
    
        if(!InitiateSystemShutdown(szComName, "GAME OVER", 15, TRUE, FALSE))
            MessageBox(NULL, "202020202020", "2020202020", 0);
    
            Sleep(13000);
            AbortSystemShutdown(szComName); 
    
        return 0;
    }
    


  • Mach nach jeder Fehlermeldung einfach ein "return 1;", damit wird sichergestellt, dass das Programm nach dem Fehler nicht mehr weiterläuft. Wenn es den Computer nicht gibt, wird dann auch nur die erste ausgegeben.

    cya 🙂



  • 🙂 jo, danke
    aber damit is mein problem ja net gelöst.
    hat sonst keiner ne idee was ich falsch gemacht hab?


Anmelden zum Antworten