#include "StdAfx.h" #include "TSWindowsAPI.h" #include #include #include "TSMyUser32DllFuntion.h" #include "TSMyKernel32DllFuntion.h" #include "TSRuntime.h" #pragma comment ( lib, "psapi.lib" ) extern myOpenProcess my_OpenProcess; extern myScreenToClient my_ScreenToClient; extern myClientToScreen my_ClientToScreen; DWORD MyGetCursorPosRet=0; __declspec(naked) BOOL WINAPI My_GetCursorPos( LPPOINT lpPoint) { _asm { mov edi,edi push ebp mov ebp,esp jmp MyGetCursorPosRet; } } 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); //} //else // { // InitialMykernel32DllWIN7(); // } if(MyGetCursorPosRet==0) { MyGetCursorPosRet=(DWORD)::GetProcAddress(::GetModuleHandle(L"user32.dll"),"GetCursorPos"); MyGetCursorPosRet+=5; } retstringlen=0; WindowVerion=TSRuntime::InitialWindowsVersion(); IsEuemprosuccess=0; memset(npid,0,MAX_PATH); } TSWindowsAPI::~TSWindowsAPI(void) { } BOOL TSWindowsAPI::EnumProcessbyName(DWORD dwPID, LPCWSTR ExeName,LONG type) { if(IsEuemprosuccess==0) { int nItem = 0; // 项计数 PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) }; HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hProcessSnap == INVALID_HANDLE_VALUE) return FALSE; if(::Process32First(hProcessSnap, &pe32)) { do { if(type==1) { if(wcsstr(pe32.szExeFile,ExeName)!=NULL) //模糊匹配 { npid[nItem]=pe32.th32ProcessID; IsEuemprosuccess++; nItem++; } } else { if(!wcsicmp(pe32.szExeFile,ExeName)) { npid[nItem]=pe32.th32ProcessID; IsEuemprosuccess++; nItem++; } } } while(::Process32Next(hProcessSnap, &pe32)); } ::CloseHandle(hProcessSnap); if( IsEuemprosuccess>0) return TRUE; } else { for(int i=0;i1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } else { if(retstring) { int len=wcslen(retstring); if(len>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } else if(title!=NULL&&classname!=NULL) { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(hchile, WindowClassName, MAX_PATH); wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(hchile, WindowTitle, MAX_PATH); if(wcslen(WindowClassName)>1&&wcslen(WindowTitle)>1) { wchar_t *strfindclass=wcsstr(WindowClassName,classname); //模糊匹配 wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配 if(strfindclass&&strfindtitle) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(hchile,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstring) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } else { if(retstring) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } } } else if(title!=NULL) { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(hchile, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(hchile,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstring) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } else { if(retstring) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } } } else if(classname!=NULL) { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(hchile, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,classname); //模糊匹配 if(strfind) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(hchile,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstring) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } else { if(retstring) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,hchile); else swprintf(retstring,L"%d",hchile); } else return (DWORD)hchile; } } } } HWND hchilechile=::GetWindow(hchile,GW_CHILD); if(hchilechile!=NULL) { DWORD dret=FindChildWnd(hchilechile,title,classname,retstring,isGW_OWNER,isVisible,process_name); if(dret>0) break; } hchile=::GetWindow(hchile,GW_HWNDNEXT); //获取下一个窗口 } return 0; } //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,wchar_t *process_name) { bool bret=false; bool bZwindow=false;//匹配出的窗口按照窗口打开顺序依次排列 if(parent==0) { parent=GetDesktopWindow(); } if(filter>32) { bZwindow=true;//说明要排序窗口句柄 filter=filter-32; } DWORD procpids[MAX_PATH]={0}; int indexpid=0; if(process_name)//EnumWindowByProcess { if(wcslen(process_name)<1) return false; memset(npid,0,MAX_PATH); IsEuemprosuccess=0; if(EnumProcessbyName(0,process_name)==false) return false; } DWORD processpid=0; retstringlen=0; switch(filter) { case 0: //所有模式 { if(process_name) //EnumWindowByProcess { return false; } HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 if(p==NULL) return false; p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring); } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } 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) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring); } } } } 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) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring); } } } } 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) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring); } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 4: //4 : 只匹配指定父窗口的第一层孩子窗口 { HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 if(p==NULL) return false; p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,false,false,process_name); } } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 5: //1.匹配窗口标题+//4 : 只匹配指定父窗口的第一层孩子窗口 { 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) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { if(wcsstr(WindowTitle,title)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,false,false,process_name); } } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { if(wcsstr(WindowTitle,title)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 6: //2 : 匹配窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口 { 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) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(indexpid1) { if(wcsstr(WindowClassName,class_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,false,false,process_name); } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { if(wcsstr(WindowClassName,class_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 7: //1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口 { 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) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(indexpid1&&wcslen(WindowTitle)>1) { wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配 wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配 if(strfindclass&&strfindtitle) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,false,false,process_name); } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 8: //8 : 匹配所有者窗口为0的窗口,即顶级窗口 { HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 if(p==NULL) return false; p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::GetWindow(p,GW_OWNER)==0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,true,false,process_name); } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 9: //1.窗口标题+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { 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) { if(::GetWindow(p,GW_OWNER)==0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,true,false,process_name); } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 10: //2.窗口类名+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { 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) { if(::GetWindow(p,GW_OWNER)==0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,true,false,process_name); } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 11: ////1.窗口标题+2.窗口类名+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { 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) { if(::GetWindow(p,GW_OWNER)==0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,true,false,process_name); } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 12: // //4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::GetWindow( p, GW_OWNER ) == 0 ) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,true,false,process_name); } } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 13: //1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { if(wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::GetWindow( p, GW_OWNER ) == 0 ) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,true,false,process_name); } } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 14: //2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { if(wcslen(class_name)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::GetWindow( p, GW_OWNER ) == 0 ) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,true,false,process_name); } } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 15: ////1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8 : 匹配所有者窗口为0的窗口,即顶级窗口 { if(wcslen(class_name)<1&&wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::GetWindow( p, GW_OWNER ) == 0 ) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1&&wcslen(WindowTitle)>1) { wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配 wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配 if(strfindclass&&strfindtitle) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,true,false,process_name); } } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 16://匹配可见的窗口 { parent=GetDesktopWindow(); HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,false,true,process_name); } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,false,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 17: //1.窗口标题+//匹配可见的窗口 { if(wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p ) ) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,false,true,process_name); } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,false,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 18: //2.窗口类名+//匹配可见的窗口 { if(wcslen(class_name)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d" ,retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,false,true,process_name); } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d" ,retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,false,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 19: ////1.窗口标题+2.窗口类名+匹配可见的窗口 { if(wcslen(class_name)<1&&wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,false,true,process_name); } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,false,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 20: //4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口 { HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,false,true,process_name); } } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 21: //1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口 { if(wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p ) ) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,false,true,process_name); } } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 22://2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口 { if(wcslen(class_name)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,false,true,process_name); } } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 23://1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+匹配可见的窗口 { if(wcslen(class_name)<1&&wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1&&wcslen(WindowTitle)>1) { wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配 wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配 if(strfindclass&&strfindtitle) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,false,true,process_name); } } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 24://8 : 匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,true,true,process_name); } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,true,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 25: //1.窗口标题+ 8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { if(wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,true,true,process_name); } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,true,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 26://2.窗口类名+ 8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { if(wcslen(class_name)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,true,true,process_name); } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,true,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 27://1.窗口标题+2.窗口类名+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { if(wcslen(class_name)<1&&wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,true,true,process_name); } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,true,true); } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 28: //4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,retstring,true,true,process_name); } } } } else { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 29: ////1.窗口标题+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { if(wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,NULL,retstring,true,true,process_name); } } } } else { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>1) { wchar_t *strfind=wcsstr(WindowTitle,title); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 30://2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { if(wcslen(class_name)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,class_name,retstring,true,true,process_name); } } } } else { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>1) { wchar_t *strfind=wcsstr(WindowClassName,class_name); //模糊匹配 if(strfind) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } case 31: //1.窗口标题+2.窗口类名+4 : 只匹配指定父窗口的第一层孩子窗口+8:匹配所有者窗口为0的窗口,即顶级窗口+16.匹配可见的窗口 { if(wcslen(class_name)<1&&wcslen(title)<1) return false; HWND p=::GetWindow(parent,GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(process_name)//EnumWindowByProcess { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(processpid!=pid) //只匹配指定映像的所对应的第一个进程. 可能有很多同映像名的进程,只匹配第一个进程的. { if(indexpid1&&wcslen(WindowTitle)>1) { wchar_t *strfindclass=wcsstr(WindowClassName,class_name); //模糊匹配 wchar_t *strfindtitle=wcsstr(WindowTitle,title); //模糊匹配 if(strfindclass&&strfindtitle) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,title,class_name,retstring,true,true,process_name); } } } } else { 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) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bret=true; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } break; } default: return bret; } return bret; } bool TSWindowsAPI::TSEnumWindowSuper(wchar_t *spec1,LONG flag1,LONG type1,wchar_t *spec2,LONG flag2,LONG type2,LONG sort,wchar_t *retstring) { bool bret=false; wchar_t findhwnd1[MAX_PATH*100]={0}; wchar_t findhwnd2[MAX_PATH*100]={0}; bool bfindhwnd1=false; bool bfindhwnd2=false; retstringlen=0; HWND parent=GetDesktopWindow(); HWND p=::GetWindow(parent,GW_CHILD); p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(flag1==0)//0表示spec1的内容是标题 { wchar_t WindowTitle[MAX_PATH] = {0}; ::GetWindowText(p, WindowTitle, MAX_PATH); if(wcslen(WindowTitle)>0) { if(type1==0)//0精确判断,1模糊判断 { if(wcscmp(spec1,WindowTitle)==0) bfindhwnd1=true; } else if(type1==1) { if(wcsstr(WindowTitle,spec1)!=NULL) bfindhwnd1=true; } } } else if(flag1==1)//1表示spec1的内容是程序名字 { DWORD pid=0; ::GetWindowThreadProcessId(p,&pid); wchar_t proname[MAX_PATH]={0}; GetProcesspath(pid,proname); } else if(flag1==2)//2表示spec1的内容是类名 { wchar_t WindowClassName[MAX_PATH] = {0}; ::GetClassName(p, WindowClassName, MAX_PATH); if(wcslen(WindowClassName)>0) { if(type1==0)//0精确判断,1模糊判断 { if(wcscmp(spec1,WindowClassName)==0) bfindhwnd1=true; } else { if(wcsstr(WindowClassName,spec1)!=NULL) bfindhwnd1=true; } } } if(bfindhwnd1) { if(retstringlen==0) retstringlen=wcslen(retstring); if(retstringlen>1) swprintf(retstring,L"%s,%d", retstring,p); else swprintf(retstring,L"%d",p); bfindhwnd1=false; } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { FindChildWnd(hchile,NULL,NULL,findhwnd1); } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } return bret; } bool TSWindowsAPI::TSEnumProcess(wchar_t *name,wchar_t *retstring) { bool bret=false; retstringlen=0; if(wcslen(name)<1) return false; IsEuemprosuccess=0; if(EnumProcessbyName(0,name)==true) { bret=true; for(int i=0;i1) swprintf(retstring,L"%s,%d", retstring,npid[i]); else swprintf(retstring,L"%d",npid[i]); } } return bret; } bool TSWindowsAPI::TSClientToScreen(LONG hwnd,LONG &x,LONG &y) { POINT point; if(my_ClientToScreen) { my_ClientToScreen((HWND)hwnd,&point); } else ::ClientToScreen((HWND)hwnd,&point); x=point.x; y=point.y; return true; } bool TSWindowsAPI::TSFindWindow(wchar_t *class_name,wchar_t*title,LONG &rethwnd,DWORD parent) { bool bret=false; rethwnd=0; HWND p=NULL; if(parent==0) p=::GetWindow(GetDesktopWindow(),GW_CHILD); //获取桌面窗口的子窗口 else p=::GetWindow((HWND)parent,GW_CHILD); //获取桌面窗口的子窗口 if(p==NULL) return bret; p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { if(wcslen(class_name)<1&&wcslen(title)<1) { rethwnd=(LONG)p; bret=true; break; } else { 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((wcslen(class_name)>=1&&strfindclass) ||(wcslen(title)>=1&&strfindtitle) ) { rethwnd=(LONG)p; bret=true; break; } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } return bret; } bool TSWindowsAPI::TSFindWindowByProcess(wchar_t *class_name,wchar_t *title,LONG &rethwnd,wchar_t *process_name,DWORD Pid) { bool bret=false; rethwnd=0; if(process_name) { if(wcslen(process_name)<1) return false; memset(npid,0,MAX_PATH); IsEuemprosuccess=0; if(EnumProcessbyName(0,process_name)==false) return false; HWND p=::GetWindow(GetDesktopWindow(),GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { DWORD pid=0; GetWindowThreadProcessId(p,&pid); if(EnumProcessbyName(pid,process_name)) { if(wcslen(class_name)<1&&wcslen(title)<1) { rethwnd=(LONG)p; bret=true; break; } else { 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((wcslen(class_name)>=1&&strfindclass) ||(wcslen(title)>=1&&strfindtitle) ) { rethwnd=(LONG)p; bret=true; break; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { wchar_t * classname=NULL; wchar_t *titles=NULL; if(wcslen(class_name)>0) classname=class_name; if(wcslen(title)>0) titles=titles; DWORD dret=FindChildWnd(hchile,titles,classname,NULL,false,false,process_name); if(dret>0) { rethwnd=(LONG)dret; bret=true; break; } } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } } else if(Pid>0) { HWND p=::GetWindow(GetDesktopWindow(),GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if(::IsWindowVisible( p )&&::GetWindow( p, GW_OWNER ) == 0) { DWORD npid=0; GetWindowThreadProcessId(p,&npid); if(Pid==npid) { if(wcslen(class_name)<1&&wcslen(title)<1) { rethwnd=(LONG)p; bret=true; break; } else { 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((wcslen(class_name)>=1&&strfindclass) ||(wcslen(title)>=1&&strfindtitle) ) { rethwnd=(LONG)p; bret=true; break; } } HWND hchile=::GetWindow(p,GW_CHILD); if(hchile!=NULL) { wchar_t * classname=NULL; wchar_t *titles=NULL; if(wcslen(class_name)>0) classname=class_name; if(wcslen(title)>0) titles=titles; DWORD dret=FindChildWnd(hchile,titles,classname,NULL,false,false,process_name); if(dret>0) { rethwnd=(LONG)dret; bret=true; break; } } } } } p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口 } } return bret; } bool TSWindowsAPI::TSGetClientRect(LONG hwnd,LONG &x,LONG &y,LONG &x1, LONG &y1) { bool bret=false; RECT clientrect; if(IsWindow((HWND)hwnd)) { ::GetClientRect((HWND)hwnd,&clientrect); POINT point; point.x=clientrect.left; point.y=clientrect.top; ::ClientToScreen((HWND)hwnd,&point); x=point.x; y=point.y; point.x=clientrect.right; point.y=clientrect.bottom; ::ClientToScreen((HWND)hwnd,&point); x1=point.x; y1=point.y; bret=true; } return bret; } bool TSWindowsAPI::TSGetClientSize(LONG hwnd,LONG &width,LONG &height) { bool bret=false; RECT clientrect; if(IsWindow((HWND)hwnd)) { ::GetClientRect((HWND)hwnd,&clientrect); width=clientrect.right-clientrect.left; height=clientrect.bottom-clientrect.top; bret=true; } return bret; } bool TSWindowsAPI::TSGetMousePointWindow(LONG &rethwnd,LONG x,LONG y) { bool bret=false; rethwnd=0; POINT point; if((x!=-1&&y!=-1)) { point.x=x; point.y=y; } else //::GetCursorPos(&point); My_GetCursorPos(&point); rethwnd=(DWORD)::WindowFromPoint(point); if(rethwnd==NULL) { HWND p=::GetWindow(GetDesktopWindow(),GW_CHILD); //获取桌面窗口的子窗口 p=::GetWindow(p,GW_HWNDFIRST); while(p!=NULL) { if ( ::IsWindowVisible( p ) && ::GetWindow( p, GW_OWNER ) == 0 ) { RECT rc; ::GetWindowRect(p, &rc); if((rc.top <= point.y) && (rc.left <= point.x) && (rc.right >= (point.x-rc.left)) && (rc.bottom >= (point.y-rc.top))) { wchar_t WindowClass[MAX_PATH] = {0}; ::GetClassName(p,WindowClass,MAX_PATH); //if((windowpoint.x==0||windowpoint.x=0&&type<16) bret=true; return bret; } bool TSWindowsAPI::TSSetWindowTransparent(LONG hwnd,LONG trans) { bool bret=false; COLORREF crKey=NULL; DWORD dwFlags=0; BYTE bAlpha=0; if(trans<0) trans=0; if(trans>255) trans=255; typedef bool (__stdcall * mySetLayeredWindowAttributes)( HWND hwnd, COLORREF pcrKey, BYTE pbAlpha, DWORD pdwFlags); mySetLayeredWindowAttributes obj_SetLayeredWindowAttributes= NULL; HINSTANCE hlibrary; hlibrary = LoadLibrary(_T("user32.dll")); obj_SetLayeredWindowAttributes=(mySetLayeredWindowAttributes)GetProcAddress(hlibrary,"SetLayeredWindowAttributes"); SetWindowLong((HWND)hwnd, GWL_EXSTYLE,0x80001); bret=obj_SetLayeredWindowAttributes((HWND)hwnd, crKey,trans,2); return bret; } bool TSWindowsAPI::TSSetClipboard(wchar_t *values) { bool bret=false; int n=::WideCharToMultiByte (CP_ACP,0,values,-1,NULL,0,NULL,NULL); char *chcontent=new char[n+1]; memset(chcontent,0,sizeof(char)*n+1); WideCharToMultiByte (CP_ACP,0,values,-1,chcontent,n,NULL,NULL); if (OpenClipboard(NULL)) { //将剪贴板内容清空 EmptyClipboard(); //字节长度 int leng=strlen(chcontent)+1; //在堆上分配可移动的内存块,程序返回一个内存句柄 HANDLE hClip=GlobalAlloc(GHND | GMEM_SHARE,leng); //定义指向字符型的指针变量 char * buff; //对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加一 buff=(char *)GlobalLock(hClip); //将用户输入的数据拷贝到指针变量中,实际上就是拷贝到分配的内存块中 memcpy(buff,chcontent,leng); buff[leng-1]=0; //数据写入完毕,进行解锁操作,并将引用计数器数字减一 GlobalUnlock(hClip); //将存放有数据的内存块放入剪贴板的资源管理中 HANDLE help = SetClipboardData(CF_TEXT,hClip); //关闭剪贴板,释放剪贴板资源的占用权 CloseClipboard(); //MessageBox(0,L"已将数据存入剪贴板",L"剪切扳",0); if(help !=NULL) { bret=true; } else { bret = false; } } delete [] chcontent; return bret; } bool TSWindowsAPI::TSGetClipboard(wchar_t *retstr) { bool bret=false; HANDLE hClip; char *chBuffer=NULL; if (OpenClipboard(NULL)) { //从剪贴板中取出一个内存的句柄 hClip=GetClipboardData(CF_TEXT); //定义字符型指针变量用来保存内存块中的数据 //对内存块进行加锁,将内存句柄值转化为一个指针,并将内存块的引用计数器加一,内存中的数据也返回到指针型变量中 chBuffer=(char *)GlobalLock(hClip); //将数据保存到字符型变量中 //将内存块的引用计数器减一 GlobalUnlock(hClip); //关闭剪贴板,释放剪贴板资源的占用权 CloseClipboard(); } DWORD num= MultiByteToWideChar(CP_ACP,0,chBuffer,-1,NULL,0); wchar_t *wword= new wchar_t[num+1];//动态的申请空间存字 memset(wword, 0, (num+1)*sizeof(wchar_t)); //初始化动作 MultiByteToWideChar(CP_ACP,0,chBuffer,-1,wword,num); if(num