首先我会选择一个可执行文件的路径,我还能设置一个初始账号,然后点击确定按钮 就会开始运行那个应用程序,然后实现在账号框中自动输入我设置的账号,在密码框中输入密码,然后点击确定,如果没有弹出异常对话框则算是成功,如果弹出异常对话框 ,则单击弹出的错误对话框,继续用我的代码输入下一个账号 和密码.觉得这个挺简单的,但我是一个新手 , 不知道做这个的思路,请各个高手给个详细的思路 ,提拔一下 ,谢谢了
调试欢乐多
用线程做+Invoke就可以实现!
tr.Start(); //启动线程public void ThreadConn() //你的线程
{
//在这个里面从数据库里面取出你的帐号和密码,例得到表datatable
foreach (DataRow dtRow in datatable.Rows)
{
//ThreadEndCallback是你线程的回调方法值用的
this.Invoke(new Action<DataRow>(ThreadEndCallback),dtRow);
}
}//ThreadEndCallback方法
public void ThreadEndCallback(DataRow dtrow)
{
textbox1.text=dtrow[0].Tostring(); //取出行中的第一列的帐号
textbox2.text=dtrow[1].Tostring(); //取出行中的第二列的密码
//下面就是你的登陆过程了
//这过程中,可能你要用Suspend把线程挂起来,线程就暂停运行,然后你就做登陆操作
//登陆操作完成后用Resume方法,在启动线程
}
http://topic.csdn.net/u/20080611/16/6A4FD985-BB59-40CB-97B0-E383B6158CA6.html
在读取数据库文件! 就ok! 了!
http://blog.csdn.net/Firestone2003/archive/2006/06/24/829316.aspx上次别人也有要我做这个,后来没时间,没做。
第一种思路:当你输入账号和密码并点击登录后,在一定时间内循环查询指定程序的消息窗口,可以实现。
//获取应用程序名称,可以得到指定程序的正确窗口和错误窗口的名字,是弹出窗口的那种,像QQ游戏账号信息输入错误,弹出的那种
public List<string> GetRunApplicationList(Form appForm)
{
List<string> appString = new List<string>();
try
{
int handle = (int)appForm.Handle;
int hwCurr;
hwCurr = GetWindow(handle, GW_HWNDFIRST);
while (hwCurr > 0)
{
int isTask = (WS_VISIBLE | WS_BORDER);
int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE);
bool taskWindow = ((lngStyle & isTask) == isTask);
if (taskWindow)
{
int length = GetWindowTextLength(new IntPtr(hwCurr));
StringBuilder sb = new StringBuilder(2 * length + 1);
GetWindowText(hwCurr, sb, sb.Capacity);
string strTitle = sb.ToString();
if (!string.IsNullOrEmpty(strTitle))
{
appString.Add(strTitle);
}
}
hwCurr = GetWindow(hwCurr, GW_HWNDNEXT);
}
}
catch (Exception ex)
{
MessageBox.Show("读取应用程序信息时出错:" + ex.Message);
}
return appString;
}调用的时候,获取所有任务管理器的应用程序的所有名称,包括看不到的消息窗口。
List<string> taskWindow = GetRunApplicationList(this);
再循环判断是否出现指定程序的窗口是否包含在taskWindow 中。还有一种思路是:当输入账号和密码并点击登录按钮后,
程序先睡眠自己指定的多少秒,然后//获取指定句柄的相对屏幕的位置和矩形区域
[DllImport("user32")]
public static extern int GetWindowRect(int hwnd, ref Rectangle lpRect);[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
IntPtr myIntPtr = FindWindow(null, "QQ游戏");Rectangle rc = new Rectangle();
GetWindowRect(myIntPtr.ToInt32(), ref rc);以后判断窗口大小是否变大,但这种方法睡眠时间掌握不好。lz如果有好的方法别忘了给我参考参考啊。