




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC实现进程自动控制别的窗口已有 136 次阅读 2010-10-21 21:58 标签: 自动控制 进程 窗口 实现进程自动控制 操作计算机人员常常会遇到这样的情况:每天面对重复、繁锁的劳动,这些劳动极其无聊,但却无法从中解脱。通过自动控制程序,可让计算机完成这些枯燥的动作,提高工作效率,减少人力成本。操纵其它进程的本质是向它们发送消息,如何准确、可靠地向其它应用程序发送消息,是实现自动控制的关键。一、向某个输入框中输入字符:HWND hWnd = :FindWindow(NULL,m_strTitle);/m_strTitle是窗口标题HWND hEdit = :GetDlgItem(hWnd, m_Id );/ m_Id是编辑框的ID,可在SPY+中观察得到:SendMessage( hEdit , WM_CHAR , a , 0 );/写英文字母a:SendMessage( hEdit , WM_IME_CHAR , 0x6C49 , 0 );/写Unicode汉字“汉”二、重写窗口标题:HWND hWnd = :FindWindow(NULL,m_strTitle);/m_strTitle是窗口标题if(hWnd=NULL)AfxMessageBox(_T(无效的句柄。),0,0);:SendMessage( hWnd , WM_SETTEXT , 0, (LPARAM)_T(User Name:);三、枚举窗口:EnumWindows(WNDENUMPROC)EnumWinProc,(LPARAM)&m_strEdit1);添加一个回调函数:BOOL CALLBACK EnumWinProc(HWND hwnd,LPARAM lParam)CString *s = (CString*)lParam;TCHAR lpWinNameMAX_PATH;:GetWindowText(hwnd,(LPWSTR)lpWinName,MAX_PATH-1);if(strlen(char*)lpWinName) /SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)lpWinName); CString temp(lpWinName); s-Append(temp); s-Append(_T(,); s-Append(_T(rn);return TRUE;四、用Windows的计算器(calc.exe)计算“111*111”HWND hWnd = :FindWindow(NULL,m_strTitle);/m_strTitle=计算器,在不同语言的系统上是不同的HWND hEdit1 = :GetDlgItem(hWnd, 125 );/按钮1的ID,可在SPY+中观察得到HWND hEditMul = :GetDlgItem(hWnd, 0x5B );/乘号的ID,可在SPY+中观察得到HWND hEditEq = :GetDlgItem(hWnd, 0x70 );/等号的ID,可在SPY+中观察得到:SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);:SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);:SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);:SendMessage( hEditMul , BM_CLICK , NULL , NULL );Sleep(500);:SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);:SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);:SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(1000);:SendMessage( hEditEq , BM_CLICK , NULL , NULL );结合Spy 编写控制其他程序控件程序/viewdiary.22688105.html分类:编程技术-VC2008.1.12 21:49 作者:jackson031 | 评论:0 | 阅读:1644 这两天泡在机房里指导学生计算机省级考试,发现考试系统的监考界面在一定时间后会自动将“允许登录”复 选框“去除勾选,这在进行上机体验给管理带来很大不便,于是我考虑了采用定时模拟按键来勾选复选框,关键是FindWindowEx找句柄,找到了复选框 的句柄我们就可以通过PostMessage或SendMessage函数来向控件发送消息,以下是根据监考系统页面结构特需定制的获取“允许登录”控件 句柄的代码段,里面采用了遍历顶层窗口获得监考窗口,然后再通过层层剥离的方式找到复选框【其实我们可以定义一个回调函数然后采用递归的方式获得特定的控 件句柄,这样更具有通用性】:Spy 查看到的监考窗口结构图:程序代码/通过标题找到窗体句柄char windowTitle100;strcpy(windowTitle,m_windowtitle);HWND inHwnd = NULL;char szText256;CString msg;HWND hwndAfter = NULL;m_hwndFind= NULL;while(hwndAfter = :FindWindowEx(inHwnd,hwndAfter,NULL,NULL)memset(szText,0,256);:SendMessage(hwndAfter,WM_GETTEXT,(WPARAM)256,(LPARAM)szText);if(strcmp(szText, windowTitle) = 0)m_hwndFind = hwndAfter;msg.Format(找到窗口 %s %x!,windowTitle,hwndAfter);AfxMessageBox(msg);if(m_hwndFind = :FindWindowEx(m_hwndFind,NULL,WindowsForms10.MDICLIENT.app3,NULL)/WindowsForms10.MDICLIENT.app3类是通过Spy 找到的if(m_hwndFind = :FindWindowEx(m_hwndFind,NULL,NULL,NULL)for(int i=1; i ClassWizard - Message Maps 添加WM_TIMER响应消息,编辑代码,在OnTimer函数体内编写一个定时周期到达后的处理代码】。通过查询资料,发现找窗口句柄的方法有几种,这里只列出典型的一种方法,熟练了这种方法,结合Spy 的查询分析,我们就可以开发出许多有用的小软件来了,比如QQ自动登陆器【完全不要管协议那一快,直接模拟键鼠消息】、消息自动群发. 慢慢去发现吧。如何通过句柄控制其它软件控件及操作/t/20060101/11/4493864.html6、对系统中其他窗口的操作 (1) SetFocus();/Dlg类中,窗口得到焦点 CenterWindow();/Dlg类中,窗口居中 CWnd* pPrevWnd = CWnd:FindWindow(NULL, CashFiesta ); /定位到某个窗口 char strWin80; pPrevWnd- GetWindowText(strWin,60);/得到窗口标题 pPrevWnd- MessageBox (strWin);/显示得到的窗口标题 if (strcmp(strWin, CashFiesta )=0)/如果窗口标题是 CashFiesta 则 /这个语句有问题改用下面一个 if (pPrevWnd!=NULL)/如果确实有窗口标题是 CashFiesta的,则 pPrevWnd- MoveWindow(747,757,280,80,TRUE);/移动窗口到x=747,y=757, 宽度=280,高度=80,重绘 pPrevWnd- SendMessage(WM_CLOSE);/关闭窗口 if (pPrevWnd- IsIconic()/如果窗口已经最小化 pPrevWnd- ShowWindow(SW_RESTORE);/显示窗口,恢复 /* 依次得到所有窗口 CWnd* pPrevWnd = CWnd:FindWindow(NULL,NULL); while (pPrevWnd) pPrevWnd = pPrevWnd- GetWindow(GW_HWNDNEXT); */ (2) CWnd* pPrevWndL = CWnd:FindWindow(NULL, CashFiesta Login ); HWND handMain=:FindWindowEx(NULL,NULL,NULL,_T( CashFiesta Login ); 这两个语句都是找到窗口 CashFiesta Login ,可以共存在一个代码段中,只是返回值的类型不同,便于不同应用, FindWindowEx也可以用于查找窗口中的控件,例如: HWND hwnd1=:FindWindowEx(handMain,NULL,_T( EditBar ),NULL);/查找定位到窗口 CashFiesta Login 中的第一个EditBar控件(实际没有EditBar,只是用来说明如何取一个控件内部的控件) HWND hwnd2=:FindWindowEx(hwnd1,NULL,_T( Edit ),NULL);/查找定位到窗口 CashFiesta Login 中的第一个EditBar控件中的EDIT控件 7、向另外的程序窗口中的控件发消息 HWND handMain=:FindWindowEx(NULL,NULL,NULL,_T( CashFiesta Login );/CashFiesta Login是其他程序的窗口标题 if(handMain )/如果有那样的一个窗口打开 HWND hwndEdit=:FindWindowEx(handMain,NULL,_T( Edit ),NULL); HWND hwndButton=:FindWindowEx(handMain,NULL,_T( Button ),_T( OK ); if (hwndEdit) char sz255; strcpy(sz, StevenMzq ); :SendMessage(hwnd2,WM_SETTEXT,255,(long)sz);/向Edit控件中加入字符串 StevenMzq :SendMessage(hwnd2,WM_GETTEXT,255,(long)sz);/将Edit控件中的内容存入字符串 sz if (hwndButton) :SendMessage(handMain,WM_COMMAND,1,(long)hwndButton);/模拟向button击键-重要! 上面语句有时并不能实现模拟向button击键,用下面两行语句 int nButtonID=:GetDlgCtrlID(hwndButton);/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科普防疫知识策划活动方案
- 高压线路停电应急预案方案
- 最美建筑拍摄方案设计意图
- 经典心理咨询方案
- 咨询合同的利润分配方案
- 山西企业咨询公司方案
- 提高自己的营销方案设计
- 物流咨询交流服务方案
- 咨询客服服务方案
- 房产资产优化咨询方案
- 2025年医疗工作人员定向招聘考试笔试试题(含答案)
- 第二单元混合运算单元测试卷(含答案) 2025-2026学年人教版三年级数学上册
- 2025年中央一号文件客观题及参考答案
- 出境人员行前安全培训课件
- 2025年河北沧州市中心医院、沧州博施康养集团公开招聘辅助岗工作人员113名考试参考试题及答案解析
- 俄乌局势进展
- 2025甘肃兰州兴蓉环境发展有限责任公司招聘内控管理岗等岗位5人笔试模拟试题及答案解析
- 用电安全与消防知识培训课件
- 2025年法考真题及答案
- 基孔肯雅热防护知识科普课件
- 2025年思想政治教育实践考试试题及答案解析
评论
0/150
提交评论