在Windows 7上使用Outlook 2013,我創造了這個宏,只是爲了測試它:如何才能夠輕鬆地竊取焦點?
Private Sub Application_Reminder(ByVal Item As Object)
Activeexplorer.Activate
End Sub
每當我在不同的應用程序和一個Outlook提醒火災工作,前景逐漸從應用程序的活動窗口偷焦點我正在工作。
怎麼可能?
我的意思是,我認爲「Activeexplorer.Activate」方法使用了一些Windows API,比如「SetForegroundWindow」或者「SetActiveWindow」或者其他一些API。
所有這些apis都禁止竊取焦點,所以我的問題是Outlook vba方法如何能夠輕鬆和可怕地竊取焦點?
該報警部分解除武裝的,如在https://msdn.microsoft.com/it-it/library/windows/desktop/ms633539(v=vs.85).aspx所述,SetForegroundWindow可以通過其它方法沒有在前臺使用,如果「前景鎖定超時已過期(參見SPI_GETFOREGROUNDLOCKTIMEOUT在SystemParametersInfo)。」
我改變「HKCU:\ Control Panel \ Desktop」中的註冊表項「ForegroundLockTimeout」的值從零到20000,現在,在我的具體情況下,Outlook不會竊取焦點。
我不知道哪個是'ForegroundLockTimeout'註冊表項的最大值,或者換句話說,如果可以從活動應用程序永久禁用任何其他不在前景中的進程竊取焦點。
我對「黑客」不感興趣,在我的文章中不是黑客,它是一種標準的vba方法,在我看來這應該是不可能的,微軟不應該允許偷竊集中容易。 –
找出Outlook是否使用hack的唯一方法是調試Activate方法。 – Anders
你的黑客將窗口置於z列表的頂部而不激活不起作用,也就是說,除非將其設置爲最頂層而不激活它,然後在不激活它的情況下將其設置爲最頂層我知道沒有其他方式可以將其放置一個窗口,非最頂層窗口的頂部而不激活它: SetWindowPos的hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE或者SWP_NOMOVE或者SWP_NOACTIVATE SetWindowPos的hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE或者SWP_NOMOVE或SWP_NOACTIVATE –