Извлечь дескриптор окна из кода приложения, выполняющего сервис - PullRequest
0 голосов
/ 12 октября 2018

Я пишу сервис Win32 C ++ для взаимодействия биометрического устройства.SDK, предоставленный производителем, использует MFC.У меня нет опыта или знаний в отношении MFC.

Платформа: Windows 10

Архитектура: x64

Набор инструментов: MSVC 2017

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

Параметры

pFPM

Дескриптор объекта SGFPM

enable

TRUE: включает Auto-On

FALSE: отключает Auto-On

hwnd

Дескриптор окна для получения сообщения Auto-On

зарезервировано Не используется

Третий параметр требует дескриптор окна для получения сообщения Auto-On.Пример приложения - это приложение с графическим интерфейсом на основе MFC, а не служба.

У меня вопрос, каким должно быть значение для третьего параметра.В Linux мы заполняем значение NULL, но я не знаю, что мне следует вводить в моем случае.

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны создать окно для получения события от функции SGFPM_EnableAutoOnEvent, они, вероятно, используют функцию SendMessage или PostMessage , в любом случае вы создаете службу Windows, и у них естьне пользовательский интерфейс, службы работают на winstation0, и пользовательский интерфейс недоступен для зарегистрированных пользователей, ваше окно в любом случае будет скрыто.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...