如题:我需要在VB程序中获得另一个外部程序SDP.EXE运行后的坐标位置,由于这个程序启动后窗体是手动的,每次拖动窗体后再启动该程序其坐标位置就会发生变化,请教一下如何捕获到启动后的SDP.exe窗体的坐标位置?谢谢...

解决方案 »

  1.   

    Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long
      

  2.   


    Option Explicit
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate lpRect As RECT
    Private cHwnd As LongPrivate Sub Command1_Click()
      cHwnd = FindWindow(vbNullString, "示例工程")  '查找窗体,  "示例工程改为你要查找的窗体的名称"
      Me.AutoRedraw = True
      Me.Cls
      If cHwnd <> 0 Then  '如果查找到就做以下动作
         GetWindowRect cHwnd, lpRect
         Me.Print "窗体的Left坐标是:" & Screen.TwipsPerPixelX * lpRect.Left
         Me.Print "窗体的Top坐标是:" & Screen.TwipsPerPixelX * lpRect.Top
         Me.Print "窗体的Width是:" & Screen.TwipsPerPixelX * (lpRect.Right - lpRect.Left)
         Me.Print "窗体的Heidht是:" & Screen.TwipsPerPixelX * (lpRect.Bottom - lpRect.Top)
      Else
        Me.Print "没有找到窗体"
      End If
    End Sub
      

  3.   

    谢谢,搞定,最后再请教个问题,我当前的屏幕分辨率为1024*768,将窗体的Left和Top拉到最右下角时,显示left和TOP分别为15000 11000 ,得到的坐标数据是以什么为单位?
      

  4.   

    不乘以 Screen.TwipsPerPixelX 就是象素为单位的.
    现在这个是以 Twips (缇)为单位的.
      

  5.   

    太感谢fvflove了,结贴.下次再请教您.呵呵
      

  6.   

    太感谢fvflove了,结贴.下次再请教您.呵呵