****** pantian(白天傻子) 请进, 关于自动点击的程序的实现

xiaoyuehen 2005-12-23 01:05:26
http://community.csdn.net//Expert/TopicView2.asp?id=4471203&datebasetype=now

我理解的思路如下:
1. 在某时调度 自动点击程序 运行.
2. 自动登录 Web考勤系统
3. 捕捉窗口按钮 自动点击

不过好像这样很复杂哦...请问你是如何实现呢?


接分的朋友顺便也到这边接..CSDN小助手把贴子发到那边去了
http://community.csdn.net//Expert/TopicView2.asp?id=4476930&datebasetype=now
^^
...全文
270 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
broccoli 2006-01-12
  • 打赏
  • 举报
回复
up
搬运工木木 2005-12-26
  • 打赏
  • 举报
回复
这个代码就像是内挂吧?可不可以用类似于外挂的方式,直接用httprequest类的对象搞定呢?
wangyinet 2005-12-26
  • 打赏
  • 举报
回复
up啊
sky 2005-12-26
  • 打赏
  • 举报
回复
[续上,这又是连续第三个回贴了,下面如果没人顶,我又不能再回了]
1、根据IE类名,找到需要点击的WEB页面。
2、获得该页面的文档接口。
3、根据接口,获得页面中同类的所有元素。
4、遍历获取的所有元素,根据元素的ID,找到该元素。
5、对找到的元素执行Click事件。

需要注意的是:这是针对WEB版的,与WIN版的有较大的区别。
sky 2005-12-26
  • 打赏
  • 举报
回复
上面是程序中的一个函数,也是整个程序的关键部分,几乎所有的功能都在其中实现了。

条件(自己用的程序,没必要写得很商业,能用就行了):
1、需要点击的WEB页面已经打开,是不是当前激活窗口没有关系(你可以打开多个WEB页面的)。
2、自动点击的程序(暂且称为Auto)也已经在运行。

Auto的界面:就是一个时钟控件,一个按钮控件。在上面设置好时钟(也即定义一个定时器),然后用按钮控件来保存设置,即可。

思路:在定时器触发的函数里做所有的工作。
sky 2005-12-26
  • 打赏
  • 举报
回复
if(hr==S_OK) //这个hr应该是上面语句的,上面忘记写了
{
CString strID(tagName);
if(strID=="You button's ID")
{
pElement->click(); //自动点击一次
Sleep(1000);
pElement->click();//再自动点击一次,以防前面那次点击没有生效。
KillTimer(1); //关掉定时器,在前面的点击按钮中开了一个定时器,现在关掉。
m_btnStart.SetWindowText("Start Robot"); m_dtpTime.EnableWindow(true); AfxMessageBox("Operation is OK!");
return;
}
}
}
}
}//for(i)
}//if get_length failed*/
}
}
Xmadog 2005-12-26
  • 打赏
  • 举报
回复
1. 在某时调度 自动点击程序 运行.
在服务端写个服务,来执行定时激活程序,如果时间比较固定,可以做个exe,然后用windows的计划任务来完成运行

2. 自动登录 Web考勤系统
这个如果你只是单纯的登陆不操作可以通过webclient类来连接你要登陆的站点,然后用addheads的方法来伪造登陆信息的头,来实现用户登陆,如果有验证码的话,还要写个验证码识别
3. 捕捉窗口按钮 自动点击
这个可以通过windows api实现,
sky 2005-12-26
  • 打赏
  • 举报
回复
IHTMLElementCollection* pAllColl; //定义一个HTML ElementCollection元素集合的指针
HRESULT hr;
hr=pHDoc2->get_images(&pAllColl); //根据上面的接口,获取该文档中所有的image,也可以换成其它的函数,或者直接get_all
if(hr==S_OK)
{
LONG length=0;
hr=pAllColl->get_length(&length);
if(hr==S_OK)
{
for(int i=0; i<length; i++)
{
VARIANT vIndex,vName;
vName.vt=vIndex.vt=VT_I4;
vName.lVal=vIndex.lVal=i;

CComPtr<IDispatch> pDisp;
hr=pAllColl->item(vName,vIndex,&pDisp);
if( hr==S_OK )
{
CComPtr<IHTMLElement> pElement;
hr=pDisp->QueryInterface(IID_IHTMLElement,(void**)&pElement);
if( hr==S_OK )
{
CComBSTR tagName;
pElement->get_id(&tagName); //取到元素的ID,这对于每一个网页来说,应该是唯一的
sky 2005-12-26
  • 打赏
  • 举报
回复
[上面是先根据IE的类名:IEFrame,找到IE的窗体]
::SetForegroundWindow(hwndMain);
::SetActiveWindow(hwndMain); //这一步其实可以不要的
::SetFocus(hwndMain); //这一步也可以不要的

IHTMLDocument2* pHDoc2 = GetDocInterface(hwndMain); //这一步是关键之一,根据句柄获得HTML Document的接口,这样,下面才能获取其中的元素。
if(pHDoc2==NULL)
{
AfxMessageBox("HTML Document is error.");
return;
}
sky 2005-12-26
  • 打赏
  • 举报
回复
[我们公司网络有限制,不能一次发上来]
void CRobotDlg::AutoClick()
{
CString msie = " - Microsoft Internet Explorer";
CString maxthon = " - 傲游 [Maxthon]";

HWND hwndMain = NULL;
hwndMain = ::FindWindow("IEFrame","Your web title" + msie);
if(hwndMain==NULL)
{
hwndMain = ::FindWindow("IEFrame","Your web title" + maxthon);
if(hwndMain==NULL)
{
AfxMessageBox("Web page is not open.");
return;
}
}
xiaoyuehen 2005-12-26
  • 打赏
  • 举报
回复
是C呀...不过有思路就好了, 以后如果会用到的话, 可以借鉴.

谢谢 pantian(白天傻子)

结贴给分.



************************
*风吹鸡蛋壳, 财去人安乐*
************************
JasonHeung 2005-12-26
  • 打赏
  • 举报
回复
我们公司在大门口装了个IC卡刷卡器,楼上能不能帮我编个程序自动刷卡:)
sky 2005-12-26
  • 打赏
  • 举报
回复
to xinggg(风之渡):
是的,有点像内挂。
也可以写成外挂的形式,外挂程序相对而言,应该比写成内挂的形式还更加简单,我也曾经这么考虑过。

但考虑到以后的扩展性(虽然这是一个专用程序,但写程序的习惯使然,多少会考虑一点通用性的),比如:如果我想在另外一个网页中(如:sina),自动点击另外一个按钮(如:登录按钮),那么,这个程序只需要改动两个地方的文本就行了,一个是这个网页的Title,一个是这个按钮的ID,再编译一下OK了。

我甚至考虑过,在界面上,可以用文本框来选择这两处文本,这样,编译都不用了,但后来这个程序能用了,也就没有什么动力了,所了,也懒得再修改了。呵呵。
xiaoyuehen 2005-12-24
  • 打赏
  • 举报
回复
顶~~~~~~~~~


************************
*风吹鸡蛋壳, 财去人安乐*
************************
xiaoyuehen 2005-12-24
  • 打赏
  • 举报
回复
哦哦哦...没人来关注了..
都去过节了吗?

************************
*风吹鸡蛋壳, 财去人安乐*
************************
Qqwwee_Com 2005-12-23
  • 打赏
  • 举报
回复
接分。

#region 广告开始

CSDN小助手 V2.5,更快、更爽、更方便的浏览CSDN论坛!
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2

#endregion
smartclimber 2005-12-23
  • 打赏
  • 举报
回复

pgwron 2005-12-23
  • 打赏
  • 举报
回复
我再去那边接。。。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧