Dim hw As Int32
        Dim pid As Int32
        Dim pid1 As Int32        hw = FindWindow(vbNullString, "计算器")
        pid1 = GetWindowThreadProcessId(hw, pid)
        TextBox1.Text = OpenProcess(&H1F0FFF , 0, pid1)显示为0,请教各位前辈。

解决方案 »

  1.   

            hw = FindWindow(vbNullString, "计算器")
            pid1 = GetWindowThreadProcessId(hw, pid)
            TextBox1.Text = OpenProcess(&H1F0FFF, 0, pid1)“计算器”后面没有空格,是我发帖时不小心添加的,pid1有返回值3332,可textbox1始终显示为0。
      

  2.   

    在OpenProcess后面加句Debug.Print Err.LastDllError,看看是什么原因
      

  3.   

    提升到debug权限应该可以了!
      

  4.   

    跟Debug权限无关,因为计算器不是系统进程。LZ的问题是GetWindowThreadProcessId函数,它返回的是窗口的线程标识符,而它的第二个参数才是进程标识符,你把pid1送到OpenProcess中是无效的,应该送pid进去。
      

  5.   

    Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
     
    说明 
    获取与指定窗口关联在一起的一个进程和线程标识符 
    返回值 
    Long,拥有窗口的线程的标识符 
    参数表 
    参数 类型及说明 
    lpdwProcessId Long,指定一个变量,用于装载拥有那个窗口的一个进程的标识符 
    hwnd Long,指定窗口句柄 
    是lpdwProcessId这个吗?显示是0啊,很奇怪。
    现在正在试debug权限的方法。
      

  6.   

    gabalwto说的有理,TextBox1.Text   =   OpenProcess(&H1F0FFF,   0,   pid) 试试
      

  7.   

    谢谢,gabalwto,zzyong00,谢谢各位前辈,问题已解决,是应该传pid。