WEB开发网
开发学院软件开发VC MS Active Accessibility 接口技术编程尝试 阅读

MS Active Accessibility 接口技术编程尝试

 2006-07-20 11:39:00 来源:WEB开发网   
核心提示: 模拟键盘和鼠标输入让我们假设你需要操作一个新的不完全支持 Windows 消息和 IAccessible 接口方法的 UI 元素,如果它不支持你需要的消息和方法,MS Active Accessibility 接口技术编程尝试(7),最简单的解决办法就是模拟键盘和鼠标输入,例如,并注入目标

模拟键盘和鼠标输入

让我们假设你需要操作一个新的不完全支持 Windows 消息和 IAccessible 接口方法的 UI 元素。如果它不支持你需要的消息和方法,最简单的解决办法就是模拟键盘和鼠标输入。例如,你可以用Tab模拟转移到期望的控件。

使你能够实现这些的函数就是 SendInput 一个一般的USER API。虽然不属于Active Accessibility,把他们联合使用很自然。

SendInput 接受三个参数:要执行的鼠标键盘动作个数、INPUT结构数组和结构数组的大小。每个INPUT结构描述一个要执行的动作。注意,按下一个按钮和释放一个按钮是两个不同的动作,所以必须创建两个不同的INPUT结构。

下面的代码将模拟 ALT+F4 按键来关闭窗口。

INPUT input[4];  
memset(input, 0, sizeof(input));
//设置模拟键盘输入
input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[2].ki.wVk = VK_MENU;
input[1].ki.wVk = input[3].ki.wVk = VK_F4;
// 释放按键,这非常重要
input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(4, input, sizeof(INPUT));

具体用法大家还是查MSDN吧,这里就不罗嗦了!!:)

监视WinEvents

监视 WinEvents 非常像通过 Windows Hook 监视 Windows 消息。最重要的区别就是从另一个进程监视 UI 元素发出的 WinEvents 时,你不需要创建一个单独的DLL来注入那个进程的地址空间。

监视 WinEvents 有两种选择:通过设置 SetWinEventHook 函数的最后一个参数来确定是在上下文之外还是之内监视。如果是在上下文之外,不需要额外的DLL,回调函数运行在目标进程之外。如果是在上下文之内,回调函数必须放在额外的DLL,并注入目标进程的地址空间。第二种方法写代码比较麻烦,但是运行效率高。

上一页  2 3 4 5 6 7 8 9  下一页

Tags:MS Active Accessibility

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接