Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.07.2005, 17:07

kein Focus auf Fenster bei DInput

Hi,

hier erst mal Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
CInput::CInput(HINSTANCE hInst,HWND hWnd)
{
    HRESULT hr;
    
    m_hInst = hInst;
    m_hWnd  = hWnd;
    m_pDI       = 0;
    m_pDevice   = 0;            

    hr = DirectInput8Create(m_hInst,
                            DIRECTINPUT_VERSION,
                            IID_IDirectInput8,
                            (void **)&m_pDI,
                            0);

    hr = m_pDI->CreateDevice(GUID_SysKeyboard,
                                &m_pDevice,
                                0);
    hr = m_pDevice->SetDataFormat(&c_dfDIKeyboard);
    hr = m_pDevice->SetCooperativeLevel(m_hWnd,
                                            DISCL_FOREGROUND | 
                                            DISCL_NONEXCLUSIVE); 

    if(m_pDevice)
    {
        hr = m_pDevice->Acquire();

        while(hr == DIERR_OTHERAPPHASPRIO)
        {
            hr = m_pDevice->Acquire();
            MessageBox(0,"DIERR_OTHERAPPHASPRIO","Fehler",0);
        }
    }
}

CInput::~CInput()
{
    if(m_pDI) 
    {
        if(this->m_pDevice) 
            SAFE_RELEASE(m_pDevice);
        SAFE_RELEASE(m_pDI);
    }

    MessageBox(0,"jop","jop",0);
}

bool CInput::wasKeyboardKeyPressed(UINT Key)
{
    HRESULT hr;

    hr = m_pDevice->GetDeviceState(sizeof(m_chBuffer),
                                        (void *)&m_chBuffer);

    if(hr == DIERR_INPUTLOST)
        MessageBox(0,"DIERR_INPUTLOST","FEHLER",0);

    if(hr == DIERR_INVALIDPARAM)
        MessageBox(0,"DIERR_INVALIDPARAM","FEHLER",0);

    if(hr == DIERR_NOTACQUIRED)
        MessageBox(0,"DIERR_NOTACQUIRED","FEHLER",0);

    if(hr == DIERR_NOTINITIALIZED)
        MessageBox(0,"DIERR_NOTINITIALIZED","FEHLER",0);

    if(hr == E_PENDING)
        MessageBox(0,"E_PENDING","FEHLER",0);

    if(m_chBuffer[Key] & 0x80)
        return true;

    return false;
}



komischerweise kann ich nicht Acquiren, Acquire gibt immer DIERR_OTHERAPPHASPRIO zurück. Ich verstehe nicht warum dieser Fehler kommt weil ich sonst keine andere Anwendung laufen habe. Zuvor hat der Input auch immer bei mir funktioniert nur jetzt nicht mehr. Weiß einer vielleicht woran das liegen könnte oder wie man das beheben kann ?

Danke im Vorraus

mfg 007beo

2

18.07.2005, 19:48

ich vermute es liegt an

C-/C++-Quelltext

1
2
3
    hr = m_pDevice->SetCooperativeLevel(m_hWnd, 
                                            DISCL_FOREGROUND | 
                                            DISCL_NONEXCLUSIVE); 

3

25.07.2005, 17:05

hmm, also ich habe nun verschiedene States ausprobiert, aber das ändert leider auch nichts.

4

25.07.2005, 23:06

ich hab gegoogelt....

http://www.zfx.info/DisplayThread.php?TID=9897

if( hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED )
{
m_data="Unacquired";
UpdateData(FALSE);
}
// hr may be DIERR_OTHERAPPHASPRIO or other errors. This
// may occur when the app is minimized or in the process of
// switching, so just try again later
return S_OK;


http://www.gamedev.net/community/forums/…topic_id=165133

Werbeanzeige