gpt4 book ai didi

c++ - 如何仅 Hook Windows API 上的键盘焦点

转载 作者:行者123 更新时间:2023-11-30 16:24:35 25 4
gpt4 key购买 nike

我正在搜索 msdn寻找有关键盘焦点的 Hook 处理程序,但没有找到。

我想要通过键盘获得焦点的元素的处理程序。

示例:

当我们在桌面上按下某个程序的第一个字母的任意键时,就会选择这些程序。

Example 1

当我们按导航链接的 TAB 键时,会选择这些元素。

Example 2

我看到了CBTProc用于 Hook 键盘事件,但没有帮助,因为我们可以通过单击鼠标来选择项目。

所以,我想要有关鼠标或键盘焦点、元素名称的处理程序。

最佳答案

我使用这段代码取得了成功。

// Global variable.
HWINEVENTHOOK g_hook;

//
// Callback function that handles events.
//
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
LONG idObject, LONG idChild,
DWORD dwEventThread, DWORD dwmsEventTime)
{
std::cout << "Inside CB" << std::endl;
}

// Initializes COM and sets up the event hook.
void InitializeMSAA()
{
CoInitialize(NULL);
g_hook = SetWinEventHook(
EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS, // Range of events (4 to 5).
NULL, // Handle to DLL.
HandleWinEvent, // The callback.
0, 0, // Process and thread IDs of interest (0 = all)
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); // Flags.
}


// Unhooks the event and shuts down COM.
//
void ShutdownMSAA()
{
UnhookWinEvent(g_hook);
CoUninitialize();
}


int main()
{
InitializeMSAA();

MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

谢谢大家的回复

关于c++ - 如何仅 Hook Windows API 上的键盘焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53603899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com