检测编辑控件焦点并插入字符 我在C++ WiLAPI中开发了一个虚拟键盘。它显然需要知道编辑控件何时具有焦点,以便显示虚拟键盘(VK)窗口。当用户按下VK中的一个键时,程序需要将该字符插入另一个进程编辑控件中。这些存在安全问题,在Windows操作系统中甚至不可能实现。所以我的问题
是否可以知道另一个进程中的编辑控件何时具有焦点?我认为挂钩可能是解决办法。使用全局钩子确实会带来安全问题,有没有一种方法我可以明确地对操作系统说“只告诉我什么时候“编辑”类型的控件有焦点?”?还有其他我不知道的方法吗检测编辑控件焦点并插入字符 我在C++ WiLAPI中开发了一个虚拟键盘。它显然需要知道编辑控件何时具有焦点,以便显示虚拟键盘(VK)窗口。当用户按下VK中的一个键时,程序需要将该字符插入另一个进程编辑控件中。这些存在安全问题,在Windows操作系统中甚至不可能实现。所以我的问题,c++,winapi,C++,Winapi,是否可以知道另一个进程中的编辑控件何时具有焦点?我认为挂钩可能是解决办法。使用全局钩子确实会带来安全问题,有没有一种方法我可以明确地对操作系统说“只告诉我什么时候“编辑”类型的控件有焦点?”?还有其他我不知道的方法吗 是否可以将字符插入另一个进程编辑控件?这再次引起了安全/礼仪方面的担忧 是否可以知道另一个进程中的编辑控件何时具有焦点 是的,但不是直接的。你确实需要一个钩子,通过或 使用SetWindowsHookEx(),为了钩住其他进程,必须在DLL中实现钩子(32位和64位系统的单独DL
SetWindowsHookEx()
,为了钩住其他进程,必须在DLL中实现钩子(32位和64位系统的单独DLL)。您可以使用钩子查找HCBT_SETFOCUS
通知,也可以使用钩子查找/window消息
使用SetWinEventHook()
,您不需要DLL来钩住其他进程。您可以注册以接收事件(但我没有看到用于检测焦点丢失的钩子事件)
有没有一种方法可以让我明确地告诉操作系统‘只告诉我什么时候‘编辑’类型的控件有焦点’
否。要过滤掉编辑控件,钩子需要调用提供的HWND
,以查找已知的编辑类(并非所有编辑控件都命名为“Edit”
)
是否可以将字符插入另一个进程编辑控件
对。您可以使用或将击键发送到键盘驱动程序本身发送到的同一输入队列。只要编辑控件保持焦点,它就会收到击键,就像用户正常键入一样。这是首选方法
但是,钩子确实为您提供了编辑控件的HWND
,因此您可以直接向编辑控件发送//消息(但是,请注意这些gotchas:,和)。或者,您可以向编辑控件发送/消息,或通过检索其界面,以根据需要操纵编辑控件的文本内容