用getfocus不能获得外部程序窗口的输入焦点句柄吗?要是能的话,能否帮我举个实例,谢谢!

解决方案 »

  1.   

    用AttachThreadInput绑定线程输入,就能用SetFocus了
    取得自身线程ID用GetCurrentProcessId
    得到某个窗口所属线程ID用GetWindowThreadProcessIdAttachThreadInput VB声明 
    Declare Function AttachThreadInput Lib "user32" Alias "AttachThreadInput" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long 
    说明 
    通常,系统内的每个线程都有自己的输入队列。本函数(既“连接线程输入函数”)允许线程和进程共享输入队列。连接了线程后,输入焦点、窗口激活、鼠标捕获、键盘状态以及输入队列状态都会进入共享状态 
    返回值 
    Long,非零表示成功,零表示失败,会设置会GetLastError 
    参数表 
    参数 类型及说明 
    idAttach Long,欲连接线程的标识符(ID) 
    idAttachTo Long,与idAttach线程连接的另一个线程的标识符 
    fAttach Long,TRUE(非零)连接,FALSE撤消连接 
    注解 
    调用这个函数时,会重设键盘状态
     GetWindowThreadProcessId VB声明 
    Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
     
    说明 
    获取与指定窗口关联在一起的一个进程和线程标识符 
    返回值 
    Long,拥有窗口的线程的标识符 
    参数表 
    参数 类型及说明 
    lpdwProcessId Long,指定一个变量,用于装载拥有那个窗口的一个进程的标识符 
    hwnd Long,指定窗口句柄 GetCurrentProcessId VB声明 
    Declare Function GetCurrentProcessId Lib "kernel32" Alias "GetCurrentProcessId" () As Long 
    说明 
    获取当前进程一个唯一的标识符 
    返回值 
    Long,当前的进程标识符 
      

  2.   

    打错字了
    取得自身线程ID用GetCurrentThreadId
    GetCurrentThreadId VB声明 
    Declare Function GetCurrentThreadId Lib "kernel32" Alias "GetCurrentThreadId" () As Long 
    说明 
    获取当前线程一个唯一的线程标识符 
    返回值 
    Long,当前的线程标识符 
      

  3.   

    //取得自身线程ID用GetCurrentThreadId用vb自带的App.ThreadID也可以取得自身线程ID
      

  4.   

    Windows系统规定,只有前台窗口才允许Focus
    当某窗体失去焦点后,SetFocus是不能持久的,只有调用SetFocus前绑定线程输入才能得到焦点