我刚刚开始学习C ++,所以如果我没有遵循最佳实践,请告诉我。我正在尝试编写一个程序,该程序复制 Win + D 的行为,但仅适用于活动监视器上的窗口(使用鼠标的窗口)。
以下代码用于检测WIN + D按键并抑制默认行为,然后调用自定义函数以最小化窗口。到目前为止,我已经设法抓住WIN + D按键。
如果我按以下顺序按键:
WIN(按),D(按),D(释放),WIN(释放)。
然后一切都会按预期进行。
但是,如果我按如下键:
WIN(按),D(按),WIN(释放),D(释放)。
然后开始菜单打开。
我该如何解决?
感谢任何帮助/反馈。
HHOOK keyboardHook;
static bool isWindowsPressed = false;
LRESULT CALLBACK keyboardEventHandler(int code, WPARAM w, LPARAM l){
int key = ((PKBDLLHOOKSTRUCT) l)->vkCode;
bool isKeyDownEvent = (w == WM_KEYDOWN || w == WM_SYSKEYDOWN);
if(key == VK_LWIN || key == VK_RWIN) isWindowsPressed = isKeyDownEvent;
if(isWindowsPressed && isKeyDownEvent && key == 'D'){
std::cout << "FIRED" << std::endl;
//Minimize Windows
return 1;
}
return CallNextHookEx(keyboardHook, code, w, l);
}
int main(){
//ShowWindow(GetConsoleWindow(), SW_HIDE);
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardEventHandler, GetModuleHandle(NULL), 0);
MSG ms;
while(1){
PeekMessage(&ms, 0, 0, 0, 1);
}
return 0;
}