比如.当QQ消息窗口最小化后.这时来有消息. QQ窗口就会闪烁. 肯定是调用了FlashWindow .我如何获得这个 正在闪的窗口呢

解决方案 »

  1.   

    我试过 拦截API 可是 问题是这样的
    A 向 B 发送FlashWindow 
    这里只有拦 A才要吧.问题是我不知道到底是谁向B 发消息.找不到A 就拦不到现在我只有在B 里拦消息好像可以.不过这方法太被动了.哎!
      

  2.   

    楼上的. HOOKAPI 可以是全局吗?
    如何做.有没有示例
      

  3.   

    可以全局,但最好用vc或汇编来写dll供vb调用,vb虽然也能实现,但变态程度不同凡响。
      

  4.   

    应该是QQ的聊天窗口接收到新消息后自己调用flashwindow的,而不是其他窗口或者进程让它这么做的。
      

  5.   

    楼上的.我知道. 我是打个比方
    现在的需求是这样的
    比如我先打开 计算器 程序. 然后我再写一个程序如下dim calcHwnd as long
    calcHwnd = FindWindow(vbnullstring, "计算器")
    call FlashWIndow(calcHwnd, true)这样 计算器 程序的标题就会闪!我想要的效果就是 如何获得 计算器(calcHwnd) 这个窗口是否在闪!
      

  6.   

    Hook相关API,不要管是谁抛出的消息,一旦拦截成功,里面的hdc就是目标地址,
      

  7.   

    楼上有的有没例子. 可以用 powerbasic 开发DLL 
      

  8.   

    问题解决.暂是只能这样.
    用 SetWindowHookEx 做全局勾子
    以下是 Powerbasic 的DLL 源码#Compile Dll
    #Dim All%USEMACROS = 1
    #Include "Win32API.inc"Declare Sub SwitchToThisWindow Lib "User32.dll" Alias "SwitchToThisWindow"(ByVal hWnd As Long, ByVal bRestore As Long)
    Declare Function BtnProc(ByVal nCode As Long, ByVal wParam As Dword, HkInfo As CWPSTRUCT) As LongGlobal ghInstance As Dword
    Global HookHwnds  As Long 'HOOKINFOFunction InstallHook Alias "InstallHook"(ByVal nPid As Long) Export As Long
        HookHwnds = SetWindowsHookEx(%WH_CALLWNDPROC, CodePtr(BtnProc), ghInstance, ByVal 0&) 'ByVal GetWindowThreadProcessId(nhWnd, %NULL))
        Function  = HookHwndsEnd FunctionFunction UnHook Alias "UnHook"() Export As Long
        If HookHwnds Then
            Function = UnhookWindowsHookEx(HookHwnds)
            HookHwnds = %False
        End If
    End FunctionFunction BtnProc(ByVal nCode As Long, ByVal wParam As Dword, HkInfo As CWPSTRUCT) As Long
        Local lsdHwnd As Long
        Local Ret     As Long    Static LastTick As Dword    If HkInfo.Message = %WM_NCACTIVATE And HkInfo.wParam = 1 Then
            '这就得到了闪的窗口
        End If
        Function = CallNextHookEx(HookHwnds, nCode, wParam, HkInfo)     '将返回给下一个HOOK
    End Function'
    Function LibMain (ByVal hInstance   As Long, _
                      ByVal fwdReason   As Long, _
                      ByVal lpvReserved As Long) As Long
        Local Ret As Long
        ghInstance = hInstance
        Select Case fwdReason
            Case %DLL_PROCESS_ATTACH
                Function = 1   'success!
            Case %DLL_PROCESS_DETACH
                Call UnHook
                Function = 1   'success!        Case %DLL_THREAD_ATTACH
                Function = 1   'success!        Case %DLL_THREAD_DETACH
                Function = 1   'success!    End Select
    End Function