如何在 C++ 中显示通知,当鼠标单击可编辑文本框时
How to show notification in c++ when mouse click an editable textbox is focused
我一直在寻找解决这个问题的方法,但我找不到太多信息。
我正在寻找的是一个小程序,当鼠标单击文本可编辑字段(如Windows表单或浏览器页面中的文本框)时显示通知。
唯一的起点是这个老问题,这使我得出以下几点:
// Global variable.
HWINEVENTHOOK g_hook;
// Initializes COM and sets up the event hook.
//
void InitializeMSAA()
{
CoInitialize(NULL);
g_hook = SetWinEventHook(
EVENT_SYSTEM_MENUSTART, EVENT_SYSTEM_MENUEND, // 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();
}
// Callback function that handles events.
//
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
LONG idObject, LONG idChild,
DWORD dwEventThread, DWORD dwmsEventTime)
{
IAccessible* pAcc = NULL;
VARIANT varChild;
HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &pAcc, &varChild);
if ((hr == S_OK) && (pAcc != NULL))
{
BSTR bstrName;
pAcc->get_accName(varChild, &bstrName);
if (event == EVENT_SYSTEM_MENUSTART)
{
printf("Begin: ");
}
else if (event == EVENT_SYSTEM_MENUEND)
{
printf("End: ");
}
printf("%Sn", bstrName);
SysFreeString(bstrName);
pAcc->Release();
}
}
您是否知道我如何修改它,以便在文本框聚焦时收到通知?任何解释将不胜感激。
您提供的代码挂在菜单打开和关闭事件EVENT_SYSTEM_MENUSTART
和EVENT_SYSTEM_MENUEND
上。
您应该尝试使用EVENT_OBJECT_FOCUS
(也许EVENT_OBJECT_SELECT
在您的SetWinEventHook
和HandleWinEvent
中使用
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
LONG idObject, LONG idChild,
DWORD dwEventThread, DWORD dwmsEventTime)
{
IAccessible* pAcc = NULL;
VARIANT varChild;
HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &pAcc, &varChild);
BSTR bstrName;
pAcc->get_accName(varChild, &bstrName);
if (event == EVENT_OBJECT_FOCUS || event == EVENT_OBJECT_SELECTION)
{
printf("%Sn", bstrName);
}
}
void InitializeMSAA()
{
CoInitialize(NULL);
g_hook = SetWinEventHook(
EVENT_OBJECT_FOCUS, EVENT_OBJECT_SELECTION,
NULL, // Handle to DLL.
HandleWinEvent, // The callback.
0, 0, // Process and thread IDs of interest (0 = all)
WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); // Flags.
}
查看文档以了解可用事件的列表:
SetWinEventHook 函数
事件常量
相关文章:
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- 如何在QSplashScreen中禁用鼠标单击
- C++鼠标单击时的屏幕截图不起作用
- 标签检测鼠标单击 c++
- 使用 SFML 在矩形的矢量中查找鼠标单击量
- 如何使用鼠标单击选择多个 QLabel 对象?
- 如何获得鼠标光标连接时按下左键单击和在C++中释放左键单击时?
- 当我按Enter或在其区域外单击鼠标时,如何从可编辑的Qcombobox中删除光标
- 双击(触摸)按屏幕按钮的原因可能是什么,该按钮通过单击鼠标按下
- 单击鼠标即可创建小部件
- 如何在打开的cv c ++中单击鼠标右键时从视频中捕获图像
- 通过在QT QML中单击鼠标重复矩形
- 如何在mousepressEvent()函数中显示像素坐标,然后如何在每次单击鼠标时在paintGL()函数中将其使用
- 用C++单击鼠标
- 无法从 C/C++ 代码中单击鼠标
- 从 QT 中的 MPV 单击鼠标
- 无法在QT中单击鼠标时调用C++函数
- cout在控制台窗口中单击鼠标时挂起
- 单击鼠标滑动
- 键盘输入不起作用,单击鼠标时工作