问题描述
我正在使用 SendKeys
向程序发送击键。
这是我的代码:
If whandle <> 0 Then
User32.SetForegroundWindow(whandle)
System.Windows.Forms.SendKeys.Send("+")
End If
(我也试过 SendWait()
而不是 Send()
)
这是 Spy++ 显示的我的窗口层次结构:
虽然我可以通过标题找到窗口句柄并使用 User32.findwindowex
循环遍历子对象,但在调试时我只输入 spy++ 所示的窗口句柄(从十六进制转换为十进制),我发现:
所以我想我有以下问题之一:
- 我在窗口和子窗口上做错了(我真的不认为这会发生,因为我尝试了 Spy++ 显示的所有句柄)。
- SendKey("+") 与在窗口处于活动状态时按下“+”键并不完全相同,并且存在一些差异。
调用 User32.SetForegroundWindow(whandle)
后,如果我真的按下了“+”键,就会出现所需的效果,即放大,但不是在我的程序执行 SendKeys
时。我还尝试使用其他生成命令的键,例如 Q 或 A(所有这些都是简单的键和字母)。
解决方法
来自MS Docs
加号 (+)、脱字符 (^)、百分号 (%)、波浪号 (~) 和 括号 () 对 SendKeys 有特殊意义。指定其中之一 这些字符,将其括在大括号 ({}) 中。例如,到 指定加号,使用“{+}”
System.Windows.Forms.SendKeys.Send("{+}")