本帖最后由 mj2068 于 2009-08-13 07:50:29 编辑

解决方案 »

  1.   

    我自己也查过,是不是和unicode有关?
      

  2.   

    错误1:申明的FindWindow API函数中,返回值应该是Long而不是Integer
    错误2:申明的GetWindowText API函数中,第二个参数应该是Byval而不是Byref;第三个参数类型改为Long;返回值改为long (申明API函数最好是原型。)
    错误3:form代码中hwnd改成Long(最好所有integer类型都改成Long
    错误4:hwnd = FindWindow(vbNullString, "计算器") 改成
           hwnd = FindWindow("计算器",vbNullString ) 错误5:Dim wndTitle As String 先申明长度 比如:Dim wndTitle As String *255
    或者 Dim wndTitle As String 
        wndTitle = String(255, Chr$(0))
    完整代码如下:Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As LongPrivate Sub Command1_Click()
    Dim hwnd As Long
    Dim lenTitle1 As IntegerDim lenTitle2 As Integer
    Dim wndTitle As String * 256'wndTitle = String(100, Chr$(0))
    hwnd = FindWindow(vbNullString, "计算器")
    lenTitle1 = GetWindowText(hwnd, wndTitle, 256)
    lenTitle2 = Len(wndTitle)
    End Sub
      

  3.   

    wndTitle  没有缓冲区大小,返回不了。
    应该这样:
    Dim wndTitle As String *256.........debug.print  left(wndTitle,instr(1,wndTitle,chr(0))-1)'去掉尾部不可见字符
      

  4.   


    wndTitle = Space(256)
    lenTitle1 = GetWindowText(hwnd, wndTitle, 256)
      

  5.   

    虽然问题没有解决,但是还是把分给你吧。主要是我用的是2008,有很多不同的。还有,第二个问题呢?两个length相同么?
      

  6.   

    我晕,我傻了!!!
    问题找到了。我竟然把GetWindowText的声明命,第一个参数hwnd as成了string
    对不住大家了!!!