我正在编写一个Win32 C ++服务来连接生物识别设备。制造商提供的SDK使用MFC。我没有有关MFC的经验或知识。
平台:Windows 10
体系结构:x64
工具链:MSVC 2017
DWORD SGFPM_EnableAutoOnEvent (HSGFPM hFpm, BOOL enable, HWND hwnd, void* reserved)
参数
pFPM
SGFPM对象的句柄
启用
TRUE:启用自动开启
FALSE:禁用自动开启
拥有
接收自动打开消息的窗口句柄
保留未使用
第三个参数需要窗口句柄来接收自动打开消息。 该示例应用程序是基于MFC的GUI应用程序,而不是服务。
我的问题是第三个参数的值应该是多少。在Linux中,我们填写NULL值,但我不知道该输入什么内容。
答案 0 :(得分:1)
您必须创建一个窗口以接收来自功能SGFPM_EnableAutoOnEvent的事件,它们可能正在使用函数SendMessage或PostMessage,无论如何,您正在创建Windows服务并且它们都没有UI,服务在winstation0上运行,并且UI对登录的用户不可用,无论如何您的窗口都将被隐藏。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_APP_SGAUTOONEVENT:
WORD isFinger= wParam;
SGDeviceInfoParam device_info;
memcpy(&device_info, (SGDeviceInfoParam*)lParam,sizeof(device_info));
//Add your code here...
return 1;
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
HWND CreateMyWindow(){
static const char* class_name = "DUMMY_CLASS";
WNDCLASSEX wx = {};
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = WndProc; // function which will handle messages
wx.hInstance = current_instance;
wx.lpszClassName = class_name;
if ( RegisterClassEx(&wx) ) {
return CreateWindowEx( 0, class_name, "dummy_name", 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL );
}
return NULL;
}
然后使用CreateMyWindow函数的结果,可以在调用SGFPM_EnableAutoOnEvent的过程中将该参数传递给