4

Is it possible to use Windows Raw Input API without a window (ie from a console application)?

I've tried using RegisterRawInputDevices but my message loops doesn't seem to get any events from GetMessage and hence just 'hangs' there.

Adam M-W
  • 3,509
  • 9
  • 49
  • 69

2 Answers2

7

That way I did it (not sure it is the most comfortable way...):

I have started a thread (for the task of filling my input buffer). In this thread I have created a message-only window (its hidden, and can get input datas) with an appropriate window-class.

Then registered the raw input devices.

This thread has its own message handler loop. In the WindowProc of the window-class I've handled the inputs.

(For buffer, You can use boost:circular_buffer, it ROCKS! :D)

In this solution You did need have a window, but it looks like You don't. :)

I hope this can help.

2

Do you mean RegisterRawInputDevices?

Since the RAWINPUTDEVICE structure requires you to specify an HWND to receive the WM_INPUT messages, no it's not possible to do this without a window.

Console applications can create windows, and the window probably can receive WM_INPUT while hidden, but you do need a window.

Ben Voigt
  • 277,958
  • 43
  • 419
  • 720
  • Yes, that's what I meant. RAWINPUTDEVICE seems to work with hwndTarget of NULL as it follows the active window, but it requires a WindowProc to get the WM_INPUT messages. – Adam M-W Jul 23 '11 at 15:12
  • @Adam: `hwndTarget` of NULL may be allowed, but it doesn't mean "send to thread" like it does with e.g. `PostMessage`. If you don't have a window, then you don't have an active window, and no `WM_INPUT` messages will be forthcoming. – Ben Voigt Jul 23 '11 at 15:25