FindWindow函式的用法

2021-04-18 14:08:39 字數 3240 閱讀 9798

函式的宣告:

declare function findwindow lib "user32" alias "findwindowa" (byval lpclassname as string, byval lpwindowname as string) as long

這個函式有兩個引數,第乙個是要找的視窗的類,第二個是要找的視窗的標題在搜尋的時候不一定兩者都知道,但至少要知道其中的乙個。有的視窗的標題是比較容易得到的,如

"計算器

",所以搜尋時應使用標題進行搜尋。但有的軟體的標題不是固定的,如

"記事本

",如果開啟的檔案不同,視窗標題也不同,這時使用視窗類搜尋就比較方便。如果找到了滿足條件的視窗,這個函式返回該視窗的控制代碼,否則返回0。

前面提到的vb的

findwindow()

函式的宣告將兩個引數都定義為

string

型別,而在實際使用過程中,如果我們忽略某個引數就將該引數的定義又

as string

改為as any

。這裡的as any相當於c語言中的強制型別轉換。例如,如果我們忽略視窗的類,就將定義修改如下:

declare function findwindow lib "user32" alias "findwindowa" (byval lpclassname as any, byval lpwindowname as string) as long

然後,在呼叫時使用如下語句:

hwndcalc = findwindow(0&, "

計算器")

這裡的0&就表示忽略類名。需要注意的是

findwindow(0&, "

計算器")

和findwindow("", "

計算器")

有兩種完全不同的含義,前者表示忽略視窗的類,而後者表示視窗的類是個空串。類似的,我們也可以忽略標題而搜尋指定的類。

從上面的討論中可以看出,如果要搜尋的外部程式的視窗標題比較容易得到,問題是比較簡單的。可如果視窗的標題不固定或者根本就沒有標題,怎麼得到視窗的類呢?如果你安裝了

visual c++

,你可以使用其中的spy++(

如果沒有

vc++

,在vb

的盤上也可以找到

spy)

,在spy++

中有乙個

findwindow

工具,它允許你使用滑鼠選擇視窗,然後

spy++

會顯示這個視窗的類。 在

win32 api

中還有乙個

findwindowex

,它非常適合尋找子視窗。

用法示例

option explicit

private declare function findwindow lib "user32" alias "findwindowa" ( _

byval lpclassname as string, _

byval lpwindowname as string) as long

private declare function postmessage lib "user32" alias "postmessagea" ( _

byval hwnd as long, _

byval wmsg as long, _

byval wparam as long, lparam as any) as long

private declare function getclassname lib "user32" alias "getclassnamea" ( _

byval hwnd as long, _

byval lpclassname as string, _

byval nmaxcount as long) as long

private declare function showwindow lib "user32" ( _

byval hwnd as long, _

byval ncmdshow as long) as long

const sw_shownormal = 1

const wm_close = &h10

public sub test()

dim hwnd as long

'不知道類名

hwnd = findwindow(vbnullstring, "

計算器")

debug.print hwnd

end sub

public sub test2()

dim hwnd as long

'知道計算器視窗的類名是

: scicalc

hwnd = findwindow("scicalc", vbnullstring)

debug.print hwnd

end sub

public sub test3()

dim hwnd as long

dim lpclassname as string

dim retval as long

hwnd = findwindow(vbnullstring, "

計算器")

if hwnd = 0 then msgbox "couldn't find the window ...": exit sub

'show the window

showwindow hwnd, sw_shownormal

'create a buffer

lpclassname = space(256)

'retrieve the class name

retval = getclassname(hwnd, lpclassname, 256)

'show the classname

debug.print "classname: " + left(lpclassname, retval)

'post a message to the window to close it

postmessage hwnd, wm_close, 0&, 0&

end sub

Findwindow函式用法

1.函式說明 findwindow,win32 api函式。findwindow函式返回與指定字串相匹配的視窗類名或視窗名的最頂層視窗的視窗控制代碼。這個函式不會查詢子視窗。2.函式原型 hwnd findwindow lpctstr lpclassname,lpctstr lpwindowname...

c 裡FindWindow的用法

findwindow 函式的用法。要在c 裡使用該api,寫出findwindow 函式的宣告 dllimport coredll.dll entrypoint findwindow private extern static intptr findwindow string lpclassname...

c 裡FindWindow的用法

findwindow 函式的用法。要在c 裡使用該api,寫出findwindow 函式的宣告 dllimport coredll.dll entrypoint findwindow private extern static intptr findwindow string lpclassname...