Komische reaktionen (MFC) und probleme mit GetPixel()



  • Ich habe ein Kleines Tool programmiert, das ein Browsergame mit Sounds unterlegen soll.
    Hierzu wird an bestimmten stellen nach Farbwerten gesucht und dann dementsprechende .wav Files abgespielt.
    Da das ganze in einer "Endlosschleife" läuft, die mit einem anderen Button unterbrochen wird habe ich eine Funktion MsgWait(), die der Form erlaubt sich auf dem aktuellen Stand zu halten.

    -> MsgWait()

    void DoEvents()
    {
      MSG msg;
      long sts;
    
      do {
        if (sts = PeekMessage(&msg, (HWND) NULL, 0, 0, PM_REMOVE)) {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
        }
      } while (sts);
    }
    
    void MsgWait(long ms)
    {
      long start, timeRemaining, timeNow;
    
      start = GetTickCount();
      timeRemaining = ms;
      do {
         MsgWaitForMultipleObjects(0, 0, 0, timeRemaining, QS_ALLINPUT);
         timeNow = GetTickCount();
         if (timeNow - start >= timeRemaining)
         return;
         else if (timeNow < start)
         start = timeNow;
         timeRemaining = timeRemaining - (timeNow - start);
         start = timeNow;
        DoEvents();
      } while(1);
    }
    

    Das funktioniert auch alles wie gewollt, außer während die Files abgespielt werden. Leider tauchen hin und wieder Buttons auf dem Desktop auf, oder werte werden anstatt in Editboxen in der Titelliste von anderen Programmen ausgegeben. Hinundwieder verschwindet auch mal die eigene Titelleiste komplett.

    Weiterhin liefert die Schleife nach einer unbestimmten Zeit nicht mehr die RGB Werte, die sie liefern sollte. Da ich nicht versuche ein bestimmtes Fenster mit GetPixel(); anzusprechen gehe ich davon aus, das er den "obersten" nimmt, also den an der Stelle sichtbaren.

    COLORREF pixel;
    dc = GetWindowDC(g_hwnd);
    pixel = GetPixel(dc, x , y);
    r = GetRValue(pixel);
    g = GetGValue(pixel);
    b = GetBValue(pixel);
    //wenn Farbe rötlich Sound abspielen und break
    ReleaseDC(g_hwnd, dc);
    

    Ich hab es schon 6h Stunden lang problemlos laufen gehabt, manchmal gibt er aber auch nach 30min den Geist auf, wobei die Schleife weiterläuft nur die RGB Werte nicht mehr erkannt werden.

    Ich hoffe mir kann da jemand helfen

    Mfg "Ikke"



  • Benutze CPP Tags!!!
    Das kann ja kein Mensch lesen.
    Simon



  • Das OS das Du meinst heisst wahrscheinlich Windows, oder etwa nicht?
    Doof sind meistens Induviduen die sich vor den PCs tummeln... nicht umgekehrt.
    Simon



  • [quote="simon.gysi"]Benutze CPP Tags!!!
    Das kann ja kein Mensch lesen.
    Simon[/quote]

    scheint nicht zu funktionieren ? Mach ich da was falsch

    [quote="simon.gysi"]Das OS das Du meinst heisst wahrscheinlich Windows, oder etwa nicht?
    Doof sind meistens Induviduen die sich vor den PCs tummeln... nicht umgekehrt.
    Simon[/quote]

    Schade das du einen Joke so abwertend kommentieren musst. Wie auch immer ich habs einfach mal rausgenommen.

    Mfg


Anmelden zum Antworten