C#学习教程:使用PostMessage / SendMessage将密钥发送到c#IE WebBrowser分享


使用PostMessage / SendMessage将密钥发送到c#IE WebBrowser

我试图在C#webbrowser控件和选项卡中自动填充值,然后输入并向上和向下按以在字段中移动。

这是我的PInvoke和包装函数。 我使用Spy ++在Internet Explorer中获取这些内容。 有人看到我的定义有什么问题吗? 我想使用Send和Post消息而不是SendInput,因为我不想要关注窗口…

[DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); const uint WM_KEYDOWN = 0x0100; const uint WM_KEYUP = 0x0101; const uint WM_CHAR = 0x0102; const int VK_TAB = 0x09; const int VK_ENTER = 0x0D; const int VK_UP = 0x26; const int VK_DOWN = 0x28; const int VK_RIGHT = 0x27; //According to SPY++ in IE //ENTER key is // P KEYDOWN // P CHAR // S CHAR // P KEY_UP //TAB key is // P KEYDOWN // P KEYUP //DOWN, UP, RIGHT, LEFT is // P KEYDOWN // S KEYDOWN // P KEYUP //Letters is // P KEYDOWN // S KEYDOWN // P CHAR // S CHAR // P KEYUP private void SendEnter() { PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)VK_ENTER, IntPtr.Zero); PostMessage(this.Handle, WM_CHAR, (IntPtr)VK_ENTER, IntPtr.Zero); SendMessage(this.Handle, WM_CHAR, (IntPtr)VK_ENTER, IntPtr.Zero); PostMessage(this.Handle, WM_KEYUP, (IntPtr)VK_ENTER, IntPtr.Zero); } private void SendTab() { PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)VK_TAB, IntPtr.Zero); PostMessage(this.Handle, WM_KEYUP, (IntPtr)VK_TAB, IntPtr.Zero); } private void SendArrowKey(int key) { PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)key, IntPtr.Zero); SendMessage(this.Handle, WM_KEYDOWN, (IntPtr)key, IntPtr.Zero); PostMessage(this.Handle, WM_KEYUP, (IntPtr)key, IntPtr.Zero); } private void SendChar(int key) { //Keydown wParam values are 0x020 less than WM_CHAR wParam PostMessage(this.Handle, WM_KEYDOWN, (IntPtr)(key - 0x020), IntPtr.Zero); SendMessage(this.Handle, WM_KEYDOWN, (IntPtr)(key - 0x020), IntPtr.Zero); PostMessage(this.Handle, WM_CHAR, (IntPtr)key, IntPtr.Zero); SendMessage(this.Handle, WM_CHAR, (IntPtr)key, IntPtr.Zero); PostMessage(this.Handle, WM_KEYUP, (IntPtr)(key - 0x020), IntPtr.Zero); } 

首先,我认为你拥有WebBrownser文档的句柄:

  IntPtr pControl; IntPtr pControl2; pControl = FindWindowEx(WebWindow.Handle, IntPtr.Zero, "Shell Embedding", IntPtr.Zero); pControl = FindWindowEx(pControl, IntPtr.Zero, "Shell DocObject View", IntPtr.Zero); pControl = FindWindowEx(pControl, IntPtr.Zero, "Internet Explorer_Server", IntPtr.Zero); pControl2 = FindWindowEx(pControl, IntPtr.Zero, "MacromediaFlashPlayerActiveX", IntPtr.Zero); if (pControl2 != IntPtr.Zero) pControl = pControl2; break; return pControl; 

使用该句柄发送您的密钥消息。

我个人做的是,我在盒子的位置发出一个点击,然后发送我的钥匙

  PostMessage(pControl , (uint)MouseMessages.WM_MOUSEMOVE, 0, MAKELPARAM(xX, xY)); PostMessage(pControl , (uint)MouseMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(xX, xY)); PostMessage(pControl , (uint)MouseMessages.WM_LBUTTONUP, 0, MAKELPARAM(xX, xY)); 

与MAKELPARAM这样:

  private int MAKELPARAM(int p, int p_2) { return ((p_2 << 16) | (p & 0xFFFF)); } 

我看到非flash文档上的工作发现的一件事是发送WM_CHAR只能工作。

有了这一切,你不必把焦点放在窗户上

我希望它有帮助:)

上述就是C#学习教程:使用PostMessage / SendMessage将密钥发送到c#IE WebBrowser分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031627.html

(0)
上一篇 2022年1月14日 上午1:43
下一篇 2022年1月14日 上午1:48

精彩推荐

发表回复

您的电子邮箱地址不会被公开。