• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 594
  • Last Modified:

Use API to close a program?

You can close a program by pressing the Ctrl-Alt-Del.
How can I close a program by Win32 API?
1 Solution
Use function
BOOL TerminateProcess(
    HANDLE  hProcess,      // handle to the process
    UINT  uExitCode       // exit code for the process  

Example for Win95:
#include <windows.h>
#include <tlhelp32.h>

struct PINFO
 DWORD dwPriorityClass;
 LONG  pcPriClassBase;
 DWORD pid;
 DWORD cntThreads;
 char  szFullPath[256];
 char  szModName[64];

BOOL KillProcess(char *);

void main(){


BOOL KillProcess(char* ModName)
    HANDLE         hProcessX;
    HANDLE         hSnapshot = NULL;
    BOOL           bRet      = FALSE;
    PROCESSENTRY32 pe32      = {0};
    HANDLE         hProcessSnap;
    //  Take a snapshot of all processes currently in the system.
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == (HANDLE)-1)
       return FALSE;

    //  Fill in the size of the structure before using it.
    pe32.dwSize = sizeof(PROCESSENTRY32);

    //  Walk the snapshot of the processes, and for each process, get

    //  information to display.
    if (Process32First(hProcessSnap, &pe32)) {
        BOOL          bGotModule = FALSE;
        MODULEENTRY32 me32       = {0};
        PINFO         pi         = {0};
        bRet = FALSE;
        do {
            bGotModule = GetProcessModule(pe32.th32ProcessID,
                pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));
            if (bGotModule) {
                HANDLE hProcess;

                // Get the actual priority class.

                hProcess = OpenProcess (PROCESS_ALL_ACCESS,
                    FALSE, pe32.th32ProcessID);

                pi.dwPriorityClass = GetPriorityClass (hProcess);

                if( strcmp(me32.szModule,ModName)==NULL)
                CloseHandle (hProcess);
        while (Process32Next(hProcessSnap, &pe32));
    bRet=FALSE;    // could not walk the list of processes

    // Do not forget to clean up the snapshot object.
    CloseHandle (hProcessSnap);
    return bRet;

BOOL GetProcessModule (DWORD dwPID, DWORD dwModuleID,
        LPMODULEENTRY32 lpMe32, DWORD cbMe32)
    BOOL          bRet        = FALSE;
    BOOL          bFound      = FALSE;
    HANDLE        hModuleSnap = NULL;
    MODULEENTRY32 me32        = {0};

    // Take a snapshot of all modules in the specified process.
    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
    if (hModuleSnap == (HANDLE)-1)

        return (FALSE);

    // Fill the size of the structure before using it.
    me32.dwSize = sizeof(MODULEENTRY32);

    // Walk the module list of the process, and find the module of
    // interest. Then copy the information to the buffer pointed
    // to by lpMe32 so that it can be returned to the caller.
    if (Module32First(hModuleSnap, &me32)) {
        do {
            if (me32.th32ModuleID == dwModuleID) {
                CopyMemory (lpMe32, &me32, cbMe32);
                bFound = TRUE;
        while (!bFound && Module32Next(hModuleSnap, &me32));

        bRet = bFound;   // if this sets bRet to FALSE, dwModuleID
                         // no longer exists in specified process
        bRet = FALSE;           // could not walk module list

    // Do not forget to clean up the snapshot object.
    CloseHandle (hModuleSnap);

    return (bRet);

There are several ways thay you can close a program.

The first legal way is to post the main window a message telling it to close down

PostMessage(hMainWindow, WM_CLOSE, 0, 0L);

or the more illegal way is to terminate the process using TerminateProcess.

However for both of these methods you either need to main window handle, or the process id
I ran the example on my machine, but it doesn't work. Why? My machine is windows xp.

Thank you!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Tackle projects and never again get stuck behind a technical roadblock.
Join Now