123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405 |
- #include "StdAfx.h"
- #include "TSWindowsAPI.h"
- #include <Tlhelp32.h>
- #include <psapi.h>
- #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;i<IsEuemprosuccess;i++)
- {
- if(dwPID==npid[i])
- return TRUE;
- }
- }
- return FALSE;
- }
- DWORD TSWindowsAPI::FindChildWnd(HWND hchile, wchar_t *title,wchar_t *classname,wchar_t *retstring,bool isGW_OWNER,bool isVisible,wchar_t *process_name)
- {
- hchile=::GetWindow(hchile,GW_HWNDFIRST);
- while(hchile!=NULL)
- {
- if(isGW_OWNER) //判断是否要匹配所有者窗口为0的窗口,即顶级窗口
- if(::GetWindow(hchile,GW_OWNER)!=0)
- {
- hchile=::GetWindow(hchile,GW_HWNDNEXT); //获取下一个窗口
- continue;
- }
- if(isVisible) //判断是否匹配可视窗口
- if(::IsWindowVisible( hchile )==false)
- {
- hchile=::GetWindow(hchile,GW_HWNDNEXT); //获取下一个窗口
- continue;
- }
- if(title==NULL&&classname==NULL)
- {
- if(process_name)
- {
- 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)
- {
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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,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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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,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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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(indexpid<IsEuemprosuccess)
- {
- indexpid++;
- processpid=pid;
- memset(retstring,0,retstringlen);//清空返回字符串
- retstringlen=0;
- }
- }
- if(processpid==pid)
- {
- 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;
- }
- }
- }
- }
- 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;i<IsEuemprosuccess;i++)
- {
- if(retstringlen==0)
- retstringlen=wcslen(retstring);
- if(retstringlen>1)
- 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<rc.left)&&wcscmp(WindowClass,L"CabinetWClass")!=0) //IE框窗体排除在外
- if(wcscmp(WindowClass,L"CabinetWClass")!=0) //IE框窗体排除在外
- {
- rethwnd=(DWORD)p;
- bret=true;
- break;
- }
- }
- }
- p=::GetWindow(p,GW_HWNDNEXT); //获取下一个窗口
- }
- }
- else
- bret=true;
- return bret;
- }
- int TSWindowsAPI::GetProcessNumber()//获取CPU个数
- {
- SYSTEM_INFO info;
- GetSystemInfo(&info);
- return (int)info.dwNumberOfProcessors;
- }
- // 时间格式转换
- __int64 TSWindowsAPI::FileTimeToInt64(const FILETIME& time)
- {
- ULARGE_INTEGER tt;
- tt.LowPart = time.dwLowDateTime;
- tt.HighPart = time.dwHighDateTime;
- return(tt.QuadPart);
- }
- double TSWindowsAPI::get_cpu_usage(DWORD ProcessID) //获取指定进程CPU使用率
- {
- //cpu数量
- static int processor_count_ = -1;
- //上一次的时间
- static __int64 last_time_ = 0;
- static __int64 last_system_time_ = 0;
- FILETIME now;
- FILETIME creation_time;
- FILETIME exit_time;
- FILETIME kernel_time;
- FILETIME user_time;
- __int64 system_time;
- __int64 time;
- // __int64 system_time_delta;
- // __int64 time_delta;
- double cpu = -1;
- if(processor_count_ == -1)
- {
- processor_count_ = GetProcessNumber();
- }
- GetSystemTimeAsFileTime(&now);
- //HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION/*PROCESS_ALL_ACCESS*/, false, ProcessID);
- HANDLE hProcess =NULL;
- if(my_OpenProcess)
- {
- hProcess = my_OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- else
- {
- hProcess = OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- if (!hProcess)
- {
- return -1;
- }
- if (!GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time))
- {
- return -1;
- }
- system_time = (FileTimeToInt64(kernel_time) + FileTimeToInt64(user_time)) / processor_count_; //CPU使用时间
- time = FileTimeToInt64(now); //现在的时间
- last_system_time_ = system_time;
- last_time_ = time;
- CloseHandle( hProcess );
- Sleep(1000);
- //hProcess = OpenProcess(PROCESS_QUERY_INFORMATION/*PROCESS_ALL_ACCESS*/, false, ProcessID);
- if(my_OpenProcess)
- {
- hProcess = my_OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- else
- {
- hProcess = OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- if (!hProcess)
- {
- return -1;
- }
- if (!GetProcessTimes(hProcess, &creation_time, &exit_time, &kernel_time, &user_time))
- {
- return -1;
- }
- GetSystemTimeAsFileTime(&now);
- system_time = (FileTimeToInt64(kernel_time) + FileTimeToInt64(user_time)) / processor_count_; //CPU使用时间
- time = FileTimeToInt64(now); //现在的时间
- CloseHandle( hProcess );
- cpu = ((double)(system_time - last_system_time_) / (double)(time - last_time_)) * 100;
- return cpu;
- }
- //或者指定进程内存使用率
- DWORD TSWindowsAPI::GetMemoryInfo(DWORD ProcessID)
- {
- PROCESS_MEMORY_COUNTERS pmc;
- DWORD memoryInK=0;
- HANDLE hProcess=NULL;
- if(my_OpenProcess)
- {
- hProcess = my_OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- else
- {
- hProcess = OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)))
- {
- //memoryInK = pmc.WorkingSetSize/1024; //单位为k
- memoryInK=pmc.WorkingSetSize;
- }
- CloseHandle( hProcess );
- return memoryInK;
- }
- bool TSWindowsAPI::TSGetProcessInfo(LONG pid,wchar_t *retstring)
- {
- bool bret=false;
- wchar_t process_name[MAX_PATH]={0};
- wchar_t process_path[MAX_PATH]={0};
- DWORD cpu=0;
- DWORD meminfo=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(pe32.th32ProcessID==pid)
- {
- wcscpy(process_name,pe32.szExeFile);
- break;
- }
- }
- while(::Process32Next(hProcessSnap, &pe32));
- }
- ::CloseHandle(hProcessSnap);
- if(wcslen(process_name)<1)
- return bret;
- TSRuntime::GetRemoteModulePath(process_name,pid,process_path);
- cpu=(DWORD)get_cpu_usage(pid);
- meminfo=(DWORD)GetMemoryInfo(pid);
- swprintf(retstring,L"%s|%s|%d|%d",process_name,process_path,cpu,meminfo);
- return bret;
- }
- bool TSWindowsAPI::GetProcesspath(DWORD ProcessID,wchar_t* process_path)
- {
- HANDLE hProcess=NULL;
- if(my_OpenProcess)
- {
- hProcess = my_OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- else
- {
- hProcess = OpenProcess(
- PROCESS_QUERY_INFORMATION |
- PROCESS_VM_READ,
- FALSE, ProcessID );
- }
- HMODULE hMods=NULL;
- DWORD cbNeededModule = 0 ;
- EnumProcessModules( hProcess, &hMods, sizeof(hMods), &cbNeededModule ) ;
- GetModuleFileNameEx(hProcess,hMods,process_path,MAX_PATH);
- return true;
- }
- bool TSWindowsAPI::TSGetWindow(LONG hwnd,LONG flag,LONG &rethwnd)
- {
- bool bret=false;
- rethwnd=0;
- HWND wnd=(HWND)hwnd;
- if(IsWindow(wnd)==false)
- return bret;
- DWORD type=-1;
- if(flag==0) //0:获取父窗口
- rethwnd=(LONG)::GetParent(wnd);
- else if(flag==1)//获取第一个儿子窗口
- type=GW_CHILD;
- else if(flag==2)//获取First 窗口
- type=GW_HWNDFIRST;
- else if(flag==3)//获取Last窗口
- type=GW_HWNDLAST;
- else if(flag==4)//获取下一个窗口
- type=GW_HWNDNEXT;
- else if(flag==5)//获取上一个窗口
- type=GW_HWNDPREV;
- else if(flag==6) //获取拥有者窗口
- type=GW_OWNER;
- else if(flag==7) //获取顶层窗口
- rethwnd=(LONG)::GetForegroundWindow();
- if(type!=-1)
- rethwnd=(LONG)::GetWindow(wnd,(UINT)type);
- if(rethwnd!=0)
- bret=true;
- return bret;
- }
- bool TSWindowsAPI::TSGetWindowState(LONG hwnd,LONG flag)
- {
- bool bret=false;
- HWND wnd=(HWND)hwnd;
- if(flag==0) //0://判断窗口是否存在
- bret=::IsWindow(wnd);
- else if(flag==1)//判断窗口是否处于激活
- {
- if(::GetActiveWindow()==wnd)
- bret=true;
- }
- else if(flag==2)//2 : 判断窗口是否可见
- bret=::IsWindowVisible(wnd);
- else if(flag==3)//3 : 判断窗口是否最小化
- bret=::IsIconic(wnd);
- else if(flag==4)//4 : 判断窗口是否最大化
- bret=::IsZoomed(wnd);
- else if(flag==5)//5 : 判断窗口是否置顶
- {
- if(::GetForegroundWindow()==wnd)
- bret=true;
- }
- else if(flag==6) //6 : 判断窗口是否无响应
- bret=::IsHungAppWindow(wnd);
- else if(flag==7) //判断窗口是否可用(灰色为不可用)
- bret=::IsWindowEnabled(wnd);
- return bret;
- }
- bool TSWindowsAPI::TSSendPaste(LONG hwnd)
- {
- bool bret=true;
- HANDLE hClip;
- char *chBuffer=NULL;
- if (OpenClipboard(NULL))
- {
- //从剪贴板中取出一个内存的句柄
- hClip=GetClipboardData(CF_TEXT);
- //定义字符型指针变量用来保存内存块中的数据
- //对内存块进行加锁,将内存句柄值转化为一个指针,并将内存块的引用计数器加一,内存中的数据也返回到指针型变量中
- chBuffer=(char *)GlobalLock(hClip);
- //将数据保存到字符型变量中
- //将内存块的引用计数器减一
- GlobalUnlock(hClip);
- //关闭剪贴板,释放剪贴板资源的占用权
- CloseClipboard();
- }
- //anscii 转 unicode
- 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);
- int len=wcslen(wword);
- //MessageBoxA(NULL,tts,tts,NULL);
- for(int i=0;i<len;i++)
- {
- ::SendMessage((HWND)hwnd,WM_CHAR,(WPARAM)wword[i],(LPARAM)1);
- Sleep(10);
- }
- delete [] wword;
-
- return bret;
- }
- bool TSWindowsAPI::TSSetWindowSize(LONG hwnd, LONG width, LONG hight,int type)
- {
- bool bret=false;
- if(type==0)//SetClientSize
- {
- RECT rectProgram,rectClient;
- HWND hWnd=(HWND)hwnd;
- ::GetWindowRect(hWnd, &rectProgram); //获得程序窗口位于屏幕坐标
- ::GetClientRect(hWnd, &rectClient); //获得客户区坐标
- //非客户区宽,高
- int nWidth = rectProgram.right - rectProgram.left -(rectClient.right - rectClient.left);
- int nHeiht = rectProgram.bottom - rectProgram.top -(rectClient.bottom - rectClient.top);
- nWidth += width;
- nHeiht += hight;
- rectProgram.right = nWidth;
- rectProgram.bottom = nHeiht;
- int showToScreenx = GetSystemMetrics(SM_CXSCREEN)/2-nWidth/2; //居中处理
- int showToScreeny = GetSystemMetrics(SM_CYSCREEN)/2-nHeiht/2;
- bret=::MoveWindow(hWnd, showToScreenx, showToScreeny, rectProgram.right, rectProgram.bottom, false);
- }
- else //SetWindowSize
- {
- RECT rectClient;
- HWND hWnd=(HWND)hwnd;
- ::GetWindowRect(hWnd, &rectClient); //获得程序窗口位于屏幕坐标
- bret=::MoveWindow(hWnd, rectClient.left, rectClient.top, width, hight, false);
- }
- return bret;
- }
- bool TSWindowsAPI::TSSetWindowState(LONG hwnd,LONG flag,LONG rethwnd)
- {
- bool bret=false;
- HWND hWnd=(HWND)hwnd;
- if(IsWindow(hWnd)==false)
- return bret;
- int type=-1;
- type=flag;
- if(flag==0)//关闭指定窗口
- ::SendMessage(hWnd,WM_CLOSE,0,0);
- else if(flag==1)//激活指定窗口
- {
- ::ShowWindow(hWnd,SW_SHOW);
- ::SetForegroundWindow(hWnd);
- }
- else if(flag==2)//最小化指定窗口,但不激活
- ::ShowWindow(hWnd,SW_SHOWMINNOACTIVE);
- else if(flag==3)//最小化指定窗口,并释放内存,但同时也会激活窗口
- ::ShowWindow(hWnd,SW_SHOWMINIMIZED);
- else if(flag==4)//最大化指定窗口,同时激活窗口.
- ::ShowWindow(hWnd,SW_SHOWMAXIMIZED);
- else if(flag==5)//恢复指定窗口 ,但不激活
- ::ShowWindow(hWnd,SW_SHOWNOACTIVATE);
- else if(flag==6)//隐藏指定窗口
- ::ShowWindow(hWnd,SW_HIDE);
- else if(flag==7)//显示指定窗口
- {
- ::ShowWindow(hWnd,SW_SHOW);
- ::SetForegroundWindow(hWnd);
- }
- else if(flag==8)//置顶指定窗口
- ::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//窗口置顶
- else if(flag==9)//9 : 取消置顶指定窗口
- ::SetWindowPos(hWnd, HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- else if(flag==10)//禁止指定窗口
- ::EnableWindow(hWnd,false);
- else if(flag==11)//取消禁止指定窗口
- ::EnableWindow(hWnd,true);
- else if(flag==12)//12 : 恢复并激活指定窗口
- ::ShowWindow(hWnd,SW_RESTORE);
- else if(flag==13)//13 : 强制结束窗口所在进程.
- {
- DWORD pid=0;
- ::GetWindowThreadProcessId(hWnd,&pid);
- TSRuntime::EnablePrivilege(L"SeDebugPrivilege",true);
- HANDLE hprocess=NULL;
- if(my_OpenProcess)
- hprocess=my_OpenProcess(PROCESS_ALL_ACCESS,false,pid);
- else
- hprocess=::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
- ::TerminateProcess(hprocess,0);
- }
- else if(flag==14)//14 : 闪烁指定的窗口
- {
- FLASHWINFO fInfo;
- fInfo.cbSize=sizeof(FLASHWINFO);
- fInfo.dwFlags=FLASHW_ALL | FLASHW_TIMERNOFG;//这里是闪动窗标题和任务栏按钮,直到用户激活窗体
- fInfo.dwTimeout= 0;
- fInfo.hwnd=hWnd;
- fInfo.uCount=0xffffff;
- FlashWindowEx(&fInfo);
- }
- else if(flag==15)//使指定的窗口获取输入焦点
- {
- ::ShowWindow(hWnd,SW_SHOW);
- ::SetFocus(hWnd);
- }
- if(type>=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<MAX_PATH*4-1)
- wcscpy(retstr,wword);
- delete [] wword;
-
- return bret;
- }
|