Thanks for your feedback,

 

I updated my GetPointerDevices stub to return FALSE when the application tries to load devices - now we only success if it queries the number of devices - and then we return 0. This should be alright.

 

I made a small testcase to test if windows returns success for RegisterTouchHitTestingWindow when the system doesn't have a pointer device - it does. Since there is no touch device, it should be fine if we just never send the message - even if the window is "registered".

 

I'd add a testcase, but I'm not sure how to go about that - since it's not guaranteed that every machine the test runs one has 0 pointer devices. An idea how I could go about that?

 

Regards,

Fabian Maurer

 

####################################

#define _WIN32_WINNT _WIN32_WINNT_WIN8

#include <windows.h>

#include <stdio.h>

 

static LRESULT WINAPI WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

return DefWindowProcA(hwnd, message, wParam, lParam);

}

 

int main(void)

{

BOOL success;

UINT32 count;

WNDCLASSA cls = {0};

HANDLE hwnd;

POINTER_DEVICE_INFO devices[1];

 

cls.lpfnWndProc = WndProc;

cls.hInstance = GetModuleHandleA(0);

cls.hCursor = LoadCursorA(0, (LPCSTR)IDC_ARROW);

cls.hbrBackground = GetStockObject(WHITE_BRUSH);

cls.lpszClassName = "testclass";

RegisterClassA(&cls);

 

hwnd = CreateWindowA("testclass", "Test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 10, 10, 300, 300, NULL, NULL, NULL, 0);

printf("Handle: %p\n", hwnd);

 

success = GetPointerDevices(&count, NULL);

printf("success: %d, count: %d\n", success, count);

 

success = RegisterTouchHitTestingWindow(hwnd, TOUCH_HIT_TESTING_CLIENT);

printf("success: %d\n", success);

 

count = 1;

success = GetPointerDevices(&count, devices);

printf("success: %d, count: %d\n", success, count);

 

return 0;

}

 

####################################

output from testbot:

Handle: 00070234

success: 1, count: 0

success: 1

success: 0, count: 1