C# 无法从C使用P/INVOKE发送VK_移位#
我们正在尝试处理C#(来自IE)中的文件下载对话框 我们要做的是通过向窗口发送消息(Home、CTRL-A、Backspace),清除对话框中的文本框 我在这里粘贴了一些代码(不是全部),但似乎没有触发CTRL键(我看不到实际文本被突出显示): 当使用SendMessage函数与WM_KEYUP和WM_KEYDOWN消息结合使用时,我是否遗漏了什么 SendMessage函数声明如下:C# 无法从C使用P/INVOKE发送VK_移位#,c#,.net,winapi,interop,C#,.net,Winapi,Interop,我们正在尝试处理C#(来自IE)中的文件下载对话框 我们要做的是通过向窗口发送消息(Home、CTRL-A、Backspace),清除对话框中的文本框 我在这里粘贴了一些代码(不是全部),但似乎没有触发CTRL键(我看不到实际文本被突出显示): 当使用SendMessage函数与WM_KEYUP和WM_KEYDOWN消息结合使用时,我是否遗漏了什么 SendMessage函数声明如下: [DllImport("user32.dll", CharSet = CharSet.Auto, SetLas
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
请尝试API函数。不要使用
SendMessage()
模拟输入。使用带有适当消息的SendInput()
或SendMessage()
来实际清除文本(WM_SETTEXT
)。我们尝试过使用WM_SETTEXT,但与IE下载对话框结合使用,似乎设置文本实际上并不影响对话框(它将文件保存到与编辑框设置的位置不同的位置)。使用键发送可以很好地工作。发布的代码有很多地方你都做得不对,击键是发布的,而不是发送的,你不能用PostMessage控制另一个进程的修改器键状态。但是要注意,IE下载确认对话框是特殊的。它是一个引人注目的攻击目标,不能被搞乱。你为什么要这样做通过在IE上插入关键消息从internet下载?不用调用beast就可以通过编程方式进行下载。我同意@HansPassant-您可能不应该这样做。“此功能已被取代。请改用SendInput。”@lysergic acid调用keybd_事件
比调用SendInput
容易得多。
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);