278 lines
10 KiB
C#
278 lines
10 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Data;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
using System.Threading;
|
|||
|
|
|
|||
|
|
namespace testautoinput
|
|||
|
|
{
|
|||
|
|
public partial class Form1 : Form
|
|||
|
|
{
|
|||
|
|
public Form1()
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void btn_test_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
Process[] procs = Process.GetProcesses();
|
|||
|
|
//StreamWriter sw = new StreamWriter(Application.StartupPath + "\\" + Guid.NewGuid().ToString("N") + ".txt", true, Encoding.Default);
|
|||
|
|
Process proc_EpiRootG4 = null;
|
|||
|
|
foreach (var p in procs)
|
|||
|
|
{
|
|||
|
|
if (p.ProcessName == "EpiRootG4")
|
|||
|
|
{
|
|||
|
|
proc_EpiRootG4 = p;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (proc_EpiRootG4 == null)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("疫苗接种程序没有启用!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
//MessageBox.Show( proc_EpiRootG4.MainWindowTitle);
|
|||
|
|
if (string.IsNullOrEmpty(proc_EpiRootG4.MainWindowTitle))
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("没有找到疫苗接种主程序");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
NativeRECT rect = new NativeRECT();
|
|||
|
|
|
|||
|
|
GetWindowRect(proc_EpiRootG4.MainWindowHandle, out rect);
|
|||
|
|
//MessageBox.Show(rect.left + "," + rect.top + "," + rect.right + "," + rect.bottom);
|
|||
|
|
SetCursorPos(rect.left + 311, rect.top + 107);
|
|||
|
|
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
keybd_event(Keys.D3, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D7, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D1, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D4, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D0, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D2, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D0, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D4, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D0, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D1, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D2, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D0, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D1, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D9, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D0, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D1, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D7, 0, 0, 0);
|
|||
|
|
keybd_event(Keys.D2, 0, 0, 0);
|
|||
|
|
Thread.Sleep(1500);
|
|||
|
|
SetCursorPos(rect.left + 416, rect.top + 350);
|
|||
|
|
Thread.Sleep(300);
|
|||
|
|
mouse_event(MouseEventFlag.RightDown, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
mouse_event(MouseEventFlag.RightUp, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
Thread.Sleep(300);
|
|||
|
|
SetCursorPos(rect.left + 520, rect.top + 497);
|
|||
|
|
Thread.Sleep(300);
|
|||
|
|
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
Thread.Sleep(1000);
|
|||
|
|
keybd_event(Keys.Enter, 0, 0, 0);
|
|||
|
|
Thread.Sleep(1000);
|
|||
|
|
IntPtr jzck = IntPtr.Zero;
|
|||
|
|
int counttime = 0;
|
|||
|
|
while (true)
|
|||
|
|
{
|
|||
|
|
Application.DoEvents();
|
|||
|
|
counttime++;
|
|||
|
|
jzck = FindWindow("TetChildBespShot", "受种者接种处理");
|
|||
|
|
if (jzck == IntPtr.Zero)
|
|||
|
|
{
|
|||
|
|
Thread.Sleep(100);
|
|||
|
|
if(counttime <= 300)
|
|||
|
|
continue;
|
|||
|
|
else
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (jzck == IntPtr.Zero)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("没有找到受种者接种处理界面!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetWindowRect(jzck, out rect);
|
|||
|
|
//MessageBox.Show(rect.left + "," + rect.top + "," + rect.right + "," + rect.bottom);
|
|||
|
|
//EnumChildWindow ecw = new EnumChildWindow(EnumChild);
|
|||
|
|
//EnumChildWindows(jzck, ecw, "");
|
|||
|
|
Thread.Sleep(300);
|
|||
|
|
SetCursorPos(rect.left + 970, rect.top + 313);
|
|||
|
|
Thread.Sleep(300);
|
|||
|
|
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
mouse_event( MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
//mouse_event(, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
Thread.Sleep(500);
|
|||
|
|
SetCursorPos(rect.left + 948, rect.top + 361);
|
|||
|
|
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
mouse_event( MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
//mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
|
|||
|
|
}
|
|||
|
|
//371402040120190172
|
|||
|
|
//SendKeys.Send("{3}");
|
|||
|
|
/*
|
|||
|
|
while (true)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
EnumChildWindow ecw = new EnumChildWindow(EnumChild);
|
|||
|
|
EnumChildWindows(proc_EpiRootG4.Handle, ecw, "");
|
|||
|
|
|
|||
|
|
// GetWindowRect(mainHwnd.ToInt32(), ref rectMain);
|
|||
|
|
int pid = 0;
|
|||
|
|
GetWindowThreadProcessId(mainHwnd, out pid);
|
|||
|
|
//rectMain.Height - rectMain.Y < 300说明是登录窗口
|
|||
|
|
|
|||
|
|
waitTime++;
|
|||
|
|
if((int)mainHwnd!=0)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show(mainHwnd.ToString());
|
|||
|
|
}
|
|||
|
|
//30秒没打开程序,登录失败
|
|||
|
|
if (waitTime >= 30)
|
|||
|
|
return ;
|
|||
|
|
Thread.Sleep(1000);
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 用于枚举子窗体是的委托
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="WindowHandle">窗体句柄</param>
|
|||
|
|
/// <param name="num">自定义</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public delegate bool EnumChildWindow(IntPtr WindowHandle, string num);
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取指定窗体的所有子窗体
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="WinHandle">窗体句柄</param>
|
|||
|
|
/// <param name="ec">回调委托</param>
|
|||
|
|
/// <param name="name">自定义</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
[DllImport("User32.dll")]
|
|||
|
|
public static extern int EnumChildWindows(IntPtr WinHandle, EnumChildWindow ecw, string name);
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取指定窗体的标题
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="WinHandle">窗体句柄</param>
|
|||
|
|
/// <param name="Title">缓冲区取用于存储标题</param>
|
|||
|
|
/// <param name="size">缓冲区大小</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
[DllImport("User32.dll")]
|
|||
|
|
public static extern int GetWindowText(IntPtr WinHandle, StringBuilder Title, int size);
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取窗体类型
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="WinHandle">窗体句柄</param>
|
|||
|
|
/// <param name="Type">类型</param>
|
|||
|
|
/// <param name="size">缓冲区大小</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
public static extern int GetClassName(IntPtr WinHandle, StringBuilder Type, int size);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 根据句柄获得进程id值
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="handle">句柄</param>
|
|||
|
|
/// <param name="pid"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
[DllImport("user32")]
|
|||
|
|
private static extern int GetWindowThreadProcessId(IntPtr handle, out int pid);
|
|||
|
|
IntPtr mainHwnd = IntPtr.Zero;//登录窗口句柄
|
|||
|
|
string typeName = "山东省预防接种信息管理系统-门诊";//启动程序的窗口标题
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 枚举窗体
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="handle"></param>
|
|||
|
|
/// <param name="num"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
private bool EnumChild(IntPtr handle, string num)
|
|||
|
|
{
|
|||
|
|
StringBuilder type = new StringBuilder();
|
|||
|
|
//StringBuilder type = new StringBuilder();
|
|||
|
|
type.Length = 100;
|
|||
|
|
//type.Length = 100;
|
|||
|
|
|
|||
|
|
//GetWindowText(handle, title, 100);//取标题
|
|||
|
|
GetClassName(handle, type, 100);//取类型
|
|||
|
|
MessageBox.Show(type.ToString());
|
|||
|
|
|
|||
|
|
if (type.ToString() == typeName)
|
|||
|
|
{
|
|||
|
|
mainHwnd = handle;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
|
|||
|
|
public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
|
|||
|
|
|
|||
|
|
[StructLayout(LayoutKind.Sequential)]
|
|||
|
|
struct NativeRECT
|
|||
|
|
{
|
|||
|
|
public int left;
|
|||
|
|
public int top;
|
|||
|
|
public int right;
|
|||
|
|
public int bottom;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//将枚举作为位域处理
|
|||
|
|
[Flags]
|
|||
|
|
enum MouseEventFlag : uint //设置鼠标动作的键值
|
|||
|
|
{
|
|||
|
|
Move = 0x0001, //发生移动
|
|||
|
|
LeftDown = 0x0002, //鼠标按下左键
|
|||
|
|
LeftUp = 0x0004, //鼠标松开左键
|
|||
|
|
RightDown = 0x0008, //鼠标按下右键
|
|||
|
|
RightUp = 0x0010, //鼠标松开右键
|
|||
|
|
MiddleDown = 0x0020, //鼠标按下中键
|
|||
|
|
MiddleUp = 0x0040, //鼠标松开中键
|
|||
|
|
XDown = 0x0080,
|
|||
|
|
XUp = 0x0100,
|
|||
|
|
Wheel = 0x0800, //鼠标轮被移动
|
|||
|
|
VirtualDesk = 0x4000, //虚拟桌面
|
|||
|
|
Absolute = 0x8000
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//设置鼠标位置
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
static extern bool SetCursorPos(int X, int Y);
|
|||
|
|
|
|||
|
|
//设置鼠标按键和动作
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
static extern void mouse_event(MouseEventFlag flags, int dx, int dy,
|
|||
|
|
uint data, UIntPtr extraInfo); //UIntPtr指针多句柄类型
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
static extern IntPtr FindWindow(string strClass, string strWindow);
|
|||
|
|
|
|||
|
|
//该函数获取一个窗口句柄,该窗口雷鸣和窗口名与给定字符串匹配 hwnParent=Null从桌面窗口查找
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter,
|
|||
|
|
string strClass, string strWindow);
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
static extern bool GetWindowRect(IntPtr hwnd, out NativeRECT rect);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|