How To Kill an Application with System Menu Using VB

This article was previously published under Q168204
This article has been archived. It is offered "as is" and will no longer be updated.
Microsoft Visual Basic for Windows can use the Microsoft Windows APISendMessage function to close any active window that has a system menu(referred to as the Control Box within Visual Basic for Windows) with theClose option.
This sample program uses the Windows API SendMessage function to post amessage to any window in the environment, provided the handle to the windowis known. The API FindWindow function is used to determine the handleassociated with the window the user wants to close. To use FindWindow, youmust know either the ClassName or the Caption (if any) of that window.Please see the REFERENCES section below for more information.

Steps to Create Example Program

  1. Start Visual Basic and select Standard EXE. If Visual Basic is already running, click New Project on the File menu and select Standard EXE. Form1 is created by default.
  2. Create two Command Buttons called Command1 and Command2.
  3. On the Project menu, click Add Module (ALT, P, M). Module1 is created by default.
  4. In the Declarations section, declare the following two API functions:
          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 Long) _       As Long						
  5. Within the Command1 Click event, add the following code:
          Private Sub Command1_Click()         Shell "Calc.exe", vbNormalFocus      End Sub						
  6. Within the Command2 Click event, add the following code:
          Private Sub Command2_Click()         Dim lpClassName As String         Dim lpCaption As String         Dim Handle As Long         Const NILL = 0&         Const WM_SYSCOMMAND = &H112         Const SC_CLOSE = &HF060&         lpClassName = "SciCalc"         lpCaption = "Calculator"      '* Determine the handle to the Calculator window.         Handle = FindWindow(lpClassName$, lpCaption$)      '* Post a message to Calc to end its existence.         Handle = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)      End Sub						
  7. On the Run menu, click Start or press the F5 key to start the program. Clicking the Command1 button starts a (new) instance of the Windows Calculator accessory. Clicking on the Command2 button kills an instance of the Calculator.
For more information on the FindWindow and SendMessage functions, query onthe following words in the Microsoft Knowledge Base:
FindWindow and Visual Basic or SendMessage and Visual Basic

For information on a different sample application that returns assortedinformation for a windowed application, please see the following article inthe Microsoft Knowledge Base:
112649 : How to Get a Window's Class Name and Other Window Attributes
kbVBp500 kbVBp600 kbdse kbDSupport kbVBp

Article ID: 168204 - Last Review: 02/28/2014 08:06:24 - Revision: 3.1

  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • kbnosurvey kbarchive kbhowto KB168204