[DirectInput] Wechsel Non-Exclusive -> Exclusive und wieder zurück



  • Hi!

    Ich bin grade dabei OIS mit u. a. OIS::Mouse::grab () zu erweitern. Die Linux-Version funktioniert einwandfrei. Unter wine funktioniert die Windows-Version auch problemlos. Aber unter (dem "echten") Windows XP sendet die Maus ihre Events weiterhin an das Fenster, auch wenn ich den Exclusive-Mode bereits ausgeschaltet habe - d. h. andere Fenster erhalten keine Events. Wenn ich das Programm starte, funktioniert alles noch, das Problem taucht erst auf, nach dem ich den Exclusive-Mode ein- und wieder ausschalte.

    Hier der Code:

    void Win32Mouse::grab (bool grab)
    {
        if (mGrabMouse == grab)
            return;
    
        mMouse->Unacquire ();
    
        if (grab)
        {
            coopSetting &= ~DISCL_NONEXCLUSIVE;
            coopSetting |= DISCL_EXCLUSIVE;
        }
        else
        {
            coopSetting &= ~DISCL_EXCLUSIVE;
            coopSetting |= DISCL_NONEXCLUSIVE;
        }
    
    	if( FAILED(mMouse->SetCooperativeLevel(mHwnd, coopSetting)) )
    		OIS_EXCEPT( E_General, "Win32Mouse::Win32Mouse >> Failed to set coop level" );
    
        HRESULT hr = mMouse->Acquire();
    	if (FAILED(hr) && hr != DIERR_OTHERAPPHASPRIO)
    		OIS_EXCEPT( E_General, "Win32Mouse::Win32Mouse >> Failed to aquire mouse!" );
    
        ShowCursor (mHideMouse);
    
        mGrabMouse = grab;
    }
    

    Das ganze dürfte DirectInput 8 sein.


Anmelden zum Antworten