2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
尋找窗口列表中第一個(gè)符合指定條件的頂級(jí)窗口(在vb里使用:FindWindow最常見(jiàn)的一個(gè)用途是獲得ThunderRTMain類的隱藏窗口的句柄;該類是所有運(yùn)行中vb執(zhí)行程序的一部分。獲得句柄后,可用api函數(shù)GetWindowText取得這個(gè)窗口的名稱;該名也是應(yīng)用程序的標(biāo)題)
返回值:Long,找到窗口的句柄。如未找到相符窗口,則返回零。會(huì)設(shè)置GetLastError
參數(shù):lpClassName ---- String,指向包含了窗口類名的空中止(C語(yǔ)言)字串的指針;或設(shè)為vbNullString,表示接收任何類
lpWindowName --- String,指向包含了窗口文本(或標(biāo)簽)的空中止(C語(yǔ)言)字串的指針;或設(shè)為零,表示接收任何窗口標(biāo)題
很少要求同時(shí)按類與窗口名搜索。為向自己不準(zhǔn)備參數(shù)傳遞一個(gè)零,最簡(jiǎn)便的辦法是傳遞vbNullString常數(shù)
示例
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"

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
FindWindowEx函數(shù)
函數(shù)功能:在窗口列表中尋找與指定條件相符的第一個(gè)子窗口 。
該函數(shù)獲得一個(gè)窗口的句柄,該窗口的類名和窗口名與給定的字符串相匹配。這個(gè)函數(shù)查找子窗口,從排在給定的子窗口后面的下一個(gè)子窗口開始。在查找時(shí)不區(qū)分大小寫。
參數(shù):(1)hwndParent:要查找的子窗口所在的父窗口的句柄(如果設(shè)置了hwndParent,則表示從這個(gè)hwndParent指向的父窗口中搜索子窗口)。
如果hwndParent為 0 ,則函數(shù)以桌面窗口為父窗口,查找桌面窗口的所有子窗口。
Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函數(shù)僅查找所有消息窗口。
?。?)hwndChildAfter :子窗口句柄。查找從在Z序中的下一個(gè)子窗口開始。子窗口必須為hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter為NULL,查找從hwndParent的第一個(gè)子窗口開始。如果hwndParent 和 hwndChildAfter同時(shí)為NULL,則函數(shù)查找所有的頂層窗口及消息窗口。
?。?)lpszClass:指向一個(gè)指定了類名的空結(jié)束字符串,或一個(gè)標(biāo)識(shí)類名字符串的成員的指針。如果該參數(shù)為一個(gè)成員,則它必須為前次調(diào)用theGlobaIAddAtom函數(shù)產(chǎn)生的全局成員。該成員為16位,必須位于lpClassName的低16位,高位必須為0。
?。?)lpszWindow:指向一個(gè)指定了窗口名(窗口標(biāo)題)的空結(jié)束字符串。如果該參數(shù)為 NULL,則為所有窗口全匹配。
返回值:Long,找到的窗口的句柄。如未找到相符窗口,則返回零。會(huì)設(shè)置GetLastError
如果函數(shù)成功,返回值為具有指定類名和窗口名的窗口句柄。如果函數(shù)失敗,返回值為NULL。
若想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用GetLastError函數(shù)。
聲明:1.VB 聲明
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
2.C# 聲明
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
3.VB .NET 聲明
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
ByVal childAfter As IntPtr, _
ByVal lclassName As String, _
ByVal windowTitle As String) As IntPtr
End Function
相關(guān)例子:
'Example Name: Changing a VB Toolbar to a Rebar-Style Toolbar
BAS Moduel Code
Option Explicit
Public Const WM_USER= &H400
Public Const TB_SETSTYLE = WM_USER + 56
Public Const TB_GETSTYLE = WM_USER + 57
Public Const TBSTYLE_FLAT = &H800
Public Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public 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
'--end block--'
' Form Code
Option Explicit
Private Sub Form_Load()
With Combo1
.Width = Toolbar1.Buttons("combo1").Width
.Top = (Toolbar1.Height - Combo1.Height) \ 2
.Left = Toolbar1.Buttons("combo1").Left
.AddItem "Black" ' Add colours for text.
- 2 回答
- 0 關(guān)注
- 191 瀏覽
添加回答
舉報(bào)