Minha aplicação tem apenas um formulário. Gostaria de saber como fazer pra que no momento que eu der um show() no formulário, esse formulário aparecesse de forma MODAL sobre as outras aplicações que estão rodando no windows. É mais ou menos assim:
1 - Quando minha aplicação é iniciada, ela fica na tray do sistema esperando uma chamada. 2 - Ao clicar no botão imprimir de qualquer aplicativo (word, excel, notepad e etc) e em seguida no botão ok que manda a impressão para o spool, meu formulário é exibido, pausa a impressão e aguarda alguns dados para liberar a impressão que está pausada no spool.
Os itens 1 e 2 já estão funcionando, e com o código postado abaixo consigo fazer com que meu formulário fique sempre "por cima" de qualquer aplicativo que estiver ativo. A questão que até então não sei como fazer para que o formulário fique MODAL, não permitindo que até que ele seja fechado o usuário tenha acesso as funções dos aplicativos abertos.
Eis o código que torna o formulario MODAL, acima de qualquer outro programa do windows:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Long
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Const TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Public Sub MakeNormal(ByVal hwnd As Long) SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE) End Sub
Public Sub MakeTopMost(ByVal hwnd As Long) SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE) End Sub End Class
Você pode deixar seu formulario acima de qualquer outro aplicativo apenas acionando a propriedade do formulario topmost com isso não necessita da função acima.
form1.topmost=true
Agora para bloquear em forma modal o formulario use