16,548
社区成员




LRESULT CALLBACK KeyboardProc(
_In_ int code,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
//HWND currentW = GetForegroundWindow();
//HWND c = GetForegroundWindow();
#pragma region F1-F4按键处理
if (VK_F1 == wParam)//如果两个判断都放在一起 那么VK_F2按键弹起的时候还是会调用CallNextHookEx
{
//MessageBox(dllHWND, TEXT("哈哈"), TEXT("测试"), 0);
if ((lParam >> 31 & 1))
{
KeyType = 1;
//Condition = ClientToScreen(currentW, &(mouseP->F1));
Condition = GetCursorPos(&(mouseP->F1));在这里如果当前窗口是别的应用程序获取位置信息的返回值总是0,是什么原因呢?
::SendMessage(dllHWND, WM_MYMSG, WPARAM(KeyType), LPARAM(Condition));
}
return 1;
}
#pragma endregion
return CallNextHookEx(G_keyboard, code, wParam, lParam);
}
void HookProc(HWND winhandle, PointStruct* MousePoint)
{
dllHWND = winhandle; mouseP = MousePoint;
G_keyboard = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(TEXT("HookProcDll")), 0);
}
if (VK_F2 == wParam) {
if ((lParam >> 31 & 1)) {
DllMessage->KeyType = 2;
DllMessage->Condition = ::GetCursorPos(&(DllMessage->mouseP->F2));
if (0 == DllMessage->Condition) {
DllMessage->ErrorId = GetLastError();
} else {
DllMessage->ErrorId = 0;
}
::SendMessage(AppHWND, WM_MYMSG, WPARAM(DllMessage), 0);
}
return 1;
}