Shell 将窗体设置为最后面。始终保持在后台的窗体-vb6
有没有办法将表单设置为最靠后的表单(无论您在表单上单击什么,表单都始终位于后面)Shell 将窗体设置为最后面。始终保持在后台的窗体-vb6,shell,vb6,desktop,Shell,Vb6,Desktop,有没有办法将表单设置为最靠后的表单(无论您在表单上单击什么,表单都始终位于后面) 我正在编写一个shell替换程序,只是在我启动的每个窗口上使用topmost,这确实会使某些应用程序的某些方面出现问题。免责声明:这是完全未经测试的 首先,在Form_Load上,您需要使用SetWindowPos API将您的表单置于所有其他表单之下: Private Const SWP_NOSIZE = &H1 Private Const SWP_NOMOVE = &H2 Private Con
我正在编写一个shell替换程序,只是在我启动的每个窗口上使用topmost,这确实会使某些应用程序的某些方面出现问题。免责声明:这是完全未经测试的 首先,在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。我找到了一种使用钩子检测打开窗口的替代方法。我正在打开所有新窗口(最上面是parrent或no parrent),这很好地解决了这个问题,并将shell界面放在了背景中。非常简化的hooked函数如下所示:
`Public Sub WindowCreated(hwnd As Long)
如果不是hwnd=Me.hwnd,则
如果IsWindowVisible(hwnd),则
如果结束
端接头`
WindowHandle hwnd, 6 ' set form as topmost and focused
WindowHandle hwnd, 5