Четверг, Сентябрь 24, 2020

Убить Процесс

#include "stdafx.h"
#include "WordTest.h"
#include "WordTestDlg.h"
#include "DlgProxy.h"
#include "afxdialogex.h"
#include "enums.h"
#include "CApplication.h"
#include "CDocument0.h"
#include "CDocuments.h"
#include "CParagraph.h"
#include "CParagraphs.h"
#include "CSelection.h"
#include "CFind.h"
#include <tlhelp32.h>

// WordTestDlg.h : header file
//

#pragma once

class CWordTestDlgAutoProxy;


// CWordTestDlg dialog
class CWordTestDlg : public CDialogEx
{
    DECLARE_DYNAMIC(CWordTestDlg);
    .....
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedButton1();
    DWORD GetProcessByExeName(char* ExeName);
};


void CWordTestDlg::OnBnClickedButton1()
{
    COleVariant  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    COleVariant covTrue((short)TRUE), covFalse((short)FALSE);
    CApplication app;
    if(!app.CreateDispatch("Word.Application"))
    {
        AfxMessageBox("не создался Word Application");
        return;
    }
    app.put_Visible(FALSE);

    app.ReleaseDispatch();

    DWORD PID = GetProcessByExeName("winword.exe");
        if ( !PID )
            AfxMessageBox("Процесс не найден");
        else
        {
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID );
        if ( TerminateProcess(hProcess, 0) )
            AfxMessageBox("Процесс убит");
        else
            AfxMessageBox("Не могу убить процесс");
        }
    
}


DWORD CWordTestDlg::GetProcessByExeName(char* ExeName)
{
    DWORD Pid;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
 
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    if( hProcessSnap == INVALID_HANDLE_VALUE)
    {
        AfxMessageBox("Error = GetProcessByExeName)", MB_OK|MB_ICONERROR);
        return false;
    }
 
    if ( Process32First(hProcessSnap, &pe32) )
    {
        do
        {
            if ( strcmpi(pe32.szExeFile, ExeName) == 0)
            {
                CloseHandle(hProcessSnap);
                return pe32.th32ProcessID;
            }
        } while ( Process32Next(hProcessSnap, &pe32) );
    }
    CloseHandle(hProcessSnap);
    return 0;
}

Back to Top