从运行服务的应用程序代码中提取窗口句柄

时间:2018-10-12 10:14:41

标签: c++ windows winapi service mfc

我正在编写一个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值,但我不知道该输入什么内容。

1 个答案:

答案 0 :(得分:1)

您必须创建一个窗口以接收来自功能SGFPM_EnableAutoOnEvent的事件,它们可能正在使用函数SendMessagePostMessage,无论如何,您正在创建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的过程中将该参数传递给