vb.net句柄找窗口,vbnet獲取當(dāng)前窗口句柄

vb通過句柄獲得窗口名稱

獲取窗體句柄通常有如下幾個API函數(shù):1、用于父窗口,findwindow FindWindowVB聲明Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long說明尋找窗口列表中第一個符合指定條件的頂級窗口(在vb里使用:FindWindow最常見的一個用途是獲得ThunderRTMain類的隱藏窗口的句柄;該類是所有運行中vb執(zhí)行程序的一部分。獲得句柄后,可用api函數(shù)GetWindowText取得這個窗口的名稱;該名也是應(yīng)用程序的標(biāo)題)返回值Long,找到窗口的句柄。如未找到相符窗口,則返回零。會設(shè)置GetLastError參數(shù)表參數(shù)類型及說明lpClassNameString,指向包含了窗口類名的空中止(C語言)字串的指針;或設(shè)為零,表示接收任何類lpWindowNameString,指向包含了窗口文本(或標(biāo)簽)的空中止(C語言)字串的指針;或設(shè)為零,表示接收任何窗口標(biāo)題注解很少要求同時按類與窗口名搜索。為向自己不準(zhǔn)備參數(shù)傳遞一個零,最簡便的辦法是傳遞vbNullString常數(shù)示例Dim hw, cnt

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供涪陵網(wǎng)站建設(shè)、涪陵做網(wǎng)站、涪陵網(wǎng)站設(shè)計、涪陵網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、涪陵企業(yè)網(wǎng)站模板建站服務(wù),10余年涪陵做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

Dim rttitle As String * 256

hw = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4

cnt = GetWindowText(hw, rttitle, 255)

MsgBox Left$(rttitle, cnt), 0, "RTMain title"2、用于子窗口:findwindowexFindWindowExVB聲明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說明在窗口列表中尋找與指定條件相符的第一個子窗口返回值Long,找到的窗口的句柄。如未找到相符窗口,則返回零。會設(shè)置GetLastError參數(shù)表參數(shù)類型及說明hWnd1Long,在其中查找子的父窗口。如設(shè)為零,表示使用桌面窗口(通常說的頂級窗口都被認(rèn)為是桌面的子窗口,所以也會對它們進行查找)hWnd2Long,從這個窗口后開始查找。這樣便可利用對FindWindowEx的多次調(diào)用找到符合條件的所有子窗口。如設(shè)為零,表示從第一個子窗口開始搜索lpsz1String,欲搜索的類名。零表示忽略lpsz2String,欲搜索的類名。零表示忽略 3、獲取窗體標(biāo)題:GetwindowText GetWindowTextVB聲明Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long說明取得一個窗體的標(biāo)題(caption)文字,或者一個控件的內(nèi)容(在vb里使用:使用vb窗體或控件的caption或text屬性)返回值Long,復(fù)制到lpString的字串長度;不包括空中止字符。會設(shè)置GetLastError參數(shù)表參數(shù)類型及說明hwndLong,欲獲取文字的那個窗口的句柄lpStringString,預(yù)定義的一個緩沖區(qū),至少有cch+1個字符大??;隨同窗口文字載入cchLong,lpString緩沖區(qū)的長度注解不能用它從另一個應(yīng)用程序的編輯控件中獲取文字 4、獲取窗體的類名:GetclassName GetClassNameVB聲明Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long說明為指定的窗口取得類名返回值Long,以字節(jié)數(shù)表示的類名長度;排除最后的空中止字符。零表示出錯。會設(shè)置GetLastError參數(shù)表參數(shù)類型及說明hwndLong,欲獲得類名的那個窗口的句柄lpClassNameString,隨同類名載入的緩沖區(qū)。預(yù)先至少必須分配nMaxCount+1個字符nMaxCountLong,由lpClassName提供的緩沖區(qū)長度Top 給你舉例如下:Private Const MaxControlUnit = 65535

Private Sub Command1_Click()

Dim hwnd As Long

Dim hWnd2 As Long

Dim Caption As String * 255

Dim ClassName As String * 255

Dim Output As String

Dim i As Long

hwnd = FindWindow(vbNullString, "Form1")

For i = 0 To MaxControlUnit

hWnd2 = FindWindowEx(hwnd, hWnd2, vbNullString, vbNullString)

If hWnd2 0 Then

GetClassName hWnd2, ClassName, Len(ClassName)

GetWindowText hWnd2, Caption, Len(Caption)

Output = "句柄是:" hWnd2 " " "類名為:" ClassName

MsgBox Output

Output = "標(biāo)題是:" Caption

MsgBox Output

Else

Exit For

End If

Next

End Sub

'只要修改那個form1,改成你要的窗體名,就可以了

求vb.net句柄實例,實現(xiàn)操作其他程序窗口。如我給的例子

Imports?System.Text

Imports?System.Runtime.InteropServices

Public?Class?Form1

'?相關(guān)API函數(shù)聲明,注釋掉的這里沒用到,但是也比較常用吧,這些函數(shù)的功能都能搜到。

Private?Declare?Function?FindWindow?Lib?"user32"?Alias?"FindWindowA"?(ByVal?lpClassName?As?String,?ByVal?lpWindowName?As?String)?As?IntPtr

Private?Declare?Function?FindWindowEx?Lib?"user32"?Alias?"FindWindowExA"?(ByVal?hWnd1?As?IntPtr,?ByVal?hWnd2?As?IntPtr,?ByVal?lpsz1?As?String,?ByVal?lpsz2?As?String)?As?IntPtr

Private?Delegate?Function?EnumChildProc(ByVal?hWnd?As?IntPtr,?ByVal?lParam?As?Integer)?As?Boolean

Private?Declare?Function?EnumChildWindows?Lib?"user32.dll"?(ByVal?hWndParent?As?IntPtr,?ByVal?lpEnumFunc?As?EnumChildProc,?ByVal?lParam?As?Integer)?As?Boolean

Private?Declare?Auto?Function?SendMessage?Lib?"User32.dll"?(ByVal?hWnd?As?IntPtr,?ByVal?Msg?As?Integer,?ByVal?wParam?As?Integer,?ByVal?lParam?As?String)?As?Integer

'Private?Declare?Function?CheckDlgButton?Lib?"user32"?Alias?"CheckDLGButtonA"?(ByVal?hDlg?As?IntPtr,?ByVal?nIDButton?As?IntPtr,?ByVal?wCheck?As?Integer)?As?Integer

Private?Declare?Function?GetClassName?Lib?"user32"?Alias?"GetClassNameA"?(ByVal?hWnd?As?IntPtr,?ByVal?lpClassName?As?StringBuilder,?ByVal?nMaxCount?As?Integer)?As?Integer

'Private?Declare?Function?GetWindowThreadProcessId?Lib?"user32"?Alias?"GetWindowThreadProcessId"?(ByVal?hwnd?As?IntPtr,?ByVal?lpdwProcessId?As?Long)?As?Integer

Private?Declare?Auto?Function?GetWindowTextLength?Lib?"user32"?Alias?"GetWindowTextLength"?(ByVal?hwnd?As?IntPtr)?As?Integer

Private?Declare?Function?GetWindowText?Lib?"user32"?Alias?"GetWindowTextA"?(ByVal?hwnd?As?IntPtr,?ByVal?lpString?As?StringBuilder,?ByVal?cch?As?Integer)?As?Integer

'?相關(guān)消息定義,也有沒用到的

Const?WM_SETTEXT?=?HC

Const?WM_GETTEXT?=?HD

'Const?WM_SETFOCUS?=?H7

'Const?WM_KILLFOCUS?=?H8

'Const?WM_CLOSE?=?H10

'Const?WM_SYSCOMMAND?=?H112

'Const?SC_CLOSE?=?HF060

'Const?SC_MINIMIZE?=?HF020

Const?BM_GETCHECK?=?HF0

Const?BM_SETCHECK?=?HF1

Const?BM_GETSTATE?=?HF2

Const?BM_SETSTATE?=?HF3

Const?BM_SETSTYLE?=?HF4

Const?BM_CLICK?=?HF5

'Const?BM_GETIMAGE?=?HF6

'Const?BM_SETIMAGE?=?HF7

Const?BST_UNCHECKED?=?O0

Const?BST_CHECKED?=?O1

Const?BST_INDETERMINATE?=?O2

'?儲存窗口句柄

Dim?WindowHandle?As?IntPtr

'?儲存兩個(或者多個)編輯框句柄

Dim?EditHandle?As?New?List(Of?IntPtr)

Dim?EditWindowsText?As?List(Of?String)

'?儲存復(fù)選框句柄

Dim?CheckHandle?As?IntPtr?=?0

Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load

Button1_Click(sender,?e)

End?Sub

'?EnumChildWindows?回調(diào)函數(shù),該函數(shù)名作為API函數(shù)EnumChildWindows?的一個參數(shù)

'?該函數(shù)實現(xiàn)了枚舉各個子窗口,找出編輯框?qū)傩缘墓δ?/p>

Public?Function?EnumChildProcC(ByVal?hwnd?As?IntPtr,?ByVal?lParam?As?Integer)?As?Boolean

Dim?dwWindowClass?As?StringBuilder?=?New?StringBuilder(100)

'?獲得某一個句柄的類名

GetClassName(hwnd,?dwWindowClass,?100)

If?dwWindowClass.ToString.Contains("EDIT")?Or?dwWindowClass.ToString.Contains("Edit")?Then?????'?類名包含EDIT的為編輯框

EditHandle.Add(hwnd)????????????????????????'?存儲該句柄

End?If

'?返回?True?一直枚舉完

Return?True

End?Function

Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click

WindowHandle?=?FindWindow(vbNullString,?"登陸")

If?WindowHandle.ToInt32?=?0?Then

MsgBox("未捕獲到窗口"?+?"登陸")

Return

End?If

'?枚舉所有主窗口的子窗口(控件),枚舉時自動調(diào)用回調(diào)函數(shù),完成編輯框句柄的獲取

EnumChildWindows(WindowHandle,?AddressOf?EnumChildProcC,?0)

'?尋找復(fù)選框

CheckHandle?=?FindWindowEx(WindowHandle,?IntPtr.Zero,?vbNullString,?"記住密碼")

Dim?str?As?New?StringBuilder

Dim?j?As?Integer?=?0

'?對編輯框文本賦值

For?j?=?0?To?EditHandle.Count?-?1

SendMessage(EditHandle(j),?WM_SETTEXT,?0,?"Text")

'GetWindowText(EditHandle(j),?str,?20)

'EditWindowsText.Add(Str.ToString)

'Str.Clear()

Next

If?EditHandle.Count?=?0?Then

MsgBox("未找到輸入框!")

End?If????????

If?CheckHandle.ToInt32??0?Then

'CheckDlgButton(WindowHandle,?id,?1)

'?對復(fù)選框進行鼠標(biāo)單擊操作

SendMessage(CheckHandle,?BM_CLICK,?0,?0)

'SendMessage(CheckHandle,?BM_SETCHECK,?True,?0)

End?If

End?Sub

End?Class

vb.net如何通過窗口句柄顯示窗口

首先聲明一下API

在你窗口最頂?shù)奈恢蒙蠈懮?/p>

Private Declare Function 取窗口句柄 Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'由于VB支持中文的 我就定義成 取窗口句柄 這個了

'在窗體中添加一個按鈕里面放進下面代碼就OK了

Private Sub Command1_Click()

Dim 窗口句柄 As Long '聲明窗口句柄變量存儲

窗口句柄 = 取窗口句柄(vbNullString, "新建 文本文檔.txt - 記事本") '取窗口標(biāo)題的句柄 把得到窗口標(biāo)題句柄賦予給剛才 窗口句柄 這變量里

If 窗口句柄 = 0 Then '判斷窗口句柄是否等于0 如果等于0表示無法找到窗口句柄

MsgBox "無法找到需要的窗口句柄"

Else

MsgBox "已找到窗口句柄 句柄數(shù)為:" 窗口句柄

End If

End Sub

vb.net如何查找打開的窗口

將NewForm設(shè)置為全局變量就可以了,如果新建窗口比較多,就設(shè)置為數(shù)組,例如:

Public Class Form1

Dim NewForm(10) As Form

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

NewForm(0) = New Form

NewForm(0).Show()

End Sub

End Class

網(wǎng)站題目:vb.net句柄找窗口,vbnet獲取當(dāng)前窗口句柄
分享鏈接:http://www.muchs.cn/article48/hcppep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、關(guān)鍵詞優(yōu)化外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管網(wǎng)頁設(shè)計公司、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)