1樓:匿名使用者
找子視窗要用spy++
////////
private declare function findwindowex lib "user32" alias "findwindowexa" (byval hwnd1 as long, byval hwnd2 as long, byval lpsz1 as string, byval lpsz2 as string) as long
看裡面的引數,第一個和第二個:byval hwnd1 as long,byval hwnd2 as long,這裡都需要傳入控制代碼,再看第三個和第四個:byval lpsz1 as string, byval lpsz2 as string,這裡所要傳入的是字串。
具體意思如下:
hwnd1 ---------- long,在其中查詢子的父視窗。如設為零,表示使用桌面視窗(通常說的頂級視窗都被認為是桌面的子視窗,所以也會對它們進行查詢)
hwnd2 ---------- long,從這個視窗後開始查詢。這樣便可利用對findwindowex的多次呼叫找到符合條件的所有子視窗。如設為零,表示從第一個子視窗開始搜尋
lpsz1 ---------- string,欲搜尋的類名。零表示忽略,注意一般傳入vbnullstring
lpsz2 ---------- string,欲搜尋的類名。零表示忽略,注意一般傳入vbnullstring
用實踐幫我們分析,這裡還是拿記事本開刀。開啟一個記事本,新建一個標準exe,接著新建一個commandbutton,caption設定為:設定文字。ok,寫入以下**:
private declare function findwindow lib "user32" alias "findwindowa" (byval lpclassname as string, byval lpwindowname as string) as long
private declare function findwindowex lib "user32" alias "findwindowexa" (byval hwnd1 as long, byval hwnd2 as long, byval lpsz1 as string, byval lpsz2 as string) as long
private declare function enablewindow lib "user32" (byval hwnd as long, byval fenable as long) as long
private sub command1_click()
dim windowhandle as long, childwindowhandle as long
windowhandle = findwindow(vbnullstring, "無標題 - 記事本")
if windowhandle then '如果獲取控制代碼成功
childwindowhandle = findwindowex(windowhandle, 0, "edit", vbnullstring)
if childwindowhandle then '如果成功獲取子控制代碼
enablewindow childwindowhandle, false '禁用子視窗
else
msgbox "無法獲取子視窗"
end if
end if
end sub
好了,幫大家分析。看第一行:dim windowhandle as long, childwindowhandle as long,用於儲存獲取的控制代碼的。
windowhandle = findwindow(vbnullstring, "無標題 - 記事本")這個就不用講了,上面已經講過。
childwindowhandle = findwindowex(windowhandle, 0, "edit", vbnullstring),這一段是通過我們已經獲取的記事本控制代碼獲取其中的子視窗控制代碼。大家可以用spy++檢視到記事本的textbox類,然後根據類名寫入即可。
enablewindow childwindowhandle, false 這又是一個新的api,雖然前面我沒有前過,但是這個api使用起來及其簡單。這個api中有兩個引數,第一個理所當然是傳入視窗控制代碼,第二個為long變數,其實這裡應該設為boolean變數好些,主要是用來處理當前視窗是否可用。true可用,false禁用。
現在f5執行,記得開啟記事本哦,然後點選command1,看看能不能在記事本的文字框中輸入字串?是否被禁用了?
2樓:
你是想找哪一個控制代碼啊,,你按視窗標題直接找不就得了,findwindow就可以直接返回控制代碼,不是更快嗎 。相關宣告估計你也知道
vb中findwindowex函式的用法。。
3樓:匿名使用者
這個函式在msdn裡有詳細描述,請查詢。
4樓:匿名使用者
尋找視窗列表中第一個符合指定條件的頂級視窗(在vb裡使用:findwindow最常見的一個用途是獲得thunderrtmain類的隱藏視窗的控制代碼;該類是所有執行中vb執行程式的一部分。獲得控制代碼後,可用api函式getwindowtext取得這個視窗的名稱;該名也是應用程式的標題)
返回值:long,找到視窗的控制代碼。如未找到相符視窗,則返回零。會設定getlasterror
引數:lpclassname ---- string,指向包含了視窗類名的空中止(c語言)字串的指標;或設為vbnullstring,表示接收任何類
lpwindowname --- string,指向包含了視窗文字(或標籤)的空中止(c語言)字串的指標;或設為零,表示接收任何視窗標題
很少要求同時按類與視窗名搜尋。為向自己不準備引數傳遞一個零,最簡便的辦法是傳遞vbnullstring常數
示例dim hw& , cnt&
dim rttitle as string * 256
hw& = findwindow("thunderrt5main", vbnullstring) ' thunderrtmain under vb4
cnt = getwindowtext(hw& , rttitle, 255)
msgbox left$(rttitle, cnt), 0, "rtmain title"
在vb中,已知主視窗控制代碼,如何用findwindowex找到第二個文字框的控制代碼
5樓:匿名使用者
首先,一個視窗的控制代碼根本不是固定的,所以用常量來表示一個視窗控制代碼是不合適的。vb的窗體都有一個名為hwnd的屬性,這個屬性裡儲存的就是這個視窗的控制代碼。
其次,「#32770」是普通窗體的視窗類名,如果要找這樣的視窗,可以用handle = findwindow(視窗類名, 視窗名)來尋找它。
如果要尋找子視窗的控制代碼,假設父視窗的控制代碼為phandle,那麼可以用chandle = findwindowex(phandle, 0, 子視窗類名, vbnullstring)來完成。此時,找到的是父視窗內第一個類名為「子視窗類名」的子視窗。如果要找到下一個子視窗,需要用chandle2 = findwindowex(phandle, chandle, 子視窗類名, vbnullstring)來完成。
現在,已經知道了第一個子視窗的控制代碼為h1,子視窗類名為"edit",那麼我們可以用如下語句來尋找第二個子視窗:
h2 = findwindowex(874523, h1, "edit", vbnullstring)
不過還是建議用一個變數來儲存父視窗的控制代碼。順便說一下,如果此時h2為0,那就是說,這個父視窗內沒有第二個類名為"edit"的子視窗了。
6樓:
h2=findwindowex(874523,h1,"edit",vbnullstring)
findwindowex()函式為什麼總是返回空? 30
7樓:匿名使用者
既然是findwindowexw了,那就改成l"button",這樣的形式吧。 另外確定這個button在主視窗上嗎?
求大神指點 findwindowex (0, 0, 字元 (0), 字元 (0)) 這個在vb.net 要怎麼寫呀?
卸妝油的正確用法誰知,卸妝油的正確用法是怎樣的?
不化妝不現實,但是既然化了就一定要卸乾淨。不同牌子的卸妝油使用方法是不一樣的,我給你介紹我用過的幾款卸妝油的使用方法 dhc深層卸妝油,保持手臉乾燥,也就是準備洗臉前直接將卸妝油塗抹在臉部,用指腹輕輕按摩,溶解彩妝及汙垢,尤其是眼部彩妝,輕輕按摩,記住是用卸妝油去溶解不是用手使勁搓掉的,因為眼部 比...
be back的用法,be back用法
第一個意思是,似乎回到了遊戲裡面 第二個就是普通的 回去 的意思 總之,be back就是回去,返回第一個意思是,似乎回到了遊戲裡面第二個就是普通的 回去 的意思 總之,be back就是回去,返回第一個意思是,似乎回到了遊戲裡面第二個就是普通的 回去 的意思 總之,be back就是回去,返回第一...
用法向量求二面角怎么判斷法向量方向
這個很繁瑣的,涉及大量的專業符號,沒辦法打出來,簡單來說就是當結果為負值時,方向相反。用法向量求二面角時,怎樣確定法向量的方向.設的法向量起點在哪?法向量沒有起點 一個面的法向量有無數條 所以你指代哪一個也就說不清了 就光方向相反就已經有無數條了 你說 來的方向?向裡也可以,向外也可以 只要與這個面...