123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- #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;
- }
|