解决方案 »

  1.   

    那要先取得hWnd才行,现在我用Spy能查到句柄,但是在程序中怎么办?
    我要把这个外部程序窗口里的第一个Static隐藏掉
      

  2.   

    Option Explicit
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPrivate Sub Command1_Click()
    Dim mhwnd As Long
    mhwnd = FindWindow("#32770", "关于 WinRAR")
    Dim shwnd As Long
    shwnd = FindWindowEx(mhwnd, 0, "Static", vbNullString)
    ShowWindow shwnd, 0
    End Sub上面我以winrar中的关于对话框为例
      

  3.   

    那要先取得hWnd才行,现在我用Spy能查到句柄,但是在程序中怎么办?
    我要把这个外部程序窗口里的第一个Static隐藏掉
    ===================================================
    用spy看看它有没有名字(标题),如果有就用findwindw/findwindowex或enumnwindows/enumnchildwindows巡行控件,比对标题和类名就可以确定是哪个句柄了
      

  4.   

    FindWindowEx 我咋没想到呢,一直只记得FindWindow是查窗体标题的,呵呵,我去试试To lsftest() :
    那个Static是没有标题的,我看过,至少有4个这样的东东(都没标题),但手工试下来,我肯定只有第一个是我要找的。
      

  5.   

    如果目标程序的控件都是静态的,可以用你说的根据顺序来确定的方法(微软叫这种方法为:Windows Hierarchy Order)。。
    但如果目标程序里有动态生成控件之类的操作就难说了
    有人提过用判断控件id的方法,如果这种方法成功就应该是最准确了,但我看到这个提议的时候电脑里已经没有vb了,不能测试,遗憾,有兴趣你可以试试,如果成功了麻烦告诉我一声。。
    有关这方面的讨论,你可以参考一下我以前的一个帖子:
    http://community.csdn.net/Expert/topic/4224/4224391.xml?temp=.3067896
      

  6.   

    如果目标程序的控件都是静态的,可以通过判断ID找到目标控件。方法:1找到目标程序句柄Findwindow()2,枚举子窗口EmnuchildWidows,得到子窗口句柄,通过句柄找到ID号GETid.
    或者判断控件的矩形位置RECT()