shellex 函数可以打开其他应用程序 并指定打开后窗口的状态
postmessage函数可以 向指定的(必须有句柄) 程序 或者程序上的控件发送消息 (单击 双击 字母 扩展键 =  文字信息可以用setkey(好像是这个吧))这些资料你去百度上搜 一大堆

解决方案 »

  1.   

    shellex 函数可以打开其他应用程序 并指定打开后窗口的状态
    postmessage函数可以 向指定的(必须有句柄) 程序 或者程序上的控件发送消息 (单击 双击 字母 扩展键 =  文字信息可以用setkey(好像是这个吧))这些资料你去百度上搜 一大堆
      

  2.   

    多谢KingOfPorcupine的提示,shellex是不是就是shell?vs小程序中的搜索框、搜索按钮句柄如何获得呢?
    我先百度下
      

  3.   

    用spy++是不是可以获得任意窗口的句柄和类名?
      

  4.   

    1、shell打开
    2、用api保证打开的窗口取得蕉点
    3、sendkey,对窗口发送相关的键信息
      

  5.   

    一提到API我就菜鸟了,使窗口获得焦点是不是这个函数?
    SetWindowFocus Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long 
    那为什么不用postmessgae?不用焦点额
      

  6.   

    其实不用焦点的。1)shell出VS程序。
    2)取得VS程序的句柄,并通过FindWindowEx获取VS程序中输入框和按钮的句柄(我假设是这样)。
    3)通过SendMessage,向VS的文本框输入内容(这个内容就是VB6中定义的了),然后再通过SendMessage按下VS的按键。其中,shell是可以通过参数控制shell出来的程序获得焦点的。不用API。
      

  7.   

    http://www.autohotkey.com
      

  8.   


    shell出程序自然没问题,但是我用findwindow或findwindowex或其他函数,却只能找出窗口中第一层的控件句柄,内层的找不到,比如窗口内有SysTabControl32,可以找到句柄,但SysTabControl32里还有个类名为#32770的窗口,就找不到了,更别提#32770里的控件了愁死了
      

  9.   

    若spy++能看见,EnumChildWindows可枚举子窗口,
      

  10.   

    Public 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 (1)hwndParent:要查找子窗口的父窗口句柄。 
      如果hwndParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。 
    (2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。 
    (3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。 
    (4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。 
      hWnd1 Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) 
      hWnd2 Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 
    也就是说,用这个可以查到子窗口,再查子窗口里面的子控件,你可以根据控件类型或名称去查找,有相同名称的话也可以通过顺序查找
    lHwnd = FindWindow(vbNullString, titleSTR1)
    lChildHwnd = FindWindowEx(lHwnd, 0&, vbNullString, titleSTR2)
    lChildHwndY = FindWindowEx(lChildHwnd, 0&, vbNullString, "0")
     
    得到句柄之后就好办了
    可以sendmessage了 
     For i = 1 To Len(Str)
      SendMessage hwnd, WM_IME_CHAR, Asc(Mid(Str, i, 1)), 1
     Next
       送出你想要的字符
    #DeFine WM_LBUTTONDBLCLK 0x203双击鼠标左键 SendMessage BTNhwnd, WM_LBUTTONDBLCLK或 
    #DeFine WM_LBUTTONDOWN 0x201按下鼠标左键#DeFine WM_LBUTTONUP 0x202释放鼠标左键