如果 WM_COPY 失败,您可以尝试一些方法...
要伪造按键,您可以发送 WM_KEYDOWN 和 WM_KEYUP 消息。
但是,您在消息中发送了什么?如果您发送一个“c”,那么您无法在这些消息中通知应用程序 ctrl 也被按住。
您可以发送一个字符 0x03(这是 ctrl+c 实际生成的字符代码),但不能保证接收应用程序会将其解释为“ctrl+c”操作。
为什么它可能不起作用?接收应用程序可能...
- 忽略 WM_KEYDOWN 和 WM_KEYUP 并使用其他方式读取键盘(例如 GetAsyncKeyState 以查看某个键是否按下)
- 处理 WM_KEYDOWN 和/或 WM_KEYUP 消息,但查找“c”,然后使用 GetAsyncKeyState() 或类似方法来检测处理消息时 ctrl 是否关闭。
- 如果它没有输入焦点,它可能仍然会忽略这些消息,或者更糟的是,处理这些消息,就好像它们是通过输入焦点窗口接收的一样。
所以 - 试一试,但它可能不起作用。
或者,如果 SendInput 有效,那么您可以将输入焦点强制到正确的控件 SendInput,然后将输入焦点恢复到其先前的位置。
另一种方法(可能是最好的方法)是,如果它是您已知的对话框并且它包含静态文本字段,您可能只能在其上找到该子控件和 GetText(发送 WM_GETTEXT 消息),并避免使用剪贴板一点也不。(或者,如果您需要剪贴板上的文本,请像这样获取它,然后自己将其放在剪贴板上)。这将避免欺骗应用程序提供文本,并回退到标准的 Windows 行为。