私のプロジェクトは、DLL を返すコンソール アプリケーションです。別のプロジェクトでも使用しています。
このプロジェクトはWFS
メソッドを使用しています。これらのメソッドの 1 つでHWND
、パラメーターとして渡す必要があります。その理由は、メソッドがメッセージ (私の場合はイベント) を送信したいときはいつでも、 this を使用するからHWND
です。
最初にこれを試しました:
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WFS_EXECUTE_EVENT:
case WFS_SERVICE_EVENT:
case WFS_USER_EVENT:
case WFS_SYSTEM_EVENT:
return S_OK;
}
return DefWindowProc(hWnd, msg, wParam, lParam );
}
HWND create(HWND parent)
{
HINSTANCE inst = GetModuleHandle (0);
WNDCLASSEX wincl;
wincl.hInstance = inst;
wincl.lpszClassName = TEXT("ConsoleClass");
wincl.lpfnWndProc = WndProc;
HWND mainWindow = CreateWindow(
TEXT("DM_Class_Name"),
TEXT("DM_Title"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND) NULL,
(HMENU) NULL,
inst,
(LPVOID) NULL);
ShowWindow(mainWindow,1);
return mainWindow;
}
何らかの理由で機能していません。ウィンドウは表示されず、HWND は常にNULL
.
なぜ機能しないのですか?
数時間検索した後、試しましたQDialog
:
QDialog dialog;
dialog.setObjectName("Device_Manager_Dialog");
dialog.setWindowTitle("Device Manager");
dialog.setFixedWidth(10);
dialog.setFixedHeight(10);
dialog.show();
dialog.setVisible(false);
QWidget * widget = dialog.window();
HWND windows_handle = widget->effectiveWinId();
こんな感じで動いています。ウィンドウと HWND を作成し、クラスでこれを使用する必要がありますHWND
。
次の行を呼び出して取得します。
windows_handle = FindWindow(0, TEXT("Device Manager"));
を使用したい場合、メソッドが送信するメッセージを取得するにqdialog
はどうすれWndProc
ばqdialog
よいですか?widget
WFS