问题解决.暂是只能这样. 用 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
A 向 B 发送FlashWindow
这里只有拦 A才要吧.问题是我不知道到底是谁向B 发消息.找不到A 就拦不到现在我只有在B 里拦消息好像可以.不过这方法太被动了.哎!
如何做.有没有示例
现在的需求是这样的
比如我先打开 计算器 程序. 然后我再写一个程序如下dim calcHwnd as long
calcHwnd = FindWindow(vbnullstring, "计算器")
call FlashWIndow(calcHwnd, true)这样 计算器 程序的标题就会闪!我想要的效果就是 如何获得 计算器(calcHwnd) 这个窗口是否在闪!
用 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