2010-10-04 24 views

回答

0

聲明:這是完全未經測試的。

首先,上的Form_Load你要使用SetWindowPos API把所有其他人以下表單:

Private Const SWP_NOSIZE = &H1 
Private Const SWP_NOMOVE = &H2 
Private Const HWND_BOTTOM = 1 

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 

' Somewhere in form_load...  
RetVal = SetWindowPos(Me.hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) 

如果這還不夠,你可能需要繼承的形式,並觀看WM_ACTIVATE和/或WM_MOUSEACTIVATE並重定向這些消息。對於WM_MOUSEACTIVATE,重定向到MA_NOACTIVATE可能工作;對於WM_ACTIVATE消息,重定向到WA_INACTIVE。

0

我發現了一個使用鉤子來檢測打開的窗口的替代方案。我打開所有新窗口(以parrent或no parrent作爲最頂層),這個acutaly可以解決問題,並將shell界面放在後臺中。非常簡單掛鉤函數看起來是這樣的:

`Public Sub WindowCreated(hwnd As Long) 

如果沒有HWND = Me.hwnd然後 如果IsWindowVisible(HWND)然後

 WindowHandle hwnd, 6 ' set form as topmost and focused 
     WindowHandle hwnd, 5 

結束如果 端子`

相關問題