VC ++: Как получить дескриптор окна браузера Firefox с помощью Mouse Hook?

КОД В DLL:

extern "C" __declspec(dllexport) bool install()
{

hHookcbt = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, hinst, 0);
hook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, hinst, 0);
khook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, hinst, 0);
return TRUE;
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
{
return CallNextHookEx(hook, nCode, wParam, lParam);
}

//char c = MapVirtualKey(wParam,MAPVK_VK_TO_CHAR);

switch (wParam)
{
case WM_LBUTTONUP:
SendMessage(whandle, 9, wParam, lParam);
break;
case WM_RBUTTONUP:
SendMessage(whandle, 0, wParam, lParam);
break;
default:
break;
}return CallNextHookEx(NULL, nCode, wParam, lParam);
}

CODE IN EXE: Использование структуры Mouse для получения дескриптора окна щелкающего окна и работает со всеми приложениями по умолчанию, например: блокнот, заметки, но не в Firefox, TaskManager и т. Д.

// SETTING THIS WINDOW HANDLE TO THE DLL
swh = (SetWindowHandle)GetProcAddress(hinst, "setwindowhandle");
if (!swh(hWnd))
{
printf("\nDLL FAILED TO ADDED THIS WINDOW HANDLE");
}
else{
printf("\nDLL ADDED THIS WINDOW HANDLE");
}
case 9:

mhs = (MOUSEHOOKSTRUCT*)lParam;
cout <<endl<< "x=" << mhs->pt.x<<" y="<<mhs->pt.y;
SelWinH = mhs->hwnd;

cout << endl << "Selected window process id=" << GetProcessId(SelWinH);
tid = GetWindowThreadProcessId(mhs->hwnd, &pid);
cout << endl << "tid =" << tid << "   " << "pid = " << pid;
cout << endl << "---------------------------------------------------------------------------------";

break;

Здесь SelWinH хранит WHND окна, выбранного мышью. Но когда я нажал на браузер Firefox, он не ответил.

0

Решение

Как насчет вызова GetForegroundWindow() после щелчка мышью? Он вернет дескриптор окна, которое вы щелкнули.

-1

Другие решения


По вопросам рекламы [email protected]