MB_YESNO Code unklar



  • Du verwendest die falschen schaltflachen. du übergibst an die messagebox MB_YESNO sprich ja & nein da ist kein cancel dabei

    und das kann nicht funzen da MB_NO wenn überhaupt ein wert ist den du an die messagebox übergibst und nicht zur abfrage dient

    (MB_NO ==IDCANCEL);

    MB_ABORTRETRYIGNORE = Beenden, Wiederholen, Ignorieren

    MB_OK = OK

    MB_OKCANCEL = OK, Abbrechen

    MB_RETRYCANCEL = Wiederholen, Abbrechen

    MB_YESNO = Ja, Nein

    MB_YESNOCANCEL = Ja, Nein, Abbrechen

    IDABORT = Beenden

    IDRETRY = Wiederholen

    IDIGNORE = Ignorieren

    IDYES = Ja

    IDNO = Nein

    IDOK = OK

    IDCANCEL = Abbrechen

    so sollte es gehn

    int iResults = MessageBox(m_hWnd,"Bei OK erfolgt ein sofortiger NEUSTART! Programm ausführen?",
                       "Msg Titel",
                       MB_YESNOCANCEL | MB_ICONINFORMATION);
    
    switch(iResults)
    {
    	case IDYES://Messagebox Ja wurde gewählt
    
    	break;
    	case IDNO://Messagebox Nein wurde gewählt
    
    	break;
    
    	case IDCANCEL://Messagebox Abbrechen wurde gewählt
    
    	break;
    }
    


  • if(AfxMessageBox("Bei OK erfolgt ein sofortiger NEUSTART! Programm ausführen?", MB_YESNO | MB_ICONINFORMATION) ==IDYES) 
    { 
        WinExec("regedit.exe /s Z:\\SETUP\\1System\\pointer.reg", TRUE); 
        WinExec("c:\\windows\\system32\\shutdown.exe -r -t 1", SW_SHOW); 
    } 
    else if(MB_NO ==IDCANCEL)  // <-- Meine Intention sagt der Herr will das so:)
    { 
    
            //blablubb; 
    }
    


  • @BorisDieKlinge
    hättest du den code einmal ausprobiert wüstest du das es kein MB_NO gibt deshal schrieb ich

    ...da MB_NO wenn überhaupt ein wert...

    und selbst wenn man es mit if(MB_OK == IDCANCEL) macht ist das grottenfalsch da es nicht zurückgibt 😉

    MB_... sind werte die nur dafür da sind an die messagebox übergeben zu werden

    [NEW EDIT]
    und wenn es unbedingt ne if abfrage sein soll denn bitte

    if(iResults == IDYES)
    {
    }
    else
    if(iResults == IDNO)
    {
    }
    else
    if(iResults == IDCANCEL)
    {
    }
    


  • int result = AfxMessageBox("Bei OK erfolgt ein sofortiger NEUSTART! Programm ausführen?", MB_OKCANCEL| MB_ICONINFORMATION);
    // YESNO zu OKCANCEL sonst wuerde das result NIE IDCANCEL werden da es kein cancel gibt
    if(result == IDOK) 
    { 
        WinExec("regedit.exe /s Z:\\SETUP\\1System\\pointer.reg", TRUE); 
        WinExec("c:\\windows\\system32\\shutdown.exe -r -t 1", SW_SHOW); 
    } 
    else if(result == IDCANCEL)
    { 
        //blablubb; 
    }
    

    wie LowFly schon sagte, ein IDCANCEL kann es nur geben wenn es zur verfuegung steht, entweder Ok/Cancel oder Yes/No - Yes/Cancel gibts nicht



  • ups.. ja sorry wohl den code zu schnell überlesen.. ich meinte das natürlich so wie "MrEvil" das meinte...



  • zum code von Mr Evil

    int result = AfxMessageBox("Bei OK erfolgt ein sofortiger NEUSTART! Programm ausführen?", MB_OKCANCEL| MB_ICONINFORMATION);
    // YESNO zu OKCANCEL sonst wuerde das result NIE IDCANCEL werden da es kein cancel gibt
    if(result == IDOK)
    {
        WinExec("regedit.exe /s Z:\\SETUP\\1System\\pointer.reg", TRUE);
        WinExec("c:\\windows\\system32\\shutdown.exe -r -t 1", SW_SHOW);
    }
    else if(result == IDCANCEL)
    {
        //blablubb;
    }
    

    leider wird die MessageBox nicht angezeigt, sondern der Befehl wird ausgeführt und es erfolgt sofort ein shutdown,
    könnt ihr mir noch weiterhelfen?,
    danke



  • Zeig mal deinen Code, vielleicht ist was falsch abgeschrieben. 😕



  • mein Code:

    void CSeite6::OnButton2() 
    {
    	int result = AfxMessageBox("Bei OK erfolgt ein sofortiger NEUSTART! Programm ausführen?", MB_OKCANCEL| MB_ICONINFORMATION);
    // YESNO zu OKCANCEL sonst wuerde das result NIE IDCANCEL werden da es kein cancel gibt
    if(result == IDOK)
    {
        WinExec("regedit.exe /s Z:\\SETUP\\1System\\pointer.reg", TRUE);
        WinExec("c:\\windows\\system32\\shutdown.exe -r -t 1", SW_SHOW);
    }
    else if(result == IDCANCEL)
    {
        //blablubb;
    }
    

    danke



  • @estartu er hat doch den code reinkopiert also auch den neuen direckt for deiner Post

    hab den grad mal bei mir reinkopiert & verwendet und bei mir wird die MessageBox angezeigt also der code ist sauber & funzt.

    kann höchstens sein das du irgendwoanderst fehlerhaften code hast der verhindert das die MsgBox aufgeht & sich selbst schon mit OK bestätigt.



  • LowFly schrieb:

    @estartu er hat doch den code reinkopiert also auch den neuen direckt for deiner Post

    Ich hatte vermutet, dass er für den Post dich einfach zitiert hatte.
    Sowas doofes gabs hier auch schon. 😉

    Oder sowas:

    if(result = IDOK)
    


  • besten Dank, ich hatte irgendwo einen Fehler!!!
    tolle Hilfe von Euch,
    danke



  • OMG Was ein ********* Thread... 😮 ...:

    Mach das mal lieber so 😉 :

    enum EInfoCodes
    {
       IFC_SUCCESSFUL,
       IFC_FAILED,
       IFC_ABORTED
    };
    
    EInfoCodes RestartOnQuery(const PTCHAR pszInfo, const PTCHAR pszCaption = NULL, HWND hWnd = NULL)
    {
    	if(MessageBox(hWnd, pszInfo, pszCaption, MB_OKCANCEL | MB_ICONINFORMATION) != IDOK)
    		return (IFC_ABORTED);
    
    	HANDLE           hToken;
    	TOKEN_PRIVILEGES tkp;
    
    	// ....Privilegien anfordern....
    	if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    		return (IFC_FAILED);
    	if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid))
    		return (IFC_FAILED);
    
    	tkp.PrivilegeCount = 1;
    	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    
    	if(!AdjustTokenPrivileges(hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0))
    		return (IFC_FAILED);
    	if(ExitWindowsEx(EWX_REBOOT, EWX_FORCEIFHUNG))
    		return (IFC_SUCCESSFUL);
    	else
    		return (IFC_FAILED);
    }
    

    Benutzung:

    EInfoCodes eReturn = RestartOnQuery(TEXT("Bei OK erfolgt ein sofortiger NEUSTART! Programm ausführen?"), TEXT("Achtung: Neustart..."));
    
    // Ergebnis prüfen, falls erwünscht:
    switch(eReturn)
    {
       case IFC_FAILED:
           // Fehler beim Neustarten...
           break;
       case IFC_ABORTED:
           // Benutzer hat Abbruch verlangt...
           break;
    }
    

    Das funktioniert nämlich immer...

    PS: Ist aber mehr oder weniger alles WinAPI 💡 .

    Hope that helps 😉 .



  • danke euch, problem gelöst, der tipp wäre es wert in die faq aufgenommen zu werden!



  • Ist doch schon drin. 😕
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39051.html

    Oder sollte ich den Thread hier noch verlinken?



  • estartu schrieb:

    Ist doch schon drin. 😕
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39051.html

    Oder sollte ich den Thread hier noch verlinken?

    Als neuen Eintrag fände ich es 'doppelt gemoppelt', aber zum dem bereits vorhandenen ist es doch ne sinnvolle Ergänzung, oder nicht ?

    Also wär dafür 😉



  • Ist ergänzt. 🙂


Anmelden zum Antworten