TSWindowsAPI.cpp~RF14b6222.TMP 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. #include "StdAfx.h"
  2. #include "TSWindowsAPI.h"
  3. #include "TSMyUser32DllFuntion.h"
  4. #include "TSMyKernel32DllFuntion.h"
  5. #include "TSRuntime.h"
  6. TSWindowsAPI::TSWindowsAPI(void)
  7. {
  8. if(TSRuntime::InitialWindowsVersion()!=4)//不是win7系统
  9. {
  10. TSRuntime::IsInitialmyUser32module=InitialMyUser32Dll();
  11. TSRuntime::IsInitialmykernel32module=InitialMykernel32Dll();
  12. //if(TSRuntime::IsInitialmyUser32module==false||TSRuntime::IsInitialmykernel32module==false)
  13. // ::MessageBox(0,L"InitialMyUser32Dll失败",L"TS",0);
  14. //else
  15. // ::MessageBox(0,L"InitialMyUser32Dll成功",L"TS",0);
  16. }
  17. }
  18. TSWindowsAPI::~TSWindowsAPI(void)
  19. {
  20. }
  21. //TSEnumWindow:filter整形数: 取值定义如下
  22. //
  23. //1 : 匹配窗口标题,参数title有效
  24. //
  25. //2 : 匹配窗口类名,参数class_name有效.
  26. //
  27. //4 : 只匹配指定父窗口的第一层孩子窗口
  28. //
  29. //8 : 匹配所有者窗口为0的窗口,即顶级窗口
  30. //
  31. //16 : 匹配可见的窗口
  32. //
  33. //32 : 匹配出的窗口按照窗口打开顺序依次排列
  34. bool TSWindowsAPI::TSEnumWindow(HWND parent,wchar_t *title,wchar_t *class_name,LONG filter,wchar_t *retstring)
  35. {
  36. bool bret=false;
  37. bool bZwindow=false;//匹配出的窗口按照窗口打开顺序依次排列
  38. if(parent==0)
  39. {
  40. parent=GetDesktopWindow();
  41. }
  42. if(filter>32)
  43. {
  44. bZwindow=true;//说明要排序窗口句柄
  45. filter=filter-32;
  46. }
  47. switch(filter)
  48. {
  49. case 1://1 : 匹配窗口标题,参数title有效
  50. {
  51. if(wcslen(title)<1)
  52. return false;
  53. HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  54. if(p==NULL)
  55. return false;
  56. p=::GetWindow(p,GW_HWNDFIRST);
  57. while(p!=NULL)
  58. {
  59. wchar_t WindowTitle[MAX_PATH] = {0};
  60. ::GetWindowText(p, WindowTitle, MAX_PATH);
  61. if(wcslen(WindowTitle)>1)
  62. {
  63. wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配
  64. if(strfind)
  65. {
  66. int len=wcslen(retstring);
  67. if(len>1)
  68. swprintf(retstring,L",%x" ,p);
  69. else
  70. swprintf(retstring,L"%x",p);
  71. }
  72. }
  73. p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
  74. }
  75. break;
  76. }
  77. case 2://2 : 匹配窗口类名,参数class_name有效.
  78. {
  79. if(wcslen(class_name)<1)
  80. return false;
  81. HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  82. if(p==NULL)
  83. return false;
  84. p=::GetWindow(p,GW_HWNDFIRST);
  85. while(p!=NULL)
  86. {
  87. wchar_t WindowClassName[MAX_PATH] = {0};
  88. ::GetClassName(p, WindowClassName, MAX_PATH);
  89. if(wcslen(WindowClassName)>1)
  90. {
  91. wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配
  92. if(strfind)
  93. {
  94. int len=wcslen(retstring);
  95. if(len>1)
  96. swprintf(retstring,L",%x" ,p);
  97. else
  98. swprintf(retstring,L"%x",p);
  99. }
  100. }
  101. p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
  102. }
  103. break;
  104. }
  105. case 3: //1.窗口标题+2.窗口类名
  106. {
  107. if(wcslen(class_name)<1&&wcslen(title)<1)
  108. return false;
  109. HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  110. if(p==NULL)
  111. return false;
  112. p=::GetWindow(p,GW_HWNDFIRST);
  113. while(p!=NULL)
  114. {
  115. wchar_t WindowClassName[MAX_PATH] = {0};
  116. ::GetClassName(p, WindowClassName, MAX_PATH);
  117. wchar_t WindowTitle[MAX_PATH] = {0};
  118. ::GetWindowText(p, WindowTitle, MAX_PATH);
  119. if(wcslen(WindowClassName)>1&&wcslen(WindowTitle)>1)
  120. {
  121. wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配
  122. wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配
  123. if(strfindclass&&strfindtitle)
  124. {
  125. int len=wcslen(retstring);
  126. if(len>1)
  127. swprintf(retstring,L",%x" ,p);
  128. else
  129. swprintf(retstring,L"%x",p);
  130. }
  131. }
  132. p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
  133. }
  134. break;
  135. }
  136. case 4: //4 : 只匹配指定父窗口的第一层孩子窗口
  137. {
  138. HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  139. if(hchild!=NULL)
  140. swprintf(retstring,L"%x",hchild);
  141. break;
  142. }
  143. case 5: //1.匹配窗口标题+//4 : 只匹配指定父窗口的第一层孩子窗口
  144. {
  145. if(wcslen(title)<1)
  146. return false;
  147. HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  148. if(hchild==NULL)
  149. return false;
  150. wchar_t WindowTitle[MAX_PATH] = {0};
  151. ::GetWindowText(hchild, WindowTitle, MAX_PATH);
  152. if(wcslen(WindowTitle)>1)
  153. {
  154. if(wcsstr(WindowTitle,title))
  155. swprintf(retstring,L"%x",hchild);
  156. }
  157. else
  158. return false;
  159. break;
  160. }
  161. case 6: //2 : 匹配窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口
  162. {
  163. if(wcslen(class_name)<1)
  164. return false;
  165. HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  166. if(hchild==NULL)
  167. return false;
  168. wchar_t WindowClassName[MAX_PATH] = {0};
  169. ::GetClassName(hchild, WindowClassName, MAX_PATH);
  170. if(wcslen(WindowClassName)>1)
  171. {
  172. if(wcsstr(WindowClassName,class_name))
  173. swprintf(retstring,L"%x",hchild);
  174. }
  175. break;
  176. }
  177. case 7: //1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口
  178. {
  179. if(wcslen(class_name)<1&&wcslen(title)<1)
  180. return false;
  181. HWND hchild=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  182. if(hchild==NULL)
  183. return false;
  184. wchar_t WindowClassName[MAX_PATH] = {0};
  185. ::GetClassName(hchild, WindowClassName, MAX_PATH);
  186. wchar_t WindowTitle[MAX_PATH] = {0};
  187. ::GetWindowText(hchild, WindowTitle, MAX_PATH);
  188. if(wcslen(WindowClassName)>1&&wcslen(WindowTitle)>1)
  189. {
  190. wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配
  191. wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配
  192. if(strfindclass&&strfindtitle)
  193. {
  194. swprintf(retstring,L"%x",hchild);
  195. }
  196. }
  197. break;
  198. }
  199. case 8: //8 : 匹配所有者窗口为0的窗口,即顶级窗口
  200. {
  201. parent=GetDesktopWindow();
  202. HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口
  203. p=::GetWindow(p,GW_HWNDFIRST);
  204. while(p!=NULL)
  205. {
  206. if(::GetWindow( p, GW_OWNER ) == 0 )
  207. {
  208. int len=wcslen(retstring);
  209. if(len>1)
  210. swprintf(retstring,L",%x" ,p);
  211. else
  212. swprintf(retstring,L"%x",p);
  213. }
  214. p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
  215. }
  216. break;
  217. }
  218. case 9: //1.窗口标题+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  219. {
  220. break;
  221. }
  222. case 10: //2.窗口类名+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  223. {
  224. break;
  225. }
  226. case 11: ////1.窗口标题+2.窗口类名+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  227. {
  228. break;
  229. }
  230. case 12: // //4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  231. {
  232. break;
  233. }
  234. case 13: //1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  235. {
  236. break;
  237. }
  238. case 14: //2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  239. {
  240. break;
  241. }
  242. case 15: ////1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口
  243. {
  244. break;
  245. }
  246. case 16://匹配可见的窗口
  247. {
  248. break;
  249. }
  250. case 17: //1.窗口标题+//匹配可见的窗口
  251. {
  252. break;
  253. }
  254. case 18: //2.窗口类名+//匹配可见的窗口
  255. {
  256. break;
  257. }
  258. case 19: ////1.窗口标题+2.窗口类名+匹配可见的窗口
  259. {
  260. break;
  261. }
  262. case 20: //4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
  263. {
  264. break;
  265. }
  266. case 21: //1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
  267. {
  268. break;
  269. }
  270. case 22://2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
  271. {
  272. break;
  273. }
  274. case 23://1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口
  275. {
  276. break;
  277. }
  278. case 24://8 : 匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  279. {
  280. break;
  281. }
  282. case 25: //1.窗口标题+ 8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  283. {
  284. break;
  285. }
  286. case 26://2.窗口类名+ 8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  287. {
  288. break;
  289. }
  290. case 27://1.窗口标题+2.窗口类名+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  291. {
  292. break;
  293. }
  294. case 28: //4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  295. {
  296. break;
  297. }
  298. case 29: ////1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  299. {
  300. break;
  301. }
  302. case 30://2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  303. {
  304. break;
  305. }
  306. case 31: //1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口
  307. {
  308. break;
  309. }
  310. default:
  311. return bret;
  312. }
  313. return bret;
  314. }