代码之家  ›  专栏  ›  技术社区  ›  Dark Sorrow

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

  •  0
  • Dark Sorrow  · 技术社区  · 7 年前

    我正在编写一个Win32 C++接口,用于连接生物度量设备。制造商提供的SDK使用MFC。我没有MFC方面的经验或知识。

    架构:x64

    工具链:MSVC 2017

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

    参数

    SGFPM对象的句柄

    使可能

    FALSE:禁用自动打开

    父窗口句柄

    含蓄的

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ricardo FuMa    7 年前

    您必须创建一个窗口来接收来自函数SGFPM_enableAutooneEvent的事件,它们可能正在使用函数 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;
    }
    

    推荐文章