vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息

vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息,第1张

哥们我用C++做过这样的程序,VB也一样

,你可以在你要控制的程序的文本框中先输入指定的问题假如“ABC”,用EnumChildWindows可以遍历出该句柄下所有控件的句柄,再用GetWindowText取出每个控件

句柄的文本参数,发现为"ABC"就返回该控件句柄

句柄找到了,用SendMessage(Handle,WM_SETTEXT)可以设置你想做的任意值

API:

GetForegroundWindow

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

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

比如下面的代码:Private Sub Command1_Click()

Dim x As Long

x = Shell("1exe")

Label1Caption = Str(x)

End Sub运行了1exe并且在label标签上显示了该程序的句柄

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

这个窗口是一个picturebox,我要获得他的句柄,以便应用lio和movetoex函数

望知道者告知,不胜感激!!!!!

可以的话最好带代码!!!!!

解析:

picture1hwnd 用hwnd这个属性就可以了,这个属性就代表此控件的句柄

通过句柄 获得类里面的信息 就获得了文本了 追问: 那给个源码参考下,谢谢 回答: zzz如何获得其他程序的EDIT控件中的内容呢?第一个想法就是使用GetWindowText函数,设定其内容的话就是SetWindowText函数,其实不对,这两个函数对于其他的控件都能够正常工作,唯独对于EDIT控件不行,我在这边困惑了好久,甚至想去逆向一下程序,看看到底有没有发送WM_GETTEXT命令和WM_SETTEXT命令了,幸好有google。省却一番功夫。贴一段不能成功的代码 Code#include <windowsh>BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){char className[]="notepad";//HWND hWnd=::FindWindow(className,NULL);HWND hWnd=::FindWindow(NULL,"夏娃");if(hWnd){::EnumChildWindows(hWnd,EnumChildProc,0);return 0;}MessageBox(NULL,"fail!","fail",MB_OK);return 0;}BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam){char temp1[256],temp2[256],temp3[256];::GetClassName(hWnd,temp1,255);::GetWindowText(hWnd,temp2,255);::wsprintf(temp3,"classname: %s windowtext: %s",temp1,temp2);::MessageBox(NULL,temp3,"cwnd",MB_OK);return true;}/BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam){char temp1[256],temp2[256];::GetClassName(hWnd,temp1,255);if(!::strcmp(temp1,"Edit")){MessageBox(NULL,"Edit","cwnd",MB_OK);//使用sendmessage::strncpy(temp1,"fuck",5);::SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)temp1);return 0;}::wsprintf(temp2,"classname: %s",temp1);MessageBox(NULL,temp2,"cwnd",MB_OK);return true;}/黑色部分的程序永远也不会获得EDIT中的内容,对于SetWindowText也是一样的被注释掉的部分是能够成功的代码,调用了SendMessage函数发送WM_SETTEXT命令到目标程序中,成功了,如果想要获取目标EDIT中的内容的话则需要发送WM_GETTEXT命令,具体的程序还没有试, 追问: VB代码!———— 回答: 晕死 我替你拿老板工资得了 不会读懂意思吗 这样你还怎么学习进步呀不说 追问: 我只是随便做个软件!老板!我也不是工具!我是说你能个给VB的代码吗,这不是C语言的代码吗,我没学过 回答: 我不懂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

'这是定义获得窗口句柄的API函数

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 '这句是定义向获得窗口句柄发送按键消息的API函数

例子:你先建一个工程

form1caption="12345

画一个command1 名字为 "确定1"

事件

Private Sub Command1_Click()

msgbox MeHwnd '显示确定按钮的句柄

End Sub

生成12345exe

关闭VB6

打开VB6

再建一个工程 代码如下:

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, lParam As Any)

Private Declare Function SetForegroundWindow Lib "user32" (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 Const WM_LBUTTONDOWN = &H201

Private Const WM_LBUTTONUP = &H202

Private Const MK_LBUTTON = &H1

Dim hpwnd As Long, hcwnd As Long

Dim iResult As Long

Private Sub Command1_Click()

hpwnd = FindWindow(vbNullString, "12345")

hcwnd = FindWindowEx(hpwnd, 0, vbNullString, "确定")

SetForegroundWindow hcwnd

iResult = SendMessage(hcwnd, WM_LBUTTONDOWN, 0, 0&)

iResult = SendMessage(hcwnd, WM_LBUTTONUP, 0, 0&)

End Sub

然后先运行 事先生成好的12345exe

再运行后建的那个

你单击确定 就会使12345exe的确定按钮被单击 返回它的hwnd

我的方法是先找到12345exe的主窗口 然后根据主窗口的句柄获得其确定按钮的句柄 再使用sendmessage 发送模拟鼠标左键单击

VB控件的句柄 一般可用mehwnd 方法获得

以上就是关于vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息全部的内容,包括:vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息、VB 如何 获得光标所在窗体控件的句柄、VB 运行一个程序,并获取句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9811639.html

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

发表评论

登录后才能评论

评论列表(0条)

保存