这个网页
http://act.vip.qq.com/game/webgame/index.html?ADUIN=85809719&ADSESSION=1282959104&ADTAG=CLIENT.QQ.3007_.0#不知道哪位高手知道执行这个页面下的兑换是执行了什么函数阿?我想写个c#程序一直执行这个兑换,人工点不够快被抢光了。
我用invokemember("click")但是没用,分析数据包麻烦,想问问怎么用c#来写模拟点击兑换按钮的程序
http://act.vip.qq.com/game/webgame/index.html?ADUIN=85809719&ADSESSION=1282959104&ADTAG=CLIENT.QQ.3007_.0#不知道哪位高手知道执行这个页面下的兑换是执行了什么函数阿?我想写个c#程序一直执行这个兑换,人工点不够快被抢光了。
我用invokemember("click")但是没用,分析数据包麻烦,想问问怎么用c#来写模拟点击兑换按钮的程序
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using mshtml;namespace HwndTest
{
public static class Win32API
{
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern IntPtr SendMessageTimeout(
IntPtr hWnd,
uint Msg,
UIntPtr wParam,
IntPtr lParam,
SendMessageTimeoutFlags fuFlags,
uint uTimeout,
out UIntPtr lpdwResult); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr windowHandle,
uint Msg,
IntPtr wParam,
IntPtr lParam,
SendMessageTimeoutFlags flags,
uint timeout,
out IntPtr result); [DllImport("oleacc.dll", PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
static extern object ObjectFromLresult(UIntPtr lResult,
[MarshalAs(UnmanagedType.LPStruct)] Guid refiid, IntPtr wParam); [DllImport("oleacc.dll", PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
static extern object ObjectFromLresult(IntPtr lResult,
[MarshalAs(UnmanagedType.LPStruct)] Guid refiid, IntPtr wParam); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); /// <summary>
/// 根据类名称和窗口名称查找窗口
/// </summary>
/// <param name="lpClassName">窗口类名称</param>
/// <param name="lpWindowName">窗口标题名称</param>
/// <returns>窗口句柄</returns>
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); /// <summary>
/// 根据标题查找窗口,第一个参数必须为IntPtr.Zero
/// </summary>
/// <param name="ZeroOnly">必须为空</param>
/// <param name="lpWindowName">窗口标题名称</param>
/// <returns>窗口句柄</returns>
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); [DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, IntPtr windowTitle); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetWindowTextLength(IntPtr hWnd); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumWindows(EnumWindowsProc1 lpEnumFunc, ref SearchData data); [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, ref IntPtr lParam); [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam); [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, ref IntPtr lParam); /// <summary>
/// 获取第一个IE窗口
/// </summary>
/// <returns>窗口句柄</returns>
public static IntPtr FindIEWindow()
{
return FindWindow("IEFrame", null);
} /// <summary>
/// 获取IE窗口
/// </summary>
/// <param name="title">窗口标题</param>
/// <returns>窗口句柄</returns>
public static IntPtr FindIEWindow(string title)
{
return FindWindow("IEFrame", title);
} /// <summary>
/// 根据标题获取窗口
/// </summary>
/// <param name="caption">标题</param>
/// <returns>指定标题的窗口句柄</returns>
public static IntPtr SearchForWindow(string caption)
{
return SearchForWindow(null, caption);
} /// <summary>
/// 根据标题获取窗口
/// </summary>
/// <param name="wndClass">窗口类名称</param>
/// <param name="caption">标题</param>
/// <returns>指定标题的窗口句柄</returns>
public static IntPtr SearchForWindow(string wndClass, string caption)
{
SearchData sd = new SearchData();
sd.hWnd = IntPtr.Zero;
sd.wndClass = wndClass;
sd.title = caption;
EnumWindows(EnumProc, ref sd);
return sd.hWnd;
} private static bool EnumProc(IntPtr hWnd, ref SearchData data)
{
StringBuilder sb;
if (data.wndClass != null)
{
sb = new StringBuilder(1024);
GetClassName(hWnd, sb, sb.Capacity);
if (!sb.ToString().StartsWith(data.wndClass))
return true;
} if (data.title != null)
{
sb = new StringBuilder(1024);
GetWindowText(hWnd, sb, sb.Capacity);
if (!sb.ToString().StartsWith(data.title))
return true;
}
data.hWnd = hWnd;
return false;
} public class SearchData
{
public string wndClass;
public string title;
public IntPtr hWnd;
} private delegate bool EnumWindowsProc1(IntPtr hWnd, ref SearchData data); /// <summary>
/// 获取HTML控件窗口
/// </summary>
/// <param name="hWnd">窗口标题</param>
/// <returns>HTML控件窗口句柄</returns>
public static IntPtr SearchForHtmlWindow(IntPtr hWnd)
{
IntPtr hWndChild = IntPtr.Zero;
EnumChildWindows(hWnd, new HwndTest.EnumWindowsProc(EnumChildProc), ref hWndChild);
return hWndChild;
} private static bool EnumChildProc(IntPtr hWnd, ref IntPtr lParam)
{
StringBuilder sb = new StringBuilder(1024);
GetClassName(hWnd, sb, sb.Capacity);
if (sb.ToString() == "Internet Explorer_Server")
{
lParam = hWnd;
return false;
}
return true;
} /// <summary>
/// 根据窗口标题获取HTML Document对象
/// </summary>
/// <param name="caption">窗口标题</param>
/// <returns>HTML Document对象</returns>
public static IHTMLDocument2 GetHtmlDocument(string caption)
{
IntPtr hWnd = SearchForWindow("IEFrame", caption);
if (hWnd.ToInt32() == 0) return null;
IntPtr hWndChild = SearchForHtmlWindow(hWnd);
uint uMsg = RegisterWindowMessage("WM_HTML_GETOBJECT");
IntPtr hRes;
SendMessageTimeout(hWndChild, uMsg, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, out hRes);
if (hRes.ToInt32() == 0) return null; IHTMLDocument2 doc = ObjectFromLresult(hRes, typeof(IHTMLDocument2).GUID, IntPtr.Zero) as IHTMLDocument2;
return doc;
}
} [Flags]
public enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0,
SMTO_BLOCK = 0x1,
SMTO_ABORTIFHUNG = 0x2,
SMTO_NOTIMEOUTIFNOTHUNG = 0x8
} public delegate bool EnumWindowsProc(IntPtr hWnd, ref IntPtr lParam);
}
示例代码IHTMLDocument2 doc = Win32API.GetHtmlDocument("IE窗口标题");
doc.parentWindow.execScript("要点击的按钮.click()", "javascript");
hb.GetElementById();//得到那个按钮然后写事件
处理一下点击,当然还要显示出验证码,手工填写.
这个 要点击的按钮.click()能这样写吗?按钮没有名字的啊,获得的id也是引用,难道能变成字符串?