windows - FindWindow GetLastError 5 ERROR_ACCESS_DENIED
问题描述
我在我的低级键盘挂钩过程中调用 WIN32 API FindWindow(),试图将焦点设置到我的 Python 脚本 GUI 窗口(这是 tkinter 顶级窗口之一),但每次它得到结果 NULL 和 GetLastError( ) 总是返回 5(ERROR_ACCESS_DENIED),有人知道原因吗?它在WIN10 64位系统上运行。
LRESULT CALLBACK MyllKeyboardProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam)
{
if (nCode < 0)
{
return CallNextHookEx(hHookllkb, nCode, wParam, lParam);
}
else
{
//printf("Key paras:%d %d %d\n", nCode, wParam, lParam);
KBDLLHOOKSTRUCT *Key_Info = (KBDLLHOOKSTRUCT*)lParam;
if (HC_ACTION == nCode)
{
if (WM_KEYDOWN == wParam) //如果按键为按下状态
{
/*
if (Key_Info->vkCode == VK_LWIN || Key_Info->vkCode == VK_RWIN) //屏敝 WIN(左右) 键
{
return TRUE;
}
if (Key_Info->vkCode == 0x4D && ((GetKeyState(VK_LWIN) & 0x8000) ||
(GetKeyState(VK_RWIN) & 0x8000))) //屏敝 WIN+D 组合键(左右)
{
return TRUE;
}
if (Key_Info->vkCode == 0x44 && ((GetKeyState(VK_LWIN) & 0x8000) ||
(GetKeyState(VK_LWIN) & 0x8000))) //屏敝 WIN+M 组合键(左右)
{
return TRUE;
}
*/
if (Key_Info->vkCode == VK_F11 && GetKeyState(VK_CONTROL) & 0x8000) //屏敝 CTRL + F12 组合键
{
//printf("CTRL+F2 %x\n", wParam);
if (bHide)
bHide = FALSE;
else
bHide = TRUE;
HideTaskBar(bHide);
return TRUE;
}
if (Key_Info->vkCode == VK_F12 && GetKeyState(VK_CONTROL) & 0x8000) //屏敝 CTRL + F11 组合键
{
int nCmdShow;
if (bHideConsole)
{
nCmdShow = SW_SHOW;
bHideConsole = FALSE;
}
else
{
nCmdShow = SW_HIDE;
bHideConsole = TRUE;
}
ShowWindow(hWndConsole, nCmdShow);
if (hWndConsole && !bHideConsole)
{
//Tricks for stealing keyboard input focus. it works
ShowWindow(hWndConsole, SW_HIDE);
ShowWindow(hWndConsole, SW_SHOW);
HWND hWndFocus = NULL;
if(bScriptRunning==TRUE){
HWND hWndRun = FindWindow(NULL, _T("The user interface for A - code supervision"));
if (hWndRun)
{
printf("Py running GUI window found:%x\n", hWndRun);
hWndFocus = hWndRun;
SetForegroundWindow(hWndFocus);
SetFocus(hWndFocus);
SetActiveWindow(hWndFocus);
EnableWindow(hWndFocus, TRUE);
}
else
{
printf("Py running GUI window not found error code: %d\n", GetLastError());
}
}
else {
hWndFocus = hWndConsole;
SetForegroundWindow(hWndFocus);
SetFocus(hWndFocus);
SetActiveWindow(hWndFocus);
EnableWindow(hWndFocus, TRUE);
}
}
return TRUE;
}
/*
if (Key_Info->vkCode == VK_TAB && Key_Info->flags & LLKHF_ALTDOWN) //屏敝 ATL + TAB 组合键
{
return TRUE;
}
if (Key_Info->vkCode == VK_ESCAPE && Key_Info->flags & LLKHF_ALTDOWN) //屏敝 ATL + ESC 组合键
{
return TRUE;
}
*/
}
}
return CallNextHookEx(hHookllkb, nCode, wParam, lParam);
}
}
解决方案
推荐阅读
- loss-function - 为什么我们在编译组合 GAN (SRGAN) 网络时使用两个损失
- c# - C#面临使用Web浏览器控件读取ajax数据的问题
- postgresql - 检查 Hasura 中的空数组
- php - 如何将数据(数据类型 BLOB)复制到另一个表中?
- methods - “返回”与“System.out.println”?
- r - 在 R 中绘制条形图/柱形图
- shutdown - NM 协调器功能实现
- javascript - websocket数据处理顺序不正确
- python - 在使用 python 自动进行 spotify 时,在终端中运行后出现错误“没有名为 'googleapiclient' 的模块”
- javascript - 如何将图像文件从 Angular 发送到 .net 核心 API