Tastatur und Maus initialisieren



  • Einen schönen guten Morgen !

    Hab ein kleines Problem beim initialisieren meines Keyboard und meiner Maus.

    LPDIRECTINPUT8         g_pDI = NULL;
    
    LPDIRECTINPUTDEVICE8   g_pJoystick = NULL;
    LPDIRECTINPUTDEVICE8   g_keyb = NULL;
    LPDIRECTINPUTDEVICE8   g_mouse = NULL;
    
    HWND         hDlg = NULL;     //Window handle
    HRESULT hr;
    HINSTANCE  g_hinst;
    
    void InitDirectInput(HWND hDlg)
    {
    
        //-------------------------------------------------------------------------
        //  Register with the DirectInput subsystem and get a pointer
        //-------------------------------------------------------------------------
        if( FAILED( hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION,IID_IDirectInput8, (void**)&g_pDI, NULL )))
        ShowMessage("Error: failed to create DirectInput interface");
        else
        Form1->Memo1->Lines->Add("- DirectInput initialized");
    
        //--------------------------------------------------------------------------
        // Create default input devices  *******************************************
        //--------------------------------------------------------------------------
    
         // Ab hier wird bis auf meinen Joystick nichts initialisiert !
    
         if(FAILED(hr = g_pDI->CreateDevice(GUID_SysKeyboard, &g_keyb, NULL))); //Zugriff auf Tastatur ermöglichen
         ShowMessage("Can´t create keyboard device");
    
         if(FAILED(hr = g_pDI->CreateDevice(GUID_SysMouse, &g_mouse, NULL))); //Zugriff auf Maus ermöglichen
         ShowMessage("Can´t create mouse device");
    
         //-----------
    
         if( FAILED( hr = g_keyb->SetDataFormat(&c_dfDIKeyboard)))
         ShowMessage("failed to set Keyboard data format");
    
         if( FAILED( hr = g_mouse->SetDataFormat(&c_dfDIMouse2)))
         ShowMessage("failed to set Mouse data format");
    
         //-----------  Geht auch nicht, logisch da initialisierung fehl geschlagen
    
         if(FAILED(hr = g_keyb->SetCooperativeLevel( hDlg , DISCL_NONEXCLUSIVE | DISCL_FOREGROUND))); //Keyboard zugriff
         ShowMessage("Keyboard: failed to set cooperative level");
    
         if(FAILED(hr = g_mouse->SetCooperativeLevel( hDlg , DISCL_EXCLUSIVE | DISCL_FOREGROUND))); //Mouse zugriff
         ShowMessage("Mouse: failed to set cooperative level");
    
         //------------
    
         g_keyb->Acquire();
         g_mouse->Acquire();
    

    Warum wird mein Keyboard und Maus nicht initialisiert, wo liegt mein Denkfehler weil viel kann es ja nicht sein sonst würde mein Joystick nicht in dem Programm funktionieren. Bin für jeden kleinen Tip sehr dankbar !

    P.S Werden Tastaturen und Mäuse nicht wie Joysticks eingebunden ?

    David



  • Zero01 schrieb:

    Warum wird mein Joystick nicht initialisiert

    Du strengst dich nicht genug an. 😎

    Bye, TGGC (Der Held lebt!)



  • Also außer in der 2. Zeile kann ich da nicht viel von Joysticks erkennen.
    Schlage vor, dass du mal den fehlenden Code psotest ... 🙄



  • Sorry, hier geht es doch um Maus und Tastatur initialisieren, da dürfte mein fehlerhaftes Codebeispiel reichen.

    Wieso den Code vom Joystick ? Der funzt schon seit Tagen perfekt, bekomme keine default input devices erstellt.

    Was ich eigentlich wissen wollte:

    Muss ich für jedes Device (Maus,Keyboard,Joystick) einen neuen Pointer mit DirectInput8Create holen ??

    hab bis jetzt das hier:
    [cpp]
    LPDIRECTINPUT8 g_pDI = NULL;
    LPDIRECTINPUT8 g_pKeyPoint = NULL;
    LPDIRECTINPUT g_pMousePoint = NULL;

    LPDIRECTINPUTDEVICE8 g_pJoystick = NULL;
    LPDIRECTINPUTDEVICE8 g_Keyb = NULL;
    LPDIRECTINPUTDEVICE g_Mouse = NULL;

    HWND hDlg = NULL; //Window handle
    HRESULT hr;

    void InitDirectInput(HWND hDlg)
    {

    //-------------------------------------------------------------------------
    // Register with the DirectInput subsystem and get a pointer
    //-------------------------------------------------------------------------
    if( FAILED( hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION,IID_IDirectInput8, (VOID**)&g_pDI, NULL )))
    ShowMessage("Joystick: failed to create DirectInput interface");
    else
    Form1->Memo1->Lines->Add("- Joystick: DirectInput initialized");

    if( FAILED( hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION,IID_IDirectInput8, (VOID**)&g_pKeyPoint, NULL )))
    ShowMessage("Keyboard: failed to create DirectInput interface");
    else
    Form1->Memo1->Lines->Add("- Keyboard: DirectInput initialized");

    if( FAILED( hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION,IID_IDirectInput8, (VOID**)&g_pMousePoint, NULL )))
    ShowMessage("Mouse: failed to create DirectInput interface");
    else
    Form1->Memo1->Lines->Add("- Mouse: DirectInput initialized");

    //--------------------------------------------------------------------------
    // Enumerate Devices
    //--------------------------------------------------------------------------
    if( FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,EnumJoysticksCallback,NULL, DIEDFL_ATTACHEDONLY ) ) )
    Form1->Memo1->Lines->Add("Error: failed to enum devices");
    else
    Form1->Memo1->Lines->Add("- Enum device created");

    //--------------------------------------------------------------------------
    // Init default input devices
    //--------------------------------------------------------------------------
    Funktioniert nicht

    if(FAILED(g_pKeyPoint->CreateDevice(GUID_SysKeyboard, &g_Keyb, NULL)));
    Form1->Memo1->Lines->Add("Error: Can´t init keyboard");

    if(FAILED(g_pMousePoint->CreateDevice(GUID_SysMouse, &g_Mouse, NULL)));
    Form1->Memo1->Lines->Add("Error: Can´t init mouse");

    //--------------------------------------------------------------------------
    // Make sure we got a Joystick and all other default devices
    //--------------------------------------------------------------------------

    if(NULL == g_pJoystick || NULL == g_Mouse || NULL == g_Keyb)
    {

    MessageBox( NULL, TEXT("Joystick or default input device not found."),TEXT("Jbind™"),MB_ICONERROR | MB_OK );
    Form1->Memo1->Lines->Add("Error: find a input device !");
    Form1->Button1->Enabled = false;
    Form1->Button2->Enabled = false;
    Form1->Button3->Enabled = false;

    }
    else
    {

    Form1->Memo1->Lines->Add("- DirectInput devices set up");

    //-------------------------------------------------------------------------
    // Set the data format for all devices - a predefined data format
    //-------------------------------------------------------------------------
    if( FAILED( hr = g_pJoystick->SetDataFormat( &c_dfDIJoystick2 )))
    Form1->Memo1->Lines->Add("Error: failed to set data format");
    else
    Form1->Memo1->Lines->Add("- Joystick data format set up");

    //------------
    //- default input
    //-----------------------------
    if( FAILED( hr = g_Keyb->SetDataFormat(&c_dfDIKeyboard)))
    Form1->Memo1->Lines->Add("failed to set keyboard data format");

    if( FAILED( hr = g_Mouse->SetDataFormat(&c_dfDIMouse2)))
    Form1->Memo1->Lines->Add("failed to set mouse data format");

    //-------------------------------------------------------------------------
    // Set Cooperative Level
    //-------------------------------------------------------------------------

    if(FAILED(hr = g_pJoystick->SetCooperativeLevel( hDlg ,DISCL_NONEXCLUSIVE | DISCL_BACKGROUND)))
    Form1->Memo1->Lines->Add("Error: failed to set cooperative level");
    else
    Form1->Memo1->Lines->Add("- Setting cooperative level");

    //---------------
    // default devices coop
    //-------------------------------
    Funktioniert nicht

    if(FAILED(hr = g_Keyb->SetCooperativeLevel( hDlg , DISCL_NONEXCLUSIVE | DISCL_BACKGROUND))); //Keyboard zugriff
    Form1->Memo1->Lines->Add("Error: failed to set keyboard cooperative");

    if(FAILED(hr = g_Mouse->SetCooperativeLevel( hDlg , DISCL_NONEXCLUSIVE | DISCL_BACKGROUND))); //Mouse zugriff
    Form1->Memo1->Lines->Add("Error: failed to set mouse cooperative");

    //-------------------------------------------------------------------------
    // Get device features
    //-------------------------------------------------------------------------
    DIDEVCAPS g_joyDevCaps;

    g_joyDevCaps.dwSize = sizeof(DIDEVCAPS);
    if (FAILED(hr = g_pJoystick->GetCapabilities(&g_joyDevCaps)))
    Form1->Memo1->Lines->Add("Error: failed getting joystick capabilities");
    else
    Form1->Memo1->Lines->Add("- " + String(g_joyDevCaps.dwButtons) +" joystick buttons available");

    }
    }
    [/cpp]
    Ich hab keinen Plan was hier faul sein soll



  • Zero01 schrieb:

    Warum wird mein Joystick nicht initialisiert
    [...]Sorry, hier geht es doch um Maus und Tastatur initialisieren, da dürfte mein fehlerhaftes Codebeispiel reichen.

    Wieso den Code vom Joystick ? Der funzt schon seit Tagen perfekt, bekomme keine default input devices erstellt.

    Wir sollen deine Frage lesen, dein Problem verstehen und eine Lösung anbieten, wenn du dir selbst noch nichtmal die Zeit nimmst, zu deinen paar Riesen-Codeschnipsen eine sinnvolle Frage zu formulieren?

    Bye, TGGC (Der Held lebt!)



  • Aua, hab gar nicht bemerkt das ich in meinem ersten Post kauderwelsch gepostet habe, Sorry ! ich hab jetzt korrigiert das ich Maus und Tastatur meine 😉

    Meine Frage ist ob man Grundsätzlich für jedes input device einen Pointer mit DirectInput8Create holen muss ? Ich kann momentan noch nicht erkennen warum das initialisieren der direct input devices fehl schlägt 😕

    Ich hab jetzt mal die 2 Stellen gekennzeichnet die nicht funktionieren wollen.
    Alles andere wird ohne Fehler ausgeführt

    Nochmals Sorry und Danke für eure Geduld !
    Wenn euch irgend ne Kleinigkeit auffällt lasst es mich bitte wissen



  • Zero01 schrieb:

    Meine Frage ist ob man Grundsätzlich für jedes input device einen Pointer mit DirectInput8Create holen muss ?

    Nein, ein Handle zur DirectInput Schnittstelle reicht.

    Zero01 schrieb:

    Ich kann momentan noch nicht erkennen warum das initialisieren der direct input devices fehl schlägt 😕

    Schon mal die HRESULT Rückgabewerte gecheckt?



  • DX Debug Runtimes.

    Bye, TGGC (Dem beste BdT)



  • Also,

    //--------------------------------------------------------------------------
        //  Init default input devices
        //--------------------------------------------------------------------------
           Funktioniert nicht
    
         if(FAILED(g_pKeyPoint->CreateDevice(GUID_SysKeyboard, &g_Keyb, NULL)));
         Form1->Memo1->Lines->Add("Error: Can´t init keyboard");
    
         if(FAILED(g_pMousePoint->CreateDevice(GUID_SysMouse, &g_Mouse, NULL)));
         Form1->Memo1->Lines->Add("Error: Can´t init mouse");
    

    "Create Device" gibt in beiden Anweisungen "0" zurück. SetCooperativeLevel gibt ebenfalls in beiden Fällen (Mouse,Keyboard) "0" zurück. Da ihr bestimmt genauso wenig wie ich einen syntaktischen Fehler finden könnt stellt sich nun die Frage nach dem warum 😕 kompiliert wird alles anstandslos

    @Tggc: Sorry, ich bin blutiger Anfänger was DX angeht und möchte auch nicht fertigen Code vorgesetzt bekommen, ich hoffe nur darauf das mich jemand mal beim händchen nimmt und mir sagt "dies und das ist blödsinn was du da machst, schau dir doch mal *Stichwort* an". Dafür liege ich euch zu Füßen 😉



  • 0 heisst doch, dass alles ok ist. Sehe übrigens gerade, dass du ja immer "Error: Can´t init keyboard" bzw "Error: Can´t init mouse" ausgibst. Vielleicht solltest du es mal so probieren

    if(FAILED(g_pKeyPoint->CreateDevice(GUID_SysKeyboard, &g_Keyb, NULL)))
            Form1->Memo1->Lines->Add("Error: Can´t init keyboard");
    
        if(FAILED(g_pMousePoint->CreateDevice(GUID_SysMouse, &g_Mouse, NULL)))
            Form1->Memo1->Lines->Add("Error: Can´t init mouse");
    

    Also ohne Semikolon nach der if-Bedingung.



  • groovemaster schrieb:

    0 heisst doch, dass alles ok ist.

    So hatte ich mir das bei msdn auch herausgelesen.
    ich teste noch ein bisschen und poste bald ein resultat

    groovemaster schrieb:

    Also ohne Semikolon nach der if-Bedingung.

    Ich bin doch einfach nur bescheuert, ich gucke mir das jetzt 2 Tage lang an und entdeck nicht so einen elementaren Fehler. Ich könnte mich tot ärgern 😡

    btw: Es funktioniert jetzt bestens !

    Vielen Vielen lieben Dank Groovemaster für dein Hawk Eye 😉 !



  • Zero01 schrieb:

    Ich bin doch einfach nur bescheuert

    Selbsterkenntnis...

    Bye, TGGC (Der Held lebt!)


Anmelden zum Antworten