API - Abrindo e fechando janelas MS-DOS
Embora cada vez menos usado , o ambiente MS-DOS as vezes tem que ser usado em algum projeto. Se você precisar abrir um aplicativo MS DOS vai obter uma janela DOS . O problema é fechar a janela via código Visual Basic.
Vamos abrir um aplicativo MS DOS clássico , o Editor de textos - Edit - do MS DOS e fechar a janela via código Visual Basic.
- Para abrir o editor vamos usar o método - Shell : Shell Nome_do_Apliativo, 1 .
- A API FindWindows é chamada para retornar o identificador da janela DOS . É importante observar que o título da janela deve ser igual ao usado pela aplicação.
- Para fechar a janela DOS vamos enviar uma mensagem usando a API : SendMessage com o parâmetro WM_CLOSE . Esta API envia uma mensagem especifica para uma janela .
A sintaxe usada para as API´s são :
a-) SendMessage
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long |
·
hWnd Idenfica a janela cujo procedimento recebe a mensagem. windows. · Msg Define a mensagem a ser enviada · wParam Define uma mensagem adicional · lParam Define uma mensagem adicional extra |
a-) FindWindow
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long |
· lpClassName Aponta para um string nula · lpWindowName Define o nome da janela ( Título) . |
Agora o projeto :
- Inicie um novo projeto no VB e insira um módulo no seu projeto. No formulário padrão insira dois botões de comando conforme o layout abaixo:
- Agora insira o código que declara as APIs usada no módulo do projeto:
Declare Function
FindWindow Lib "user32" Alias
"FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) _ As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) _ As Long |
- Na secção General Declarations do form insira o código que define as constantes usadas:
Const WM_CLOSE =
&H10 Const Aplicativo = "C:\Windows\Command\Edit.com" Const WINDOWCAPTION = "MS-DOS Editor" |
- No evento Click do botão - command1 - Abrir Editor do DOS - inclua o código que abre a janela do editor:
Private Sub
Command1_Click() Shell Aplicativo, 1 Me.SetFocus End Sub |
- Agora no evento Click do botão - command2 - Encerrar Editor - ponha o código que fecha a janela DOS:
Private Sub Command2_Click() Dim lRet As Long 'trata o retorno da função Do lRet = FindWindow(vbNullString, WINDOWCAPTION) If (lRet <> 0) Then lRet = SendMessage(lRet, WM_CLOSE, ByVal 0, ByVal 0) Exit Do End If Loop End Sub |
Execute o projeto e você vera o seguinte resultado:
Basta clicar no botão - Encerrar Editor - que a janela DOS será fechada.
Até a próxima....