在VB中如何使用FindWindow或FindWindowEx函数查找某窗体句柄

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VB中如何使用FindWindow或FindWindowEx函数查找某窗体句柄相关的知识,希望对你有一定的参考价值。

例如打开一个记事本,他的标题是名称加" - 记事本",用FindWindow或FindWindowEx函数该怎么查找他的句柄?或者只知道那个窗体标题中包含的几个字符,有没有办法查找到它的句柄...请大家帮忙!
对下面几个API并不是很熟悉!如方便的请完整给出代码...或参考资料
最后问题补充:答案无法满足我的条件(很多看不懂的)!对不起...请再详细点!

参考技术A 1.定义一个模块, 内容为:
Option Explicit

Public Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Public Declare Function FindWindowa Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetForegroundWindow Lib "user32" () As Long

2. 给窗口加一个按钮, 在按钮的click事件里写以下内容:
Option Explicit

Private Sub Command1_Click()

Dim hwnd As Long
hwnd = GetForegroundWindow ' FindWindowa("Notepad", "新建 文本文档.txt - 记事本")

Dim str1 As String, len1 As Long
str1 = Space(255) '定义接收字串.
GetWindowText hwnd, str1, 1024

Do While hwnd <> 0
hwnd = GetNextWindow(hwnd, 2) '只有2才表示找下一个窗口
len1 = GetWindowText(hwnd, str1, Len(str1))
If (InStr(1, str1, "记事", 1) > 0) Then
MsgBox "你要的窗口找到了, 它是:" + str1
Exit Sub '这一句看情况修改
End If
Loop
MsgBox "很遣憾, 没有你要找的窗口"
End Sub

3. 测试, 一定会通过..

vb 句柄怎么用

参考技术A OptionExplicit
PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
PrivateSubGetHandle()
DimResultAsLong
Resule=FindWindow(vbNullString,"迅雷看看播放器")'根据窗口标题取得窗体句柄
GetHandle=Result'返回句柄
EndSub
只是简单写了一下,你可以根据自己的要求改一下
刚才写错了。
应该是
OptionExplicit
PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsInteger
PrivateSubGetHandle()
DimResultAsInteger
Resule=FindWindow(vbNullString,"迅雷看看播放器")'根据窗口标题取得窗体句柄
GetHandle=Result'返回句柄
EndSub
.......你用上面的代码出现错误了吗?
我没安装vb,不能验证代码的准确性。
上面的代码已经能返回完整的窗口句柄了,只需要改装一下就好。
OptionExplicit
PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsInteger
PrivateSubGetHandle(strAsString)
DimResultAsInteger
Resule=FindWindow(vbNullString,str)
GetHandle=Result
EndSub
好久不用vb了,不知道写的格式对不对。改成这样的话,我们调用一下:
dimrHandle
rHandle=GetHandle("QQ2010")
rHandle=GetHandle("迅雷看看播放器")
等等。。。。
还有一种。是直接查找文件名。
我原来做的搞怪程序,会在制定日期查找wordexcel文件,并全部重命名。
里面用到了自动关闭其他程序。我发给你吧。
参考技术B 句柄主要用于对象的操作(这不同于内核不需要句柄可以直接操作对象体)
比如:
进程句柄可以通过
openprocess获取,句柄就代表了该进程对象,所有对该进程的操作都是可以通过该句柄来实现的,比如结束结束进程TerminateProcess
等等
还有类似像文件句柄(CreateFile/fopen),事件句柄等等
简单说就是为了操作对象

以上是关于在VB中如何使用FindWindow或FindWindowEx函数查找某窗体句柄的主要内容,如果未能解决你的问题,请参考以下文章

关于vb2005中用到的arp函数findwindow无法在user32.dll中找不到findwindowA接口

如何获取窗体中组件的句柄

vb代码之------FindWindow and FindWindowEx控制其他程序

请问vb中如何查找程序里面的多个文本框(或其他控件)的句柄啊?

vb如何控制其他程序?

VB中findwindowex函数的用法。。