vb.net句柄窗口数据,vb获取句柄

在vb.net中什么是窗口句柄 高手用通俗语言解释

句柄是 Windows 系统中的概念,和VB.NET无关。

为丽江等地区用户提供了全套网页设计制作服务,及丽江网站建设行业解决方案。主营业务为做网站、网站设计、丽江网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

通俗地讲,句柄就是一个数字,也就是一个编号。

比如说,你电脑中有10个窗口,每个窗口都会有一个编号,这是操作系统区分各个窗口的依据

求vb.net句柄实例,实现操作其他程序窗口。如我给的例子

Imports System.Text

Imports System.Runtime.InteropServices

Public Class Form1

' 相关API函数声明,注释掉的这里没用到,但是也比较常用吧,这些函数的功能都能搜到。

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

' 相关消息定义,也有没用到的

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)

' 储存复选框句柄

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 回调函数,该函数名作为API函数EnumChildWindows 的一个参数

' 该函数实现了枚举各个子窗口,找出编辑框属性的功能

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

' 枚举所有主窗口的子窗口(控件),枚举时自动调用回调函数,完成编辑框句柄的获取

EnumChildWindows(WindowHandle, AddressOf EnumChildProcC, 0)

' 寻找复选框

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)

' 对复选框进行鼠标单击操作

SendMessage(CheckHandle, BM_CLICK, 0, 0)

'SendMessage(CheckHandle, BM_SETCHECK, True, 0)

End If

End Sub

End Class

vb.net如何通过窗口句柄获取进程名

Imports System.Runtime.InteropServices

Module winapi

DllImport("User32.dll", CallingConvention:=CallingConvention.StdCall, EntryPoint:="GetWindowThreadProcessId") _

Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef procId As UInt32) As UInt32

End Function

DllImport("kernel32.dll", CallingConvention:=CallingConvention.StdCall, EntryPoint:="OpenProcess") _

Function OpenProcess(ByVal access As UInt32, ByVal inherit As Boolean, ByVal procid As UInt32) As IntPtr

End Function

DllImport("kernel32.dll", CallingConvention:=CallingConvention.StdCall, EntryPoint:="CloseHandle") _

Function CloseHandle(ByVal handle As IntPtr) As Boolean

End Function

DllImport("psapi.dll", CallingConvention:=CallingConvention.StdCall, EntryPoint:="GetModuleFileNameExW", Charset:=CharSet.Unicode) _

Function GetModuleFileNameExW(ByVal hProc As IntPtr, ByVal hMod As IntPtr, ByVal arrName() As Char, ByVal arrSize As UInt32) As UInt32

End Function

End Module

Public Class Form1

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

Dim procid As UInt32

GetWindowThreadProcessId(Me.Handle, procid)

Dim handle As IntPtr

handle = OpenProcess(1040, False, procid)

Dim name(65536) As Char

Dim nameSize As UInt32 = GetModuleFileNameExW(handle, IntPtr.Zero, name, 65536)

Dim strName As String = New String(name, 0, nameSize)

CloseHandle(handle)

MsgBox(strName)

End Sub

End Class

可恶……我不会vb……临时去七拼八凑查了点语法……尽力了

vb.net 窗口句柄获取进程名

FindWindowEx

VB声明

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,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError

参数表

参数

类型及说明

hWnd1

Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)

hWnd2

Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索

lpsz1

String,欲搜索的类名。零表示忽略

lpsz2

String,欲搜索的类名。零表示忽略

vb.net如何通过窗口句柄显示窗口

首先声明一下API

在你窗口最顶的位置上写上

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 - 记事本") '取窗口标题的句柄 把得到窗口标题句柄赋予给刚才 窗口句柄 这变量里

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

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

Else

MsgBox "已找到窗口句柄 句柄数为:" 窗口句柄

End If

End Sub


文章名称:vb.net句柄窗口数据,vb获取句柄
标题来源:http://myzitong.com/article/dsgepei.html