VB API如何获取窗口内控件的句柄(急急急!)

VB API如何获取窗口内控件的句柄(急急急!),第1张

用FindWindowEx

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

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

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_KEYDOWN = &H100

Private Const WM_KEYUP = &H101

Dim x

Private Sub Command1_Click()

AppActivate x

Dim NotepadHwnd As Long, hwnd As Long

NotepadHwnd = FindWindow("notepad", vbNullString)

hwnd = FindWindowEx(NotepadHwnd, 0, "Edit", vbNullString) '得到窗口类名为Edit的窗口句柄

a = PostMessage(hwnd, WM_KEYDOWN, &HBB, 0&)

' a = PostMessage(hwnd, WM_KEYUP, &HBB, 0&)

End Sub

Private Sub Form_Load()

x = Shell("notepadexe", vbNormalFocus)

End Sub

如果窗口是现有程序的,使用VS自带的spy++获取窗口的相关信息,然後使用WinAPI获取句柄,具体参考spy++的使用方法和winapi的使用

FindWindow(

lpClassName, {窗口的类名}

lpWindowName: PChar {窗口的标题}

): HWND; {返回窗口的句柄; 失败返回 0}

//FindWindowEx 比 FindWindow 多出两个句柄参数:

FindWindowEx(

Parent: HWND; {要查找子窗口的父窗口句柄}

Child: HWND; {子窗口句柄}

ClassName: PChar; {}

WindowName: PChar {}

): HWND;

如果窗口是你的程序动态生成的,使用如下语句

Form _FORM=new Form();

IntPtr _P = _FORMHandle;

_P就是你实例化的窗口句柄

API:

GetForegroundWindow 可以获取到有焦点的顶层窗口。

获取有焦点的子窗口只能用GetFocus,但是如果当前顶层窗口属于其他线程,GetFocus将返回NULL。没有好的办法解决,除非AttachThreadInput或者用钩子(HOOK)。

一般是用钩子程序的。

比较复杂,只能说个大体思路,要花最少30分钟。分太少了。

API函数的声明就不说了。

先用findwindow找到窗体,用GetWindow和GetClassName获得其窗体内各对象的句柄,从而可以获得文本框的句柄。

最后用SendMessage函数想文本框发送文本。

tWnd = FindWindow(vbNullString, "窗口名")可以获得外部程序窗口的句柄twnd

bwnd = GetWindow(tWnd, GW_CHILD)可以获得该窗口子对象的集合句柄bwnd

Do Until bwnd = 0

GetClassName bwnd, sSave, 250

If InStr(1, UCase(sSave), "EDIT", vbTextCompare) <> 0 Then

editwnd = bwnd

Exit Do

End If

bwnd = GetWindow(bwnd, GW_HWNDNEXT)

Loop

以上代码可以读到该窗口中的第一个文本框的句柄editwnd

SendMessage editwnd, WM_SETTEXT, 6, "王小明"

以上代码向editwnd中写入“王小明”,6表示其长度。该方法写入时,文本框中原有内容全部覆盖。

以上就是关于VB API如何获取窗口内控件的句柄(急急急!)全部的内容,包括:VB API如何获取窗口内控件的句柄(急急急!)、C#获取某应用程序窗体中控件的句柄、VB获取窗口下,鼠标光标位置所在的控件句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10058848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存