vb 获取窗口句柄

我同时打开2个记事本窗口怎么才能获取这2个窗口
我打开一个可以获取,在打开一个就不能获取了,我都快崩溃了
救命,

'创建一个列表框和一个按钮
'API函数定义
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2

Private Sub Command1_Click()
Dim s As Long
Dim a As String

a = Space(255)
s = GetWindow(Me.hwnd, GW_HWNDFIRST) '获得句柄

GetWindowText s, a, 255 '获得标题

Dim ab As String * 255
GetClassName s, ab, 255 '获得类名

Dim ClassName As String
ClassName = StripTerFlag(ab) 'StripTerFlag是一个自定义函数,后面有代码,用于去处结束符
If UCase(ClassName) = "NOTEPAD" Then
List1.AddItem a
List1.ItemData(List1.ListCount - 1) = s
End If

Do While s
DoEvents
s = GetWindow(s, GW_HWNDNEXT) '获得句柄
GetWindowText s, a, 255 '获得标题
GetClassName s, ab, 255 '获得类名
ClassName = StripTerFlag(ab)
If UCase(ClassName) = "NOTEPAD" Then
List1.AddItem a
List1.ItemData(List1.ListCount - 1) = s
End If
Loop

End Sub

Private Sub List1_Click()
MsgBox List1.ItemData(List1.ListIndex) '单击列表框获得句柄
End Sub
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-04
使用一个Timer控件就可以搞定。在本例中再通过GetWindowText函数来处理得到句柄后的操作。

1。新建一个标准VB6的EXE工程,加入Timer控件
2。API函数的声明

private Declare Function GetForegroundWindow Lib "user32" () as Long
private Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" (byval hwnd as Long, _
byval lpString as string, byval cch as Long) as Long

3。在窗体的Load事件中加入代码:

Private Sub Form_Load()
Timer1.Interval = 100 '设置间隔时间
End Sub

4。在Timer控件中的Timer事件中加入代码:

Private Sub Timer1_Timer()
Static CurrentHwnd As Long
Dim ForegroundWindowHwnd As Long
Dim sText As String * 255
ForegroundWindowHwnd = GetForegroundWindow
If ForegroundWindowHwnd = CurrentHwnd Then Exit Sub
CurrentHwnd = ForegroundWindowHwnd
If CurrentHwnd <> hwnd Then
Caption = "ActiveWidow's Caption: " & Left$(sText, GetWindowText(CurrentHwnd, sText, 255))
Else
Caption = "ActiveWindow's Caption: Form1"
End If
End Sub

参考资料:http://dev.csdn.net/article/13/13779.shtm

第2个回答  2009-04-04
同时打开2个记事本,获取这2个窗口句柄只需要遍历顶层窗口句柄就可以

你说的是不是在程序中如何区分这两个句柄
一个是根据窗口标题,来区分

再有就是程序中在时钟事件中通过 API GetForegroundWindow 记录当前活动窗体,可以通过激活一个记事本,这样就可以区分了
第3个回答  2019-04-16
"代码是没错
错的应当是timer没被执行
Private
Sub
Form_Load()
Timer1.Enabled
=
True
Timer1.Interval
=
1000
End
Sub
Private
Sub
Timer1_Timer()
Dim
cc
As
Long
cc
=
FindWindow(vbNullString,
"计算器")
If
cc
=
0
Then
Label1.Caption
=
"程序未能连接成功"
Else
Label1.Caption
=
"连接成功"
End
If
End
Sub"

VB获取窗口句柄的详细教程
1、首先在电脑中打开VB软件,然后点击窗口。2、然后找到窗体布局窗口,就可以在这里,直接拖曳鼠标,设置窗体的位置。3、如果没有默认打开,回到操作页面中,找到并点击如下图的按钮。4、也可以找到stateUpPosition这个属性。5、然后在打开点页面中,就可以根据自己的需要,设置预设的类型了。

VB查找窗口句柄有哪些方法
ByVal lpWindowName As String) As Long'由于VB支持中文的 我就定义成 取窗口句柄 这个了 '在窗体中添加一个按钮里面放进下面代码就OK了Private Sub Command1_Click()Dim 窗口句柄 As Long '声明窗口句柄变量

VB中如何获取未知标题的窗口句柄?
1.如果窗口置于最顶层的话可以用FindWindow 窗口句柄=FindWindow(窗口类名, vbNullString)2.如果窗口是子窗口,先得知他的标识ID,再用GetDlgItem 窗口句柄=GetDlgItem(父窗口句柄, 标识ID)3.还可以用GetWindow找与某源窗口有特定的关系 窗口句柄=GetWindow(父窗口句柄,GW_CHILD)GetWindow第二个参数的介绍...

GetForegroundWindowVB.NET声明
在VB.NET编程中,要获取当前活动窗口的句柄,你可以使用`GetForegroundWindow`函数,这是一个从user32.dll库中导入的函数。这个函数的声明如下:首先,你需要在你的VB.NET代码中引入user32.dll库,通过DllImport指令指定其来源:<DllImport("user32.dll", SetLastError:=True)接下来,定义一个名为GetFor...

VB通过进程名获取窗口句柄?求例子
用API获取,GetWindowThreadProcessId ihwnd, pid 得到进程IDhProcess = OpenProcess(&H1F0FFF, False, pid) 获得进程句柄 例子:Option ExplicitPrivate Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, By...

vb中如何获得一个窗口的句柄
声明:Declare Function GetForegroundWindow Lib "user32" () As Integer 句柄=GetForegroundWindow()这个是获得活动窗口的句柄。

VB 如何得到窗体内控件的句柄
1、findwindow 找到指定标题的窗口 如果这个窗口标题你不知道,那么一个一个遍历吧,或者枚举所有进程(进程名字你总是知道的吧?)然后在遍历整个进程中所有的窗口。通过以上的方法,可以定位到窗口 2、GetWindow 到这个窗口里找控件 使用 GW_CHILD 常数,这样找到的就是这个窗体的子窗体(控件)的句柄了...

怎样用VB抓取窗口的句柄?
找窗体的句柄得用到API了,最常用的是:FindWindow(一般只找父窗口句柄),FindWindowEx(可找子窗口的句柄),给个例子看看,只用到一个command控件,希望可以帮到你,不了解可以再咨询:Option Explicit Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As ...

vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息_百度知 ...
VB也一样 ,你可以在你要控制的程序的文本框中先输入指定的问题假如“ABC”,用EnumChildWindows可以遍历出该句柄下所有控件的句柄,再用GetWindowText取出每个控件 句柄的文本参数,发现为"ABC"就返回该控件句柄 句柄找到了,用SendMessage(Handle,WM_SETTEXT...)可以设置你想做的任意值 ...

VB 如何从一个标题为空的窗体获取该窗体的句柄
尝试用findwindow(类名,"")获取句柄 lpWindowName [in] Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.指向一个空结束的字符串,指定窗口名(窗口标题)。如果该参数为NULL,所有窗口的名称匹配...

相似回答