获取的是另外窗体不是自己写的,如果目标是系统自带的“计算器”,我下面的这段代码是可以实现的,但是对于一些却实现不了。请高手帮我看一下,是不是需要改哪里或者有别的更好更通用全面点的代码。请发代码,谢谢!tWnd1 = FindWindow(vbNullString, "窗口句柄") 
    If tWnd1 <> 0 Then
        tWnd2 = FindWindowEx(tWnd1, 0, vbNullString, "按钮句柄")'程序上面可以运行,到这里后就在下面的判断没办法实现,也就是说句柄是获取到了,那个“按钮句柄”也有可能在获取不到,导致下面不能实现判断。但是没办法实现点击效果,同样的方法在系统的计算器却看实现,控制自己编译的别的vb程序中是按钮也可以实现        If tWnd2 <> 0 Then
             SendMessage tWnd2, BM_CLICK, 0&, 0& '点击
        End If
           Else
        tWnd2 = 0
        End If

解决方案 »

  1.   

    以下以一個游戲修改器做測試成功。(計算機器也測試成功)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, ByVal lParam As Any) As Long
    '鼠标按下
    Const WM_LBUTTONDOWN = &H201
    '鼠标弹出
    Const WM_LBUTTONUP = &H202
    '鼠标双击
    Const WM_COMMAND = &H203Private Sub Command1_Click()
    Dim tWnd1 As Long, tWnd2 As LongtWnd1 = FindWindow(vbNullString, "極品飛車全民公敵中文修改器 v2.45")
      If tWnd1 <> 0 Then
      tWnd2 = FindWindowEx(tWnd1, 0, vbNullString, "執行極品飛車全民公敵遊戲")
      
      If tWnd2 <> 0 Then
      SendMessage tWnd2, WM_LBUTTONDOWN, 0&, 0&
      SendMessage tWnd2, WM_LBUTTONUP, 0&, 0&
      
      End If
      Else
      tWnd2 = 0
      End If
    End Sub