1 Star 1 Fork 5

yenmuse / TSPlug

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
TSWindowsAPI.cpp~RF14b6222.TMP 8.92 KB
一键复制 编辑 原始数据 按行查看 历史
GJX 提交于 2017-08-10 10:29 . 天使插件
#include "StdAfx.h"
#include "TSWindowsAPI.h"
#include "TSMyUser32DllFuntion.h"
#include "TSMyKernel32DllFuntion.h"
#include "TSRuntime.h"
TSWindowsAPI::TSWindowsAPI(void)
{
if(TSRuntime::InitialWindowsVersion()!=4)//不是win7系统
{
TSRuntime::IsInitialmyUser32module=InitialMyUser32Dll();
TSRuntime::IsInitialmykernel32module=InitialMykernel32Dll();
//if(TSRuntime::IsInitialmyUser32module==false||TSRuntime::IsInitialmykernel32module==false)
// ::MessageBox(0,L"InitialMyUser32Dll失败",L"TS",0);
//else
// ::MessageBox(0,L"InitialMyUser32Dll成功",L"TS",0);
}
}
TSWindowsAPI::~TSWindowsAPI(void)
{
}
//TSEnumWindow:filter整形数: 取值定义如下
//
//1 : 匹配窗口标题,参数title有效
//
//2 : 匹配窗口类名,参数class_name有效.
//
//4 : 只匹配指定父窗口的第一层孩子窗口
//
//8 : 匹配所有者窗口为0的窗口,即顶级窗口
//
//16 : 匹配可见的窗口
//
//32 : 匹配出的窗口按照窗口打开顺序依次排列
bool TSWindowsAPI::TSEnumWindow(HWND parent,wchar_t *title,wchar_t *class_name,LONG filter,wchar_t *retstring)
{
bool bret=false;
bool bZwindow=false;//匹配出的窗口按照窗口打开顺序依次排列
if(parent==0)
{
parent=GetDesktopWindow();
}
if(filter>32)
{
bZwindow=true;//说明要排序窗口句柄
filter=filter-32;
}
switch(filter)
{
case 1://1 : 匹配窗口标题,参数title有效
{
if(wcslen(title)<1)
return false;
HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(p==NULL)
return false;
p=::GetWindow(p,GW_HWNDFIRST);
while(p!=NULL)
{
wchar_t WindowTitle[MAX_PATH] = {0};
::GetWindowText(p, WindowTitle, MAX_PATH);
if(wcslen(WindowTitle)>1)
{
wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配
if(strfind)
{
int len=wcslen(retstring);
if(len>1)
swprintf(retstring,L",%x" ,p);
else
swprintf(retstring,L"%x",p);
}
}
p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
}
break;
}
case 2://2 : 匹配窗口类名,参数class_name有效.
{
if(wcslen(class_name)<1)
return false;
HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(p==NULL)
return false;
p=::GetWindow(p,GW_HWNDFIRST);
while(p!=NULL)
{
wchar_t WindowClassName[MAX_PATH] = {0};
::GetClassName(p, WindowClassName, MAX_PATH);
if(wcslen(WindowClassName)>1)
{
wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配
if(strfind)
{
int len=wcslen(retstring);
if(len>1)
swprintf(retstring,L",%x" ,p);
else
swprintf(retstring,L"%x",p);
}
}
p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
}
break;
}
case 3: //1.窗口标题+2.窗口类名
{
if(wcslen(class_name)<1&&wcslen(title)<1)
return false;
HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(p==NULL)
return false;
p=::GetWindow(p,GW_HWNDFIRST);
while(p!=NULL)
{
wchar_t WindowClassName[MAX_PATH] = {0};
::GetClassName(p, WindowClassName, MAX_PATH);
wchar_t WindowTitle[MAX_PATH] = {0};
::GetWindowText(p, WindowTitle, MAX_PATH);
if(wcslen(WindowClassName)>1&&wcslen(WindowTitle)>1)
{
wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配
wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配
if(strfindclass&&strfindtitle)
{
int len=wcslen(retstring);
if(len>1)
swprintf(retstring,L",%x" ,p);
else
swprintf(retstring,L"%x",p);
}
}
p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
}
break;
}
case 4: //4 : 只匹配指定父窗口的第一层孩子窗口
{
HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(hchild!=NULL)
swprintf(retstring,L"%x",hchild);
break;
}
case 5: //1.匹配窗口标题+//4 : 只匹配指定父窗口的第一层孩子窗口
{
if(wcslen(title)<1)
return false;
HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(hchild==NULL)
return false;
wchar_t WindowTitle[MAX_PATH] = {0};
::GetWindowText(hchild, WindowTitle, MAX_PATH);
if(wcslen(WindowTitle)>1)
{
if(wcsstr(WindowTitle,title))
swprintf(retstring,L"%x",hchild);
}
else
return false;
break;
}
case 6: //2 : 匹配窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口
{
if(wcslen(class_name)<1)
return false;
HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(hchild==NULL)
return false;
wchar_t WindowClassName[MAX_PATH] = {0};
::GetClassName(hchild, WindowClassName, MAX_PATH);
if(wcslen(WindowClassName)>1)
{
if(wcsstr(WindowClassName,class_name))
swprintf(retstring,L"%x",hchild);
}
break;
}
case 7: //1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口
{
if(wcslen(class_name)<1&&wcslen(title)<1)
return false;
HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
if(hchild==NULL)
return false;
wchar_t WindowClassName[MAX_PATH] = {0};
::GetClassName(hchild, WindowClassName, MAX_PATH);
wchar_t WindowTitle[MAX_PATH] = {0};
::GetWindowText(hchild, WindowTitle, MAX_PATH);
if(wcslen(WindowClassName)>1&&wcslen(WindowTitle)>1)
{
wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配
wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配
if(strfindclass&&strfindtitle)
{
swprintf(retstring,L"%x",hchild);
}
}
break;
}
case 8: //8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
parent=GetDesktopWindow();
HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
p=::GetWindow(p,GW_HWNDFIRST);
while(p!=NULL)
{
if(::GetWindow( p, GW_OWNER ) == 0 )
{
int len=wcslen(retstring);
if(len>1)
swprintf(retstring,L",%x" ,p);
else
swprintf(retstring,L"%x",p);
}
p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
}
break;
}
case 9: //1.窗口标题+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 10: //2.窗口类名+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 11: ////1.窗口标题+2.窗口类名+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 12: // //4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 13: //1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 14: //2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 15: ////1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
{
break;
}
case 16://匹配可见的窗口
{
break;
}
case 17: //1.窗口标题+//匹配可见的窗口
{
break;
}
case 18: //2.窗口类名+//匹配可见的窗口
{
break;
}
case 19: ////1.窗口标题+2.窗口类名+匹配可见的窗口
{
break;
}
case 20: //4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
{
break;
}
case 21: //1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
{
break;
}
case 22://2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
{
break;
}
case 23://1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
{
break;
}
case 24://8 : 匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 25: //1.窗口标题+ 8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 26://2.窗口类名+ 8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 27://1.窗口标题+2.窗口类名+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 28: //4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 29: ////1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 30://2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
case 31: //1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
{
break;
}
default:
return bret;
}
return bret;
}
C++
1
https://gitee.com/yenmuse/TSPlug.git
git@gitee.com:yenmuse/TSPlug.git
yenmuse
TSPlug
TSPlug
master

搜索帮助