本文为【win32 API窗口句柄的获得——我的经验】的汉字拼音对照版显示拼音
win32 API窗chuang口kou句ju柄bing的de获huo得de——我wo的de经jing验yan
win32 API窗chuang口kou句ju柄bing的de获huo得de——我wo的de经jing验yan 初chu次ci写xie文wen档dang,文wen笔bi不bu通tong畅chang的de地di方fang,以yi及ji理li解jie错cuo误wu之zhi处chu望wang各ge位wei朋peng友you多duo多duo指zhi正zheng!
这zhe篇pian文wen章zhang是shi关guan于yu如ru何he获huo取qu窗chuang口kou句ju柄bing,以yi及ji有you哪na些xie函han数shu可ke供gong使shi用yong的de简jian单dan讨tao论lun!可ke适shi用yong于yuvc、bcb(其qi他ta的de我wo没mei有you试shi,估gu计ji可ke以yi),本ben人ren在zaibcb环huan境jing下xia试shi验yan。
首shou先xian我wo会hui罗luo列lie出chu一yi些xie获huo取qu句ju柄bing的dewin32 api 函han数shu,然ran后hou简jian单dan说shuo说shuo他ta们men的de用yong途tu!最zui后hou说shuo说shuo我wo是shi怎zen么me理li解jie和he应ying用yong的de。见jian笑xiao了le!
可ke用yong的dewin32 api函han数shu:
1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)
2.HWND WindowFromPoint(POINT& Point)
3.BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)
BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
一yi般ban用yong途tu:
对dui于yu第di一yi种zhong,大da家jia都dou很hen熟shu悉xi,是shi捕bu捉zhuo句ju柄bing的de常chang规gui武wu器qi,FindWindow这zhe两liang兄xiong弟di,可ke以yi接jie受shou捕bu捉zhuo对dui象xiang的de类lei名ming或huo者zhe窗chuang口kou标biao题ti之zhi一yi,作zuo为wei参shen数shu,返fan回hui一yi个geHWND。可ke是shi对dui于yu一yi般ban群qun众zhong,不bu一yi定ding知zhi道dao所suo有you的de窗chuang口kou(包bao括kuo标biao题ti栏lan、按an钮niu等deng等deng)的de类lei名ming啊a!——可ke以yi简jian单dan举ju例li,请qing问wen你ni知zhi道dao桌zhuo面mian图tu标biao的de窗chuang口kou的de类lei名ming吗ma?而er对dui于yu窗chuang口kou标biao题ti,有you可ke能neng会hui出chu现xian相xiang同tong的de标biao题ti,有you两liang个ge窗chuang口kou——指zhi一yi个ge程cheng序xu的de两liang个ge进jin程cheng,这zhe又you是shi个ge麻ma烦fan吧ba!好hao了le,这zhe个ge问wen题ti先xian放fang放fang,继ji续xu下xia一yi组zu。
第di二er组zu,通tong过guowin32定ding义yi的dePOINT结jie构gou(typedef struct tagPOINT { LONG x;
LONG y;} POINT),来lai获huo得de当dang前qian鼠shu标biao光guang标biao位wei置zhi的de窗chuang口kouHWND,这zhe是shi最zui直zhi观guan的de武wu器qi!常chang规gui操cao作zuo如ru下xia:先xian得de到daoCursor的dePOINT(BOOL GetCursorPos(LPPOINT)函han数shu),再zai用yongWindowFromPoint。这zhe样yang,我wo们men几ji乎hu可ke以yi获huo得de任ren何he打da开kai的de有you窗chuang口kou的de函han数shu的deHWND了le!然ran后hou通tong过guo获huo取qu类lei名ming的dewin32 api函han数shu(int GetClassName( HWND hWnd, LPTSTR lpClassName, int nMaxCount ))得de到dao类lei名ming——这zhe里li的delpClassName最zui好hao用yong字zi符fu数shu组zu地di址zhi,nMaxCount就jiu是shi数shu组zu的desize了le,同tong时shi,这zhe种zhong方fang法fa解jie决jue了le第di一yi个ge问wen题ti的de麻ma烦fan!——我wo可ke以yi把ba鼠shu标biao放fang在zai任ren何he地di方fang!*^_^*
第di三san组zu,这zhe些xie是shi用yong来lai列lie举ju和he处chu理li任ren何he窗chuang口kou的de超chao级ji武wu器qi!通tong过guo组zu合he运yun用yongEnumWindows和heEnumWindowsProc,EnumChildWindows与yuEnumChildProc,可ke以yi扫sao描miao桌zhuo面mian所suo有you窗chuang口kou并bing对dui之zhi处chu理li!
我wo的de理li解jie:(这zhe部bu分fen用yong任ren务wu驱qu动dong式shi教jiao学xue方fang法fa——谁shui让rang小xiao弟di是shi老lao师shi呢ne!xi xi)
任ren务wu:得de到dao所suo有you的de窗chuang口kou的de类lei名ming。
解jie决jue办ban法fa1:我wo们men会hui先xian想xiang到dao第di三san组zu,可ke以yi自zi桌zhuo面mian窗chuang口kou开kai始shi(它ta是shi所suo有you窗chuang口kou的de祖zu先xian),依yi次ci扫sao描miao,获huo取qu类lei名ming并bing存cun之zhi。有you点dian儿er像xiangVisual Stdio的deSpy++,或huo者zheBorland 的deWinSight32,具ju体ti办ban法fa如ru下xia:(bcb中zhong)
在zai主zhu程cheng序xu中zhong,调tiao用yongEnumWindows,传chuan入ruYouEnumProc的de函han数shu地di址zhi作zuo第di一yi个ge参shen数shu,别bie忘wang了le转zhuan换huan成chengWNDENUMPROC类lei型xing。第di二er参shen可keNULL。::EnumWindows(reinterpret_cast<WNDENUMPROC> YouEnumProc,NULL);
在zaiYouEnumProc函han数shu中zhong,如ru果guo第di一yi参shenHWND = = NULL,就jiu跳tiao离li(return FALSE;),可ke以yi结jie束shu啦la!
然ran后hou,把ba类lei名ming数shu组zu准zhun备bei好hao,得de到dao类lei名ming,存cun之zhi。
返fan回hui真zhen值zhi,继ji续xu下xia一yi次ci扫sao描miao。
看kan起qi来lai并bing不bu复fu杂duo,是shi一yi种zhong函han数shu递di归gui。但dan是shi我wo可ke会hui解jie释shi!面mian啊a!: p
第di二er种zhong解jie决jue方fang法fa:简jian单dan、直zhi观guan——自zi己ji想xiang出chu来lai的de,颇po得de意yi
首shou先xian准zhun备bei一yi个ge时shi钟zhong,一yi种zhong存cun类lei名ming方fang法fa(我wo用yongTMemo)
在zai定ding时shi器qi处chu理li函han数shu中zhong:
1、得de到dao当dang前qiancursor的de点dian位wei置zhi
2、再zai用yongWindowFromPoint,
3、然ran后hou得de到dao类lei名ming,放fang到daoTMemo里li
这zhe样yang可ke以yi用yong鼠shu标biao获huo得de你ni想xiang要yao的de窗chuang口kou(包bao括kuo按an钮niu等deng),只zhi要yao鼠shu标biao在zai窗chuang口kou放fang一yi会hui儿er。。。哈ha哈ha
第di三san种zhong方fang法fa:其qi实shi利li用yongFindWindow和he循xun环huan结jie构gou也ye应ying该gai可ke以yi
总zong结jie:其qi实shi得de到daoHWND的de方fang法fa很hen多duo,比bi如ru知zhi道dao了le窗chuang口kou层ceng次ci,依yi次ci向xiang下xia扫sao。。。在zai说shuo第di三san种zhong呢ne!但dan我wo觉jiao得de,我wo的de方fang法fa最zui直zhi接jie有you效xiao,你ni说shuo呢ne?
欢huan迎ying大da家jia与yu我wo联lian系xi,并bing讨tao论lun这zhe个ge问wen题ti!有you关guan这zhe个ge问wen题ti我wo还huan有you许xu多duo疑yi问wen,比bi如ruHWND与yuID的de转zhuan换huan,在zai如ruIE页ye面mian中zhong的de表biao单dan控kong件jian的deHWND或huoID,还huan是shi其qi他ta的de东dong东dong,总zong之zhi是shi能neng识shi别bie他ta的de东dong西xi。。。这zhe个ge我wo很hen困kun惑huo,没mei办ban法fa!
不bu清qing楚chu地di方fang,大da家jia要yao参shen照zhaoMSDN啊a!(好hao东dong西xi呀ya!)
【原文】