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 nichtif(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 nichtif(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ührtNochmals 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 resultatgroovemaster 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
!
-