怎样获取其他程序窗口上的事件?(不够分,可另开贴加分,UP者有分)

wingedsteed 2005-01-28 03:03:35
我现在想做一个程序,要获取其他应用程序窗体的事件.获取的事件大概就三种:一是获取程序窗体上的文本框内容.二是获取其他程序的按钮事件.三是获取窗体是否卸载事件.
最好能详细点提供,解决这个问题好回家过年(等一下去排队买火车票,回家前结贴)
...全文
240 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongge2000 2005-01-29
  • 打赏
  • 举报
回复
这里有一个关于HOOK的代码,很全面,改一下之后能满足很多要求
---------------------
VB的是本进程的全局钩子,其它进程VB是不行的,只能是GetWindowText API了,但这个API有很多得不到文本,如QQ的密码框。
aohan 2005-01-29
  • 打赏
  • 举报
回复
这里有一个关于HOOK的代码,很全面,改一下之后能满足很多要求

http://www.cndevx.com/Index.asp

查找

BearHook(代码) 下载看看


CatchWind 2005-01-29
  • 打赏
  • 举报
回复
是挺麻煩的, 至少我還不會.
zpzpzp39941192 2005-01-29
  • 打赏
  • 举报
回复
观望
wingedsteed 2005-01-29
  • 打赏
  • 举报
回复
dongge2000(※秋日私语※:非[版务].灌!)
呵呵,同一程序好做,其它程序VB就难了。
---------------------
我要获取窗体事件的那个程序,我是没源码的,不能修改.现在我只能从自己的程序上去下手,这样是不是比较麻烦?
wingedsteed 2005-01-29
  • 打赏
  • 举报
回复
谢谢各位的帮助.不过问题还是没弄明白,可能是我的水平太低了.
但经过几位高手的回答后,我大概了解了一下思路.谢谢各位高手.先结贴了,等我从家里上来,还没弄懂的话,再开贴问各位高手吧.
dongge2000 2005-01-28
  • 打赏
  • 举报
回复
SetWindowLong
这个API只是本进程好用,如果写成两个程序是不可能成功的。
dongge2000 2005-01-28
  • 打赏
  • 举报
回复
就好像要实现一个这样的功能:
比如正打登陆一个QQ的窗体,这时我想获取QQ号码是多少,密码是多少.这时如果用户单击了登陆则执行相应的命令.登陆窗口消失后,又执得另外一命令.如果用户单击了取消,程序早执行另一命令.
大概的用意就是这样,当然我不是去偷QQ.麻烦各位高手出马.(不知道我的需求说清楚没?)
---------------------
呵呵,同一程序好做,其它程序VB就难了。
云中客 2005-01-28
  • 打赏
  • 举报
回复
顶一下
wingedsteed 2005-01-28
  • 打赏
  • 举报
回复
tanaya(蜡笔小新) 给我一点思路嘛,我还从没接触过这方面的.呵,,是个刚入门的.
ljhdi 2005-01-28
  • 打赏
  • 举报
回复
看看
唐古拉山 2005-01-28
  • 打赏
  • 举报
回复
这题目太容易了吧?
撸大湿 2005-01-28
  • 打赏
  • 举报
回复
哇,研究研究二楼的东西
wingedsteed 2005-01-28
  • 打赏
  • 举报
回复
就好像要实现一个这样的功能:
比如正打登陆一个QQ的窗体,这时我想获取QQ号码是多少,密码是多少.这时如果用户单击了登陆则执行相应的命令.登陆窗口消失后,又执得另外一命令.如果用户单击了取消,程序早执行另一命令.
大概的用意就是这样,当然我不是去偷QQ.麻烦各位高手出马.(不知道我的需求说清楚没?)
wingedsteed 2005-01-28
  • 打赏
  • 举报
回复
谢谢楼上二位的回答.

钩子Hook是什么东西呀?
还有我现在获取的程序不是我做的,我无法在上面加什么东西.
  • 打赏
  • 举报
回复
发消息好一些吧。给你个采用消息机制在进程间通讯的例子,改一下,基本能满足要求.

发送端:
向指定窗口发送自定义消息,同时将数据放入剪贴版

接收端:
设置消息响应处理函数
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
然后处理消息,获得剪贴版内容既可

------------------------------------------------------------------

一个窗体,一个模块:
窗体(两个按钮,一个textbox):
Option Explicit
Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long

Private Sub Command1_Click()
Dim i As Long
If VBA.IsNumeric(Text1.Text) = False Then
MsgBox "TextBox中只能输入整数,若想输入任意字符,最简单的就是利用剪贴板,不过,还是建议自行研究存储器公用"
Exit Sub
End If
i = CLng(Text1.Text)
Call BroadcastSystemMessage(BSF_POSTMESSAGE, BSM_APPLICATIONS, WM_TEST, 0&, ByVal i)
End Sub

Private Sub Command2_Click()
Text1.Text = mNumber
End Sub

Private Sub Form_Load()
WM_TEST = RegisterWindowMessage("hello")
Command1.Caption = "Set Number"
Command2.Caption = " Get Number"
Text1.Text = ""
Hook Me.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnHook Me.hwnd
End Sub

模块:
Option Explicit
Public Const BSF_POSTMESSAGE = &H10
Public Const BSM_APPLICATIONS = &H8
Public Const GWL_WNDPROC = -4
Public Declare Function BroadcastSystemMessage Lib "user32" (ByVal dw As Long, pdw As Long, ByVal un As Long, ByVal wParam As Long, ByVal lparam As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lparam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public mNumber As Long
Global lpPrevWndProc As Long
Public WM_TEST As Long

Public Sub Hook(ByVal hwnd As Long)
lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHook(ByVal hwnd As Long)
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lparam As Long) As Long
If uMsg = WM_TEST Then
mNumber = lparam
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lparam)
End If
End Function

编译2次,生成两个exe文件,测试
viena 2005-01-28
  • 打赏
  • 举报
回复
用钩子Hook?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧