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....