我们正在尝试处理 C# 中的文件下载对话框(来自 IE)。
我们要做的是通过向窗口发送消息(Home、CTRL-A、Backspace)来清除对话框中的文本框。
我在这里粘贴了一些代码,但不是全部,但似乎没有触发 CTRL 键(我没有看到突出显示的实际文本):
// HOME DOWN
NativeMethods.SendMessage(new HandleRef(null, _hwnd), NativeMethods.WM_KEYDOWN, new IntPtr(0x24), IntPtr.Zero);
Thread.Sleep(1000);
// HOME UP
NativeMethods.SendMessage(new HandleRef(null, _hwnd), NativeMethods.WM_KEYUP, new IntPtr(0x24), IntPtr.Zero);
Thread.Sleep(1000);
// CTRL DOWN
NativeMethods.SendMessage(new HandleRef(null, _hwnd), NativeMethods.WM_KEYDOWN, new IntPtr(0x11), IntPtr.Zero);
Thread.Sleep(1000);
// END DOWN
NativeMethods.SendMessage(new HandleRef(null, _hwnd), NativeMethods.WM_KEYDOWN, new IntPtr(0x41), IntPtr.Zero);
Thread.Sleep(1000);
// END UP
NativeMethods.SendMessage(new HandleRef(null, _hwnd), NativeMethods.WM_KEYUP, new IntPtr(0x41), IntPtr.Zero);
Thread.Sleep(1000);
// CTRL UP
NativeMethods.SendMessage(new HandleRef(null, _hwnd), NativeMethods.WM_KEYUP, new IntPtr(0x11), IntPtr.Zero);
Thread.Sleep(5);
将 SendMessage 函数与 WM_KEYUP 和 WM_KEYDOWN 消息结合使用时,我有什么遗漏吗?
SendMessage 函数声明如下:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);