Wie kann man auf Events mit einem Time-Out warten?



  • Hy, ich hab folgendes Problem. Ich will mit MCI ein Video abspielen(was auch klappt),welches sich nach eine bestimmten Zeit oder bei Tastendruck ausschaltet(was nicht klappt).
    Mit GetMessage und so, bleibt ja immer alles stehen, bis 'n Event reinkommt, also kann man da selber nichts mit der Zeit managen. Wenn man Sleep() benutzt, werden keine Messages empfangen und miz MsgWaitForMultipleObjects müsste es klappen, tut es aber nciht. Hier mal mein Quelltext:

    ...
    WinMain()
    {
        ...
        ShowWindow (hwnd, SW_HIDE);
        myPlayAvi (hwnd, "intro.avi", 0);
    
        MsgWaitForMultipleObjects(0,NULL,false,5000,QS_KEY);
    
        myStopAvi();
        DestroyWindow(hwnd);
    }
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
         switch (iMsg)
         {
              case WM_KEYDOWN :
    			         SendMessage(hwnd,WM_DESTROY,0,0);
                   return 0 ;
    
              case WM_DESTROY :
                   PostQuitMessage (0) ;
                   return 0 ;
         }
    
         return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
    }
    
    int myPlayAvi (HWND hWnd, char *filename, int loop)
    {
     char cmd[300];
      wsprintf(cmd, "open \"%s\" alias mympeg type MPEGVideo style child", filename);
      if (mciSendString(cmd, 0, 0, 0) != 0)
      {
        MessageBox(NULL, "MCI-Error: Kann Datei nicht öffnen!", "Fehler", 0);
        return -1;
      }
    
      wsprintf(cmd, "window mympeg handle %lu", hWnd);
      if (mciSendString(cmd, 0, 0, 0) != 0)
      {
        wsprintf(cmd, "MCI-Error: Kann window handle %ld nicht setzen", hWnd);
        MessageBox(NULL, cmd, "Fehler", 0);
        return -1;
      }
    
      wsprintf(cmd, "play mympeg from 0");
      if (loop) wsprintf(cmd, "%s repeat", cmd);
      wsprintf(cmd, "%s fullscreen", cmd);
      if (mciSendString(cmd, 0, 0, 0) != 0)
      {
        MessageBox(NULL, "MCI-Error: Kann Datei nicht absielen!", "Fehler", 0);
        return -1;
      }
      return 0;
    }
    
    int myStopAvi (void)
    {
    char cmd[300];
      wsprintf(cmd, "close mympeg");
      if (mciSendString(cmd, 0, 0, 0) != 0)
      {
        MessageBox(NULL, "MCI-Error: Kann Datei nicht schließen!", "Fehler", 0);
        return -1;
      }
      return 0;
    }
    ...
    

    Kann mir jemand sagen, was falsch ist?



  • Was gibt denn MsgWaitForMultipleObjects zurück und was sagt GetLastError?! In der Doku steht nichts, darüber, ob man auch gar kein Handle angeben kann - evtl. musst du vorher einfach ein Dummy-Event-Handle erzeugen 🙄



  • Die Funktion gibt nur ein WM_TIMEOUT oder wie auch immer zurück. Die Funktion funktioniert ja auch so weit, bloß Sie reagiert nciht auf die Tastatureingabe. 'n Dummy habe ich auch schon versucht, hat aber ncihts gebracht. Kann aber auch sein, dass ich es einfach falsch gemacht habe, da ich nicht SOO den Peil von habe. Ich habe auch schon versucht das ganze auf die Maus und so reagieren zu lassen, aber das klappt auch nciht. Wie schon gesagt, ich hab nciht so den Peil und meine Englisch-Kenntnisse sind auch für die Katz'. Könnte es sein, dass man einen richtigen Pointer übergeben muss und wenn ja auf welches Objekt? Und wenn man es nciht machen muss, was muss man dann machen?



  • Könnte evtl. auch mit dem Fokus zusammenhängen - sitzt der bei deiner Anwendung?



  • Ist auch nicht mehr so wichtig. Ich habe andere Funktionen zum Abspielen des Videos genommen und jetzt läuft das auch bei mir. Trotzdem Vielen Dank.


Anmelden zum Antworten