我希望您使用SendMessage
或PostMessage
按下其他应用中的按钮
我有一个示例代码,通过获取Window Handle来执行此操作,但它不起作用
我还使用“WinDowse”获取所需信息。这是代码
private const uint BM_CLICK = 0x00F5;
private const uint WM_LBUTTONDOWN = 0x0201;
private const uint WM_LBUTTONUP = 0x0202;
private void PushOKButton(IntPtr ptrWindow)
{
WindowHandle = FindWindow(null, "Form1");
if (ptrWindow == IntPtr.Zero)
return;
IntPtr ptrOKButton = FindWindowEx(ptrWindow, IntPtr.Zero, "Button", "&Yes");
if (ptrOKButton == IntPtr.Zero)
return;
SendMessage(ptrOKButton, WM_LBUTTONDOWN, 0, 0);
SendMessage(ptrOKButton, WM_LBUTTONUP, 0, 0);
SendMessage(ptrOKButton, BM_CLICK, 0, 0);
}
c#中有一个Compelete Suloution?
答案 0 :(得分:0)
你有正确的总体思路。 总是有自动化的技巧。
按钮向下/向上是接近点击的原始动作的preatty,但不完全相同。 你会想要考虑
BM_Click是一个额外的win32消息,当鼠标点击一个按钮时发送 - 如果控件是单独使用它的正确类型,它是更短的方法,更容易。
我们已经做了一些努力来防止在外国应用程序的密码编辑中使用WM_GetText之类的东西,但要小心,根据目标应用程序,您可能也会遇到问题。
不幸的是,我现在没有C#示例代码。
也许您可能会考虑AutoIT以节省一些时间。
答案 1 :(得分:-1)
以下是使用win32 API驱动鼠标的示例 - 实际上用于拖放区域的选择,但您可以将按钮更改为鼠标按下/向上按钮。
POINT p;
BOOL cursorPosGetSuccessful = GetCursorPos(&p);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, horA, verA, NULL, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, NULL, 0);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, horB, verB, NULL, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, NULL, 0);
if (cursorPosGetSuccessful)// put the mouse back to roughly where it used to be before the scan.
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, p.x, p.y, NULL, 0);