ç±»åï¼JuBingHelper.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
namespace Upload4GW.Helper
{
public enum MouseEventFlags
{
Move = 0x0001, //移å¨é¼ æ
LeftDown = 0x0002,//模æé¼ æ å·¦é®æä¸
LeftUp = 0x0004,//模æé¼ æ å·¦é®æ¬èµ·
RightDown = 0x0008,//é¼ æ å³é®æä¸
RightUp = 0x0010,//é¼ æ å³é®æ¬èµ·
MiddleDown = 0x0020,//é¼ æ ä¸é®æä¸
MiddleUp = 0x0040,//ä¸é®æ¬èµ·
Wheel = 0x0800,
Absolute = 0x8000//æ 示æ¯å¦éç¨ç»å¯¹åæ
}
class JuBingHelper
{ //使ç¨æ¹æ³
//æ§ä»¶å½æ°.çªå£æå¨(this.button1,this);
//æ§ä»¶å½æ°.æ§ä»¶æå¨(this.button2);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
/// <summary>
/// //æ ¹æ®åæ ç¹è·åå¥æ
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point p);
/// <summary>
/// //è·åçªå£æ é¢
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lpString"></param>
/// <param name="nMaxCount"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hwnd, StringBuilder lpString, int nMaxCount);
/// <summary>
/// //è·åå¥æç±»å
/// </summary>
/// <param name="hwnd"></param>
/// <param name="s"></param>
/// <param name="nMaxCount"></param>
[DllImport("user32.dll")]
private static extern void GetClassName(IntPtr hwnd, StringBuilder s, int nMaxCount);
/// <summary>
/// //è·åå¥æç¶å¥æ
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern IntPtr GetParent(IntPtr hwnd);
/// <summary>
/// //设置ç¶å¥æ
/// </summary>
/// <param name="hwnd"></param>
/// <param name="cwnd"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern IntPtr SetParent(IntPtr hwnd, IntPtr cwnd);
/// <summary>
/// //è·åå¥æç©å½¢ä½ç½®ä¿¡æ¯
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lpRECT"></param>
/// <returns></returns>
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hwnd, ref RECT lpRECT); //è·åå¥æç©å½¢ä½ç½®ä¿¡æ¯
[DllImport("User32")]
public extern static void SetCursorPos(int x, int y);
[DllImport("User32")]
public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
[StructLayout(LayoutKind.Sequential)]
public struct å¥æä¿¡æ¯ç»æä½
{
public Rectangle ä½ç½®;
public string å¯ææ¾ç¤º;
public string ç±»å;
public List<IntPtr> ç¶çªå¥æ;
public List<string> ç¶çªæ é¢;
public List<string> ç¶çªç±»å;
}
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
public static å¥æä¿¡æ¯ç»æä½ è·åå¥æä¿¡æ¯(IntPtr å¥æ)
{
å¥æä¿¡æ¯ç»æä½ xinxi = new å¥æä¿¡æ¯ç»æä½();
xinxi.ç¶çªå¥æ = new List<IntPtr>();
xinxi.ç¶çªæ é¢ = new List<string>();
xinxi.ç¶çªç±»å = new List<string>();
RECT weizhi = new RECT();
GetWindowRect(å¥æ, ref weizhi);
xinxi.ä½ç½®.X = weizhi.Left;
xinxi.ä½ç½®.Y = weizhi.Top;
xinxi.ä½ç½®.Width = weizhi.Right - weizhi.Left;
xinxi.ä½ç½®.Height = weizhi.Bottom - weizhi.Top;
StringBuilder s = new StringBuilder(512);
string ss = GetTextBoxInfo(å¥æ);
xinxi.å¯ææ¾ç¤º = ss.ToString();
GetClassName(å¥æ, s, s.Capacity);
xinxi.ç±»å = s.ToString();
IntPtr f1 = GetParent(å¥æ);
IntPtr h;
while (f1 != IntPtr.Zero)
{
xinxi.ç¶çªå¥æ.Add(f1);
StringBuilder s1 = new StringBuilder(512);
GetWindowText(f1, s1, s1.Capacity);
xinxi.ç¶çªæ é¢.Add(s1.ToString());
GetClassName(f1, s1, s1.Capacity);
xinxi.ç¶çªç±»å.Add(s1.ToString());
h = f1;
f1 = GetParent(h);
}
return xinxi;
}
/// <summary>
/// //寻æ¾ç®æ è¿ç¨çªå£
/// </summary>
/// <param name="lpClassName"></param>
/// <param name="lpWindowName">çªä½å称</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
///hwndparent为0表示æ¡é¢ä¸ºç¶ï¼hwndchildafter为null表示ä»ç¬¬ä¸ä¸ªå¼å§ï¼lpwindowname为null表示æ¥å¹é
该项
/// </summary>
/// <param name="hwndParent"></param>
/// <param name="hwndChildAfter"></param>
/// <param name="lpClassName"></param>
/// <param name="lpWindowName"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
/// <summary>
/// 设置è¿ç¨çªå£å°æå
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
//模æé®çäºä»¶
[DllImport("USER32.DLL")]
public static extern void keybd_event(Byte bVk, Byte bScan, Int32 dwFlags, Int32 dwExtraInfo);
public delegate bool CallBack(IntPtr hwnd, int lParam);
[DllImport("USER32.DLL")]
public static extern int EnumChildWindows(IntPtr hWndParent, CallBack lpfn, int lParam);
//ç»CheckBoxåéä¿¡æ¯
[DllImport("USER32.DLL", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, UInt32 wMsg, int wParam, int lParam);
/// <summary>
/// ç»Textåéä¿¡æ¯
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("USER32.DLL", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, string lParam);
[DllImport("USER32.DLL")]
public static extern IntPtr GetWindow(IntPtr hWnd, int wCmd);
/// <summary>
/// 讲信æ¯åéç»å¥æ对åºç空é´ä¸
/// </summary>
/// <param name="hWnd"></param>
/// <param name="Msg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, StringBuilder lParam);
/// <summary>
/// åéæä½ä¿¡æ¯
/// </summary>
/// <param name="hwnd">ç´¢è¦æä½ç©ºé´çå¥æ</param>
/// <param name="Msg">æä½ç±»å</param>
/// <param name="wParam">ç´¢è¦æä½ç©ºé´çå¥æ</param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
public static extern int SendMessageA(IntPtr hwnd, int Msg, IntPtr wParam, int lParam);
/// <summary>
/// 设置空é´ç¦ç¹
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern IntPtr SetFocus(IntPtr hWnd);
/// <summary>
/// è·å å¥æ对åºæ§ä»¶çå¼
/// </summary>
/// <param name="hWnd32"></param>
/// <returns></returns>
public static string GetTextBoxInfo(IntPtr hWnd32)
{
const int WM_GETTEXT = 0x000D;
IntPtr wParam = new IntPtr(100);
StringBuilder ret = new StringBuilder(256);
SendMessage(hWnd32, WM_GETTEXT, wParam, ret);
return ret.ToString();
}
/// <summary>
/// 设置 å¥æ对åºæ§ä»¶çå¼
/// </summary>
/// <param name="hWnd32">å¥æçå¼</param>
/// <param name="result">ç´¢è¦ä¼ è¾çå¼</param>
/// <returns></returns>
public static bool SetTextBoxInfo(IntPtr hWnd32, string result)
{
if (hWnd32 == IntPtr.Zero)
{
return false;
}
const int WM_SETTEXT = 0x000C;
IntPtr wParam = new IntPtr(100);
StringBuilder ret = new StringBuilder(256);
SendMessage(hWnd32, WM_SETTEXT, IntPtr.Zero, result);
return true;
}
/// <summary>
/// //æ¥æ¾æ§ä»¶å¥æ
/// </summary>
/// <param name="parent"></param>
/// <param name="classname"></param>
/// <param name="text"></param>
/// <returns></returns>
public static IntPtr Findview(IntPtr parent, string classname, string text)
{
IntPtr hwndtemp = FindWindowEx(parent, IntPtr.Zero, classname, text);
if (hwndtemp == IntPtr.Zero)
{
List<IntPtr> allchild = Findallchild(parent);
for (int i = 0; i < allchild.Count; i++)
{
å¥æä¿¡æ¯ç»æä½ ju = è·åå¥æä¿¡æ¯(allchild[i]);
if (ju.ç±»å == classname && ju.å¯ææ¾ç¤º == text)
{
return allchild[i];
}
}
}
return hwndtemp;
}
/// <summary>
/// æ¥æ¾åå
容
/// </summary>
/// <param name="parent"></param>
/// <returns></returns>
public static IntPtr Findview(IntPtr parent)
{
IntPtr hwndtemp = FindWindowEx(parent, IntPtr.Zero, null, null);
return hwndtemp;
}
/// <summary>
/// æ¥æ¾ä¸çº§åæ§ä»¶å¥æ
/// </summary>
/// <param name="parent"></param>
/// <returns></returns>
public static List<IntPtr> Findchild(IntPtr parent)
{
List<IntPtr> allchild = new List<IntPtr>();
IntPtr hwnd = FindWindowEx(parent, IntPtr.Zero, null, null);
while (hwnd != IntPtr.Zero)
{
allchild.Add(hwnd);
hwnd = FindWindowEx(parent, hwnd, null, null);
}
return allchild;
}
/// <summary>
/// //æ¥æ¾ææåæ§ä»¶-广度éå
/// </summary>
/// <param name="parent"></param>
/// <returns></returns>
public static List<IntPtr> Findallchild(IntPtr parent)
{
List<IntPtr> allchild = new List<IntPtr>();
allchild.Add(parent); //第ä¸ä¸ªæ·»å ç¶å¥æï¼æååå é¤
for (int i = 0; i < allchild.Count; i++)
{
IntPtr patenttemp = allchild[i];
IntPtr hwnd = FindWindowEx(patenttemp, IntPtr.Zero, null, null);
while (hwnd != IntPtr.Zero)
{
allchild.Add(hwnd);
hwnd = FindWindowEx(patenttemp, hwnd, null, null);
}
}
allchild.RemoveAt(0);
return allchild;
}
/// <summary>
/// æ¥æ¾çªå£
/// </summary>
/// <param name="classname"></param>
/// <param name="windowname"></param>
/// <returns></returns>
public static IntPtr Findform(string classname, string windowname)
{
IntPtr hwnd = FindWindow(classname, windowname);
return hwnd;
}
/// <summary>
/// 模æé¼ æ å·¦é®åå»
/// </summary>
/// <param name="hwnd">ä¼ éææä½çå¥æ</param>
/// <returns></returns>
public static bool ClickControl(IntPtr hwnd)
{
if (hwnd == IntPtr.Zero)
{
return false;
}
SendMessageA(hwnd, 0x0201, hwnd, 0);
SendMessageA(hwnd, 0x0202, hwnd, 0);
return true;
}
public static void ButtonClick(String xPos, String yPos)
{
int x = Int32.Parse(xPos);
int y = Int32.Parse(yPos);
SetCursorPos(x, y);
mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), x, y, 0, IntPtr.Zero);
mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), x, y, 0, IntPtr.Zero);
}
/// <summary>
/// æ ¹æ®çªä½æ é¢è·åçªä½å
容
/// </summary>
/// <param name="captionName"></param>
/// <returns></returns>
public static String GetWindowContentByCaptionName(String captionName)
{
DateTime d1 = DateTime.Now;
try
{
IntPtr systemInfo = IntPtr.Zero;
while (systemInfo == IntPtr.Zero)
{
DateTime d2 = DateTime.Now;
TimeSpan timeDiff = d2 - d1;
if (timeDiff.Seconds > 3)
{
return "";
}
Thread.Sleep(10);
systemInfo = FindWindow(null, captionName);
}
List<IntPtr> ptrList = JuBingHelper.Findchild(systemInfo);
if (ptrList.Count == 3)
{
StringBuilder sb = new StringBuilder();
JuBingHelper.å¥æä¿¡æ¯ç»æä½ jubingInfo = JuBingHelper.è·åå¥æä¿¡æ¯(ptrList[2]);
return jubingInfo.å¯ææ¾ç¤º;
}
}
catch { }
return "";
}
/// <summary>
///
/// </summary>
/// <param name="captionName"></param>
/// <param name="timeout">è¶
æ¶æ¶é´</param>
/// <returns></returns>
public static IntPtr GetWindowAddress(String captionName,int timeout)
{
DateTime d1 = DateTime.Now;
try
{
IntPtr systemInfo = IntPtr.Zero;
while (systemInfo == IntPtr.Zero)
{
DateTime d2 = DateTime.Now;
TimeSpan timeDiff = d2 - d1;
if (timeDiff.Seconds > timeout)
{
return IntPtr.Zero;
}
LogHelper.Info("find...:"+timeDiff.Seconds);
Thread.Sleep(10);
systemInfo = FindWindow(null, captionName);
}
return systemInfo;
}
catch { }
return IntPtr.Zero;
}
/// <summary>
/// æ ¹æ®çªä½æ é¢è·åçªä½å
容
/// </summary>
/// <param name="captionName"></param>
/// <returns></returns>
public static String GetWindowContentByAddress(IntPtr address)
{
DateTime d1 = DateTime.Now;
try
{
List<IntPtr> ptrList = JuBingHelper.Findchild(address);
LogHelper.Info("count:"+ptrList.Count);
if (ptrList.Count == 3)
{
StringBuilder sb = new StringBuilder();
JuBingHelper.å¥æä¿¡æ¯ç»æä½ jubingInfo = JuBingHelper.è·åå¥æä¿¡æ¯(ptrList[2]);
return jubingInfo.å¯ææ¾ç¤º;
}
}
catch { }
return "";
}
/// <summary>
/// æ ¹æ®çªä½æ é¢å¤ææ¯å¦åå¨çªä½
/// </summary>
/// <param name="captionName"></param>
/// <returns></returns>
public static Boolean IsExistWindow(String captionName)
{
DateTime d1 = DateTime.Now;
try
{
IntPtr systemInfo = IntPtr.Zero;
while (systemInfo == IntPtr.Zero)
{
DateTime d2 = DateTime.Now;
TimeSpan timeDiff = d2 - d1;
if (timeDiff.Seconds > 2)
{
return false;
}
Thread.Sleep(10);
systemInfo = FindWindow(null, captionName);
}
return true;
}
catch { }
return false;
}
public static void CloseWindowByAddress(IntPtr address)
{
SendMessage(address, 0x0010, IntPtr.Zero, null);
Thread.Sleep(PublicConfig.æ¶é´_ç¹å»äºä»¶çå¾
);
}
/// <summary>
/// æ¯å¦åå¨Windows
/// </summary>
/// <param name="className"></param>
/// <param name="lpclassName"></param>
/// <returns></returns>
public static Boolean IsExistWindow(String className,String lpclassName)
{
DateTime d1 = DateTime.Now;
IntPtr gwMainForm = IntPtr.Zero;
while (gwMainForm == IntPtr.Zero)
{
DateTime d2 = DateTime.Now;
TimeSpan timeDiff = d2 - d1;
if (timeDiff.Seconds > 2)
{
return false;
}
Thread.Sleep(10);
gwMainForm = FindWindow(className, null);
}
IntPtr panel = FindWindowEx(gwMainForm, IntPtr.Zero, lpclassName, null);
return !(panel == IntPtr.Zero);
}
}
}