永发信息网

如何向另一个程序中的按钮发送单击消息

答案:1  悬赏:80  手机版
解决时间 2021-04-01 17:55
  • 提问者网友:且恨且铭记
  • 2021-03-31 21:38
如何向另一个程序中的按钮发送单击消息
最佳答案
  • 五星知识达人网友:想偏头吻你
  • 2021-03-31 22:39
先用FindWindow函数找到程序句柄,再用findWindowEx扭句柄,然后调用sendmessage函数发送消息即可

  Declare Function SendMessage Lib “user32" Alias “SendMessageA" (ByVal hwnd
  As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  SendMessage函数的hwnd参数为接收消息的窗口或控件的hwnd句柄。wMsg参数指定具体的消息值。要发送鼠标左键按下和释放的消息,wMsg的取值分别为WM_LBUTTONDOWN和WM_LBUTTONUP,这两个常量定义如下:

  Const WM_LBUTTONDOWN = &H201
  Const WM_LBUTTONUP = &H202
  把这两个消息发送给一个按钮,按钮就会像真的被鼠标左键单击了一样。SendMessage函数中的后两个参数在本例中可以不理,简单置0即可。
  还有一点细节需注意。如果连续给按钮发送一对WM_LBUTTONDOWN和WM_LBUTTONUP消息,Windows会来不及进行一些必要的系统操作,这样在视觉上就看不出按钮被按下后又放开的效果,好像按钮没有按动。但按钮的Click事件处理过程被激活执行表明按钮确实被按过。为了达到视觉上的完美效果,我们不妨在WM_LBUTTONDOWN和WM_LBUTTONUP两个消息之间插入一段短短的延时,比如说200毫秒,在这段延时期间,把处理权交给Windows,这样Windows就有时间显示按钮被按下的效果了。插入延时的办法有很多,可以加入一段空循环或利用计时器控件,这里再介绍一个API函数GetTickCount,该函数获取自Windows启动至被调用时所经过的毫秒数。利用这个函数控制延时,不仅精确,而且节省资源。
  GetTickCount 函数的接口声明如下:
  Declare Function GetTickCount Lib “kernel32" () As Long

  ====================CODE:
  Private eclare Function GetTickCount Lib “kernel32" () As Long

  Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) 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 FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  Dim tWnd As Long, bWnd As Long, ncWnd As Long

  Const WM_LBUTTONDOWN = &H201
  Const WM_LBUTTONUP = &H202

  Private Sub Command1_Click()
  tWnd = FindWindow("Shell_TrayWnd", vbNullString)
  bWnd = FindWindowEx(tWnd, ByVal 0&, "BUTTON", vbNullString)
  SendMessage bWnd, WM_LBUTTONDOWN, 0, ByVal O&
  GetTickCount
  SendMessage bWnd, WM_LBUTTONUP, 0, ByVal O&
  End Sub这个例子展示点“开始”按扭
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯