1. 蓬莱阁传说 | 蓬莱阁旁! | 神话故事!首页
  2. 民间故事

VB获取指定窗体上类名为Edit的句柄

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

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 SendMessage Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_SETTEXT = &HC

Private Sub Form_Load()

tWnd1 = FindWindow(vbNullString, \"“万能解码器”安装 \") \'找父窗口句柄(已找到)

If tWnd1 <> 0 Then

tWnd2 = FindWindowEx(tWnd1, 0, \"#32770\", \"\") \'找首个子窗体句柄(已找到)

tWnd3 = FindWindowEx(tWnd2, 0, \"Edit\", vbNullString) \'取得Edit文本框句柄(死活找不着)

If tWnd3 <> 0 Then SendMessage tWnd3, WM_SETTEXT, 0, ByVal \"123456789\"

End If

End Sub

如果通过VB读取另一个应用程序窗口显示的信息

首先要创建一个独立透明窗口,透明窗口不多介绍,百度一下

“易语言怎么只要DNFchina.exe这个进程启动,就会在桌面上显示是浮在桌面上”

这个好说,只需要一个时钟监测即可,用到的命令‘进程是否存在(“DNFchina.exe”)’

全部代码为

判断(进程是否存在(“DNFchina.exe”)=真)

载入(透明窗口,,假)

如果还要“要出现在DNF旁边”,那就需要API来获取“DNFchina.exe”进程窗口所在位置,然后定义透明窗口的左边、顶边。

小提示:

1.获得窗口位置需要先取得窗口句柄,用API:FindWindowExa

2.获得窗口位置信息用API:GetWindowRect

以上API可在易语言‘API助手’中查找到。

给你个例子,用VB获取记事本的文本框内容,要求记事本的窗口标题是“无标题 - 记事本”,不是的话要改下代码。

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?GetWindowText?Lib?\"user32\"?Alias?\"GetWindowTextA\"?(ByVal?hwnd?As?Long,?ByVal?lpString?As?String,?ByVal?cch?As?Long)?As?Long

Private?Declare?Function?GetWindowTextLength?Lib?\"user32\"?Alias?\"GetWindowTextLengthA\"?(ByVal?hwnd?As?Long)?As?Long

Private?Declare?Function?SendMessage?Lib?\"user32\"?Alias?\"SendMessageA\"?(ByVal?hwnd?As?Long,?ByVal?wMsg?As?Long,?ByVal?wParam?As?Long,?lParam?As?Any)?As?Long

Private?Declare?Sub?RtlMoveMemory?Lib?\"KERNEL32\"?(lpvDest?As?Any,?lpvSource?As?Any,?ByVal?cbCopy?As?Long)

Private?Const?WM_GETTEXT?=?&HD

Private?Const?WM_GETTEXTLENGTH?=?&HE

Private?Sub?Command1_Click()

Dim?lHwnd?As?Long

Dim?lChildHwnd?As?Long

Dim?strRet?As?String

Dim?n?As?Long

Dim?bArr()?As?Byte,?bArr2()?As?Byte

lHwnd?=?FindWindow(vbNullString,?\"无标题?-?记事本\")

If?lHwnd?>?0?Then

lChildHwnd?=?FindWindowEx(lHwnd,?0&,?\"Edit\",?vbNullString)

If?lChildHwnd?>?0?Then

\'?获取文本长度

n?=?SendMessage(lChildHwnd,?WM_GETTEXTLENGTH,?0,?0)

If?n?>?0?Then

\'?设置缓冲区

ReDim?bArr(n?+?1)?As?Byte

ReDim?bArr2(n?-?1)?As?Byte

Call?RtlMoveMemory(bArr(0),?n,?2)

\'发送?WM_GETTEXT?消息

Call?SendMessage(lChildHwnd,?WM_GETTEXT,?n?+?1,?bArr(0))

Call?RtlMoveMemory(bArr2(0),?bArr(0),?n)

\'?得到文本

strRet?=?StrConv(bArr2,?vbUnicode)

MsgBox?strRet

End?If

End?If

End?If

End?Sub

其中记事本的文本框的类名是\"Edit\",如果不知道你想获取的第三方程序界面里面,控件的类名,可以通过SPY++获取,如图所示,把十字靶拖到控件上面,可以显示类名