主要想实现在vb里区分其他程序窗体里同级、同标题、同类的控件。用其他方法都似乎不太保险。

解决方案 »

  1.   

    同级用GETPARENT,同标题用GETWINDOWTEXT,同类用GETCLASSNAME,不就完了么。
      

  2.   

    同级用GETPARENT,同标题用GETWINDOWTEXT,同类用GETCLASSNAME,不就完了么。
    ======================================
    “区分其他程序窗体里同级、同标题、同类的控件”。。
      

  3.   

    WM_GETCONTROLNAME仅用于获得本进程内的Winform控件名称。对于其他应用程序,可以尝试获得窗口类信息。参考http://msdn.microsoft.com/library/en-us/dnwinforms/html/autowforms.asp?frame=true#autowforms_topic5
      

  4.   

    上面 jiangsheng(蒋晟.MSMVP2004Jan)兄提到的那篇文章以前就看过了,它里面提到的Caption and Class Name、Windows Hierarchy Order就是我上面所说的“似乎不太保险”的“其他方法”。至于下面的:GetWindowsFormsID(wnd As Long)我在vb中没有试成功过。。
    或者举一个简单例子吧。。程序a.exe:
    Private Sub Command1_Click()
    MsgBox "1"
    End Sub
    Private Sub Command2_Click()
    MsgBox "2"
    End SubPrivate Sub Form_Load()
    Command1.Caption = ""
    Command2.Caption = ""
    End Sub怎么写一个b.exe,能简单、准确地区分出a.exe中的command1和command2(忽略判断按钮坐标的方法)。
    上面的Caption and Class Name、Windows Hierarchy Order可以应付一般的情况,但如果a.exe的控件不是一成不变的甚至是动态的,就不行了至于WM_GETCONTROLNAME,没试成功。。
      

  5.   

    to楼上
    好象取其他程序里面的child control name不到哦?spy++看不到,只有 id,caption,classname
    不过,可以先找到父窗口句柄,再用FindWindowEx 试试
      

  6.   

    btn1&=FindWindowEx(hwnd,0,"button1",vbnullstring)'第一个
    btn2&=FindWindowEx(btn1,0,"button2",vbnullstring)'第二个
    表达不好不要见笑
      

  7.   

    btn1&=FindWindowEx(hwnd,0,"button1",vbnullstring)'第一个
    btn2&=FindWindowEx(btn1,0,"button2",vbnullstring)'第二个
    ================================
    这就是上面提到的Windows Hierarchy Order方法,可以应付一般大多数情况,但不保险。。
      

  8.   

    你是说控件的设计时名字?不是吧。
    不过在内存中是有的,但具体的位置不好判断。应该是在.DATA的节表里。
      

  9.   

    顶一个,现在我也碰到这个问题了,其他程序上有多个TextBox,全部清空了,该怎么严格区分开...
      

  10.   

    如果是静态控件,区分id即可。例如有5个文本框,他们会有5个id,api里有得到控件
    idd的函数。
      

  11.   

    感谢楼上的提醒,,,GetDlgCtrlID  &  SendDlgItemMessage
    要获取控件的名字,只能分析内存,有了上面2个函数其他的就没必要了,呵呵,除非取LABEL一类的没句柄的:)