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