工控编程吧
标题:
枚举全部窗口及关闭等任意操作
[打印本页]
作者:
qq263946146
时间:
2016-11-24 14:30
标题:
枚举全部窗口及关闭等任意操作
(, 下载次数: 0)
上传
点击文件名下载附件
枚举全部窗口及关闭等任意操作
功能展示
系统运行时会同时运行多个程序,或打开多个窗口,在设备改造时需要对正在运行的上位机软件进行操作,如关闭,点击指定按钮等,当前例程实现获取运行中的全部窗口,并关闭指定窗口功能,效果如图,点击<枚举窗口>按钮,例程会将当前可见窗口罗列在列表框中,在获取窗口过程中对指定窗口进行关闭操作;
要点提示
窗口的枚举功能实现,例程中是通过两函数EnumWindows,EnumWindowsProc完成,在函数EnumWindowsProc()中我们就可以获取全部的窗口句柄,例程中用一个数据链进行了保存。有了全部的窗口句柄我们就可以从中进行遍历,通过函数GetWindowText()查找窗口标题,通过函数GetClassName()查找类名,然后向满足条件的窗口发送一系列的消息,控制满足条件的窗口
实现功能
1.新建基于对话框的应用程序
2.添加一列表控件,ID保存默认<IDC_LIST1>,添加一按钮控件<枚举窗口>关联按钮的点击函数
void CGkbc8Dlg::OnEnumerate()
{
CListBox *pListBox = (CListBox *)GetDlgItem(IDC_LIST1);
char cTitle[MAX_PATH];
char cClassName[MAX_PATH];
CString sText;
::EnumWindows(EnumWindowsProc,NULL);//枚举全部可见窗口
int nCount = hWnd_List.GetCount();
for(int i=0;i<nCount;i++)
{
HWND hWnd = hWnd_List.GetAt(hWnd_List.FindIndex(i));
::GetWindowText(hWnd,cTitle,MAX_PATH);
if(strcmp(cTitle,"Windows Task Manager") ==0 )//额外实现想要功能,如关闭窗口
::PostMessage(hWnd,WM_CLOSE,0,0);
::GetClassName(hWnd,cClassName,MAX_PATH-1);
sText.Format("%d 标题:%s 类名%s",i,cTitle,cClassName);
pListBox->AddString(sText);
}
}
复制代码
3.上面的函数中调用了hWnd_List,EnumWindowsProc(),所以再在函数前边添加以下代码
#include<Afxtempl.h >
CList<HWND,HWND> hWnd_List;
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)
{
hWnd_List.AddHead(hWnd);
}
return true;
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/5b14e75e8c83b65c34ac62206b690201/0/0/w_19run2pead.swf-albumId=6813308409-tvId=6813308409-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4