Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从运行服务的应用程序代码中提取窗口句柄 我正在编写一个Win32 C++接口,用于连接生物测量设备。制造商提供的SDK使用MFC。我没有MFC方面的经验或知识_C++_Windows_Winapi_Service_Mfc - Fatal编程技术网

从运行服务的应用程序代码中提取窗口句柄 我正在编写一个Win32 C++接口,用于连接生物测量设备。制造商提供的SDK使用MFC。我没有MFC方面的经验或知识

从运行服务的应用程序代码中提取窗口句柄 我正在编写一个Win32 C++接口,用于连接生物测量设备。制造商提供的SDK使用MFC。我没有MFC方面的经验或知识,c++,windows,winapi,service,mfc,C++,Windows,Winapi,Service,Mfc,平台:视窗10 架构:x64 工具链:MSVC 2017 DWORD SGFPM_EnableAutoOnEvent (HSGFPM hFpm, BOOL enable, HWND hwnd, void* reserved) 参数 pFPM SGFPM对象的句柄 启用 真:启用自动开启 FALSE:禁用自动打开 hwnd 接收自动开启消息的窗口句柄 保留的未使用 第三个参数要求窗口句柄接收自动开启消息。 示例应用程序是基于MFC的GUI应用程序,而不是服务 我的问题是第三个参数的值应该是多少。

平台:视窗10

架构:x64

工具链:MSVC 2017

DWORD SGFPM_EnableAutoOnEvent (HSGFPM hFpm, BOOL enable, HWND hwnd, void* reserved)
参数

pFPM

SGFPM对象的句柄

启用

真:启用自动开启

FALSE:禁用自动打开

hwnd

接收自动开启消息的窗口句柄

保留的未使用

第三个参数要求窗口句柄接收自动开启消息。 示例应用程序是基于MFC的GUI应用程序,而不是服务


我的问题是第三个参数的值应该是多少。在Linux中,我们填充一个空值,但我不知道在我的情况下应该输入什么。

您必须创建一个窗口来接收来自函数SGFPM_enableAutooneEvent的事件,他们可能正在使用该函数,或者,无论如何,您正在创建一个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_enableAutooneEvent时传递该参数,然后用您希望接收消息的窗口的
hwnd
(将其视为操作系统的标识符)填充该参数。你是如何发现这个价值的?不知道。。如果它是您可能使用的另一个应用程序,或者如果它是同一项目的一部分,您可以使用随MFC一起提供的MFCwindow@MarcoA.,这两个函数都说窗口句柄,它能与服务一起工作吗?“查找窗口”需要窗口名,因为我的程序是一个服务,所以它没有窗口名。GETSuffHWND也是CWD类的一个成员,它用于GUI,我的应用程序是一个用C++开发的Win32服务。通常服务没有Windows。您可以尝试传递NULL,在这种情况下,参数的处理方式取决于实现。如果您需要HWND,则Windows支持“仅消息窗口”的概念,您可以创建该窗口来接收消息,请参见@MarcoA.,使用NULL不会检测事件。