FindWindow Problem =/



  • Halli Hallo liebe Community

    ich schau mich hier schon etwas länger um doch heute brauch ich mal etwas Hilfe

    Ich bin grade mal bei den Grundlagen von C++ aber ich möchte für unseren Server einen Auto Restarter schreiben da er ziemlich oft einfach so abschmiert.

    Also ich bin schonmal hier...achso ich hab jetzt mal die Minecraft_server.exe genommen da ich grade kein Zugriff auf den Root habe.
    Mein Problem liegt jetzt daran das der Server immer gestartet wird auch wenn er schon läuft.

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
    
    char cServername[255] ="Minecraft_Server.exe";
    
    char s2[30] = "Minecraft server";
    
    int eingabe;
    
    do{
    
    HWND FindeFenster = FindWindow(NULL,(LPCWSTR)s2 );
    if(FindeFenster == NULL) 
    {
       cout << "Programm wird gestartet";
       system(cServername);
    }
    
    else
    cout << "Programm läuft noch";
    cin >> eingabe;
    
    }while(eingabe != 0);
    
    return 0;
    }
    

    Ich hoffe mir kann jemand helfen wäre echt sehr nett 😃



  • Benutz Bukkit, der schmiert nicht ab und unterstützt Plugins. http://bukkit.org/



  • ich hab jetzt mal die Minecraft_server.exe genommen da ich grade kein Zugriff auf den Root habe.

    Es geht nicht um den Minecraft Server aber ich hab nichts besseres zum Testen gefunden ^^



  • FindWindow(..) gibt bei Dir immer NULL zurück. Das ist so, weil bei der Anwendung von FindWindow(..) ein Fehler vorliegt.

    Die Windows API stellt Funktionen die ein String als Argument oder Return Wert haben (meistens) in zwei Versionen zur Verfügung. Eine Version für MBCS Strings und eine Version für UNICODE Strings.

    MBCS: LPSTR, LPCSTR ➡ char* bzw. const char*
    UNICODE: LPWSTR, LPCWSTR ➡ wchar_t* bzw. const wchar_t*
    LPTSTR bzw. LPCTSTR ➡ entweder MBCS oder UNICODE

    Nun gibt es z.B. FindWindowA(..) für MBCS und FindWindowW(..) für UNICODE.
    Ein define, je nach Characterset Einstellung (ob MBCS oder UNICODE), definiert FindWindow(..) entweder als FindWindowA(..) oder FindWindowW(..).

    Dein Fehler ist nun, dass dein Projekt auf UNICODE eingestellt ist, Du aber den lpWindowName als (const) char* übergibst. Erwartet wird aber ein (const) wchar_t*! Der cast bringt den Compiler zwar zum Schweigen - es ist aber schlicht falsch.

    ➡ Der cast MUSS weg!

    Danach:
    Entweder stellst Du das verwendete Characterset im Projekt auf MBCS um.

    Oder:
    Du verwendest anstelle von char für den lpWindowName einfach wchar_t.

    ➡

    Wenn Du es portabler haben möchtest, kannst Du den lpWindowName auch mit TCHAR (aus tchar.h) definieren. TCHAR ist je nach eingestelltem Characterset entweder char oder wchar_t.

    Simon



  • Hahaha fetter Cast a.k.a. "Halt's Maul blöder Compiler und mach was ich dir sage!!!". 😃 👍



  • Ohne witz ich liebe dich *_* hat genial funktioniert hier darfst du das enderegebnis sehen

    #include <iostream>
    #include <windows.h>
    
    #include <tchar.h>
    
    using namespace std;
    
    int main()
    {
    
    char cServername[255] ="Minecraft_Server.exe";
    
    const TCHAR g_szWindowTitle[20] = _T("Minecraft server");
    
    int eingabe = 1;
    
    do{
    HWND FindeFenster = FindWindow(NULL,g_szWindowTitle );
    if(FindeFenster == NULL) 
    {
    		system(cServername);
    
    }
    
    else
    cout << "Programm läuft noch\n";
    
    Sleep(3000);
    
    }while(eingabe != 0);
    
    return 0;
    }
    

    Ich danke dir echt nochmals ich werd das ganze jetzt noch anpassen auf den richtigen Server sobald ich Rootzugriff habe und das ganze vllt noch etwas anwender freundlicher gestalten aber echt ich danke dir ^^



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply