fast/Platform/AgvMainDialog.cpp

489 lines
12 KiB
C++
Raw Permalink Normal View History

2025-01-20 10:30:01 +08:00
// WcsMainDialog.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "Agv.h"
#include "AgvMainDialog.h"
#include "ModuleProcess.h"
#include "afxdialogex.h"
#include "tlhelp32.h"//<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
#define TRAY_ICON_ID 666
// CAgvMainDialog <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CAgvMainDialog, CDialogEx)
CAgvMainDialog::CAgvMainDialog(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_WCS_MAIN_DIALOG, pParent)
{
//m_nSubDlg = 3;
}
CAgvMainDialog::~CAgvMainDialog()
{
}
void CAgvMainDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_MODULE, m_ModuleListCtrl);
DDX_Control(pDX, IDC_EDIT_LOG, m_EditMultiLine);
}
BEGIN_MESSAGE_MAP(CAgvMainDialog, CDialogEx)
ON_MESSAGE(WM_SYSTEMTRAY, &CAgvMainDialog::OnSystemtray)
ON_COMMAND(ID_TRAY_SHOW, &CAgvMainDialog::OnTrayShow)
ON_COMMAND(ID_TRAY_EXIT, &CAgvMainDialog::OnTrayExit)
ON_WM_CLOSE()
ON_NOTIFY(NM_RCLICK, IDC_LIST_MODULE, &CAgvMainDialog::OnNMRClickListModule)
ON_MESSAGE(WM_UPDATE_MODULE_STATUS, &CAgvMainDialog::OnUpdateModule)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_MODULE, &CAgvMainDialog::OnNMDblclkListModule)
END_MESSAGE_MAP()
// CAgvMainDialog <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CAgvMainDialog::OnTrayShow()
{
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
SetForegroundWindow();
}
void CAgvMainDialog::OnTrayExit()
{
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd; // <20><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
nid.uID = TRAY_ICON_ID; // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB>ʶ<EFBFBD><CAB6>
Shell_NotifyIcon(NIM_DELETE, &nid);
OnOK();
}
unsigned int __stdcall FastCallback(LPVOID param)
{
char acUrl[128] = { 0 };
GetPrivateProfileString("WMS-SERVER", "FAST", "0.0.0.0", acUrl, 128, theApp.m_strConfigFile);
CString strUrl = acUrl;
CHttpClient client;
while (true)
{
client.FastCallBack(strUrl, "");
Sleep(2000);
}
return 0;
}
void CAgvMainDialog::AddLog2Edit(CString strMsg)
{
CString str;
m_EditMultiLine.GetWindowText(str);
if (str.GetLength() > 2048)
{
str = ""; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
str += strMsg;
str += "\r\n";
m_EditMultiLine.SetWindowText(str);
m_EditMultiLine.LineScroll(m_EditMultiLine.GetLineCount());
}
BOOL CAgvMainDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
//ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW, 1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ModuleListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
//<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//NotifyIcon.hIcon = m_hIcon; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>
NotifyIcon.hWnd = m_hWnd;
lstrcpy(NotifyIcon.szTip, _T("WDQ-WCS-PLATFORM"));
NotifyIcon.uCallbackMessage = WM_SYSTEMTRAY;
NotifyIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
NotifyIcon.uID = TRAY_ICON_ID;
Shell_NotifyIcon(NIM_ADD, &NotifyIcon); //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
m_ModuleListCtrl.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 0, 150);
m_ModuleListCtrl.InsertColumn(1, "ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 0, 200);
m_ModuleListCtrl.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬", 0, 80);
m_ModuleListCtrl.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 0, 80);
m_ModuleListCtrl.InsertColumn(4, "·<EFBFBD><EFBFBD>", 0, 400);
StartHttpServer();
(HANDLE)_beginthreadex(NULL, 0, FastCallback, this, 0, NULL);
InitModule();
RefresModuleShow();
//static CFont fontList;
//fontList.CreatePointFont(120, "<22><><EFBFBD><EFBFBD>");
//m_ModuleListCtrl.SetFont(&fontList);
//m_ModuleListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
afx_msg LRESULT CAgvMainDialog::OnSystemtray(WPARAM wParam, LPARAM lParam)
{
//wParam<61><6D><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD>lParam<61><6D><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ
// if(wParam!=IDR_MAINFRAME)
// return 1;
switch (lParam)
{
case WM_RBUTTONDOWN://<2F>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ˵<DDB2>
{
CMenu menuexit; //menu.LoadMenuW(IDR_MENU1);
//<2F><><EFBFBD>ز˵<D8B2><CBB5><EFBFBD>Դ
menuexit.LoadMenuA(IDR_MENU);
CMenu *pPopup=menuexit.GetSubMenu(0);
CPoint mypoint; GetCursorPos(&mypoint);
//ClientToScreen(&mypoint);//<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
//SetForegroundWindow();
PostMessage(WM_NULL,0,0); //<2F><>ʾ<EFBFBD>Ҽ<EFBFBD><D2BC>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0B4B0>ӵ<EFBFBD>С<EFBFBD>
pPopup->TrackPopupMenu(TPM_LEFTALIGN,mypoint.x,mypoint.y,this);
break;
}
}
return 0;
}
BOOL CAgvMainDialog::StartHttpServer()
{
char acIp[64] = { 0 };
GetPrivateProfileString("WCS-SERVER", "IP", "0.0.0.0", acIp, 63, theApp.m_strConfigFile);
int nPort = (short)GetPrivateProfileInt("WCS-SERVER", "PORT", 0, theApp.m_strConfigFile);
httpServerListener = new HttpServiceListener(this);
BOOL bRet = httpService.Create(acIp, nPort, httpServerListener, this);
if (bRet)
{
GetDlgItem(IDC_STATIC_SERVER_STATUS)->SetWindowText("***HTTP Server Start Succeed***");
}
else
{
GetDlgItem(IDC_STATIC_SERVER_STATUS)->SetWindowText("***HTTP Server Start Failed***");
}
return bRet;
}
CString CAgvMainDialog::UTF8ToMultiByte(const std::string& utf8String)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8String.c_str(), -1, NULL, 0);
std::wstring wideString(len, L'\0');
MultiByteToWideChar(CP_UTF8, 0, utf8String.c_str(), -1, &wideString[0], len);
len = WideCharToMultiByte(CP_ACP, 0, wideString.c_str(), -1, NULL, 0, NULL, NULL);
CString multiByteString;
multiByteString.GetBufferSetLength(len);
WideCharToMultiByte(CP_ACP, 0, wideString.c_str(), -1, multiByteString.GetBuffer(), len, NULL, NULL);
multiByteString.ReleaseBuffer();
return multiByteString;
}
void CAgvMainDialog::InitModule()
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
time_t lNowTime = 0;
time(&lNowTime);
int lPort = 7000 + lNowTime % 1000 * 10;//<2F>˿ں<CBBF>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B3AC>10<31><30>ģ<EFBFBD><C4A3>
int lCount = GetPrivateProfileInt("AGV-MODULE", "COUNT", 0, theApp.m_strConfigFile);
for (int i = 0; i < lCount; i++)
{
char acCnNameKey[64] = { 0 }, acCnName[64] = { 0 },
acNameKey[64] = { 0 }, acName[64] = { 0 },
acPathKey[64] = { 0 }, acPath[256] = { 0 }, acPipe[256] = { 0 },
acLastStatusKey[64] = {0};
sprintf_s(acCnNameKey, "CN_NAME_%d", i);
sprintf_s(acNameKey, "NAME_%d", i);
sprintf_s(acPathKey, "PATH_%d", i);
sprintf_s(acLastStatusKey, "LAST_STATUS_%d", i);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
GetPrivateProfileString("AGV-MODULE", acCnNameKey, "", acCnName, sizeof(acCnName) - 1, theApp.m_strConfigFile);
//<2F><><EFBFBD><EFBFBD>--ͬʱ<CDAC><CAB1>Ϊ<EFBFBD><CEAA>Ϣ<EFBFBD><CFA2>ʶ
GetPrivateProfileString("AGV-MODULE", acNameKey, "", acName, sizeof(acName)-1, theApp.m_strConfigFile);
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
GetPrivateProfileString("AGV-MODULE", acPathKey, "", acPath, sizeof(acPath)-1, theApp.m_strConfigFile);
CString strPath(acPath);
if (strPath.Find(":") <= 0)
{
strPath = theApp.m_strBaseDir + "\\" + strPath;
}
int lLastStatus = GetPrivateProfileInt("AGV-MODULE", acLastStatusKey, 0, theApp.m_strConfigFile);
CModuleProcess* pModule = new CModuleProcess(this, strPath, acName, i);
CString strPipeName;
strPipeName.Format("%d", lPort++);
pModule->SetPipeName(strPipeName);
m_mapAllNormal[acName] = pModule;
sprintf_s(acPipe, "PIPE_%s", acName);
WritePrivateProfileString("AGV-MODULE", acPipe, strPipeName, theApp.m_strConfigFile);
CString strChName = UTF8ToMultiByte(acCnName);
int lItem = m_ModuleListCtrl.InsertItem(65535, strChName);
m_ModuleListCtrl.SetItemText(lItem, 1, acName);
m_ModuleListCtrl.SetItemText(lItem, 4, strPath);
m_ModuleListCtrl.SetItemData(lItem, (DWORD_PTR)pModule);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ĭ<EFBFBD><C4AC>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nPos = strPath.ReverseFind('\\');
CString fileName = strPath.Right(strPath.GetLength() - nPos - 1);
KillProcess(fileName);
int nDebug = GetPrivateProfileInt("AGV-MODULE", "DEBUG", 0, theApp.m_strConfigFile);
m_nDebug = nDebug;
if (lLastStatus == 1 || nDebug == 1)//0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
{
pModule->Start(nDebug);
}
}
return ;
}
void CAgvMainDialog::RefresModuleShow()
{
for (int i = 0; i < m_ModuleListCtrl.GetItemCount(); i++)
{
CModuleProcess* pModule = (CModuleProcess*)m_ModuleListCtrl.GetItemData(i);
CString strText;
strText.Format("%d", pModule->m_lReStartCount);
int lStatus = pModule->GetStatus();
if (0 == lStatus)
{
m_ModuleListCtrl.SetItemText(i, 2, "<EFBFBD><EFBFBD>ֹͣ");
}
else if (1 == lStatus)
{
m_ModuleListCtrl.SetItemText(i, 2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
else if (2 == lStatus)
{
m_ModuleListCtrl.SetItemText(i, 2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
else
{
m_ModuleListCtrl.SetItemText(i, 2, "<EFBFBD>");
}
if (m_nDebug == 1)
{
m_ModuleListCtrl.SetItemText(i, 2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ");
}
m_ModuleListCtrl.SetItemText(i, 3, strText);
}
}
void CAgvMainDialog::OnClose()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
}
CModuleProcess* CAgvMainDialog::GetModuleByName(CString strName)
{
for (int i = 0; i < m_ModuleListCtrl.GetItemCount(); i++)
{
CModuleProcess* pModule = (CModuleProcess*)m_ModuleListCtrl.GetItemData(i);
if (pModule->GetModuleName() == strName)
{
return pModule;
}
}
return NULL;
}
void CAgvMainDialog::OnNMRClickListModule(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int lIndex = pNMLV->iItem;
if (lIndex == -1)
{
*pResult = 0;
return;
}
CModuleProcess* pModule = (CModuleProcess*)m_ModuleListCtrl.GetItemData(lIndex);
CMenu menu;
menu.CreatePopupMenu();
// <20><><EFBFBD>Ӳ˵<D3B2><CBB5><EFBFBD>
int lModuleStatus = pModule->GetStatus();
if (0 == lModuleStatus)
{
menu.AppendMenu(MF_STRING, 100, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>"));
}
else if (1 == lModuleStatus)
{
menu.AppendMenu(MF_STRING, 101, _T("ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
else
{
menu.AppendMenu(MF_STRING, 101, _T("ǿ<EFBFBD><EFBFBD>ֹͣ"));
}
// <20><><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>...
char acLastStatusKey[64] = { 0 };
sprintf_s(acLastStatusKey, "LAST_STATUS_%d", pModule->m_lModuleIndex);
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
CPoint point;
GetCursorPos(&point);
int nCmdID = menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, point.x, point.y, this);
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>IJ˵<C4B2><CBB5><EFBFBD>
switch (nCmdID)
{
case 100:
// ִ<>в˵<D0B2><CBB5><EFBFBD>1<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
pModule->Start();
WritePrivateProfileString("AGV-MODULE", acLastStatusKey, "1", theApp.m_strConfigFile);
break;
case 101:
// ִ<>в˵<D0B2><CBB5><EFBFBD>2<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
pModule->Stop();
WritePrivateProfileString("AGV-MODULE", acLastStatusKey, "0", theApp.m_strConfigFile);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>...
}
menu.DestroyMenu();
RefresModuleShow();
*pResult = 0;
}
LRESULT CAgvMainDialog::OnUpdateModule(WPARAM wparam, LPARAM lparam)
{
RefresModuleShow();
return 0;
}
void CAgvMainDialog::OnNMDblclkListModule(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int lIndex = pNMLV->iItem;
if (lIndex == -1)
{
*pResult = 0;
return;
}
CModuleProcess* pModule = (CModuleProcess*)m_ModuleListCtrl.GetItemData(lIndex);
int lModuleStatus = pModule->GetStatus();
if (lModuleStatus == 1)
{
pModule->SendDataToModule(MAIN_2_MODULE_SHOWWINDOW, NULL, 0);
}
*pResult = 0;
}
/*
<EFBFBD>ɽ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>رս<EFBFBD><EFBFBD>̵ĵط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KillProcess(_T("Ҫ<EFBFBD>رյĽ<EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));<EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
*/
void CAgvMainDialog::KillProcess(CString sExeName)
{
//CreateToolhelp32Snapshot()<29>õ<EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>̵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == 0)
return;
PROCESSENTRY32 thePE;
thePE.dwSize = sizeof(PROCESSENTRY32);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5>һ<EFBFBD><D2BB>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
bool Status = Process32First(hSnapShot, &thePE);
bool bHaveFlag = false; //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
DWORD ProcessID = 0;
while (Status)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>һ<EFBFBD><D2BB>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>
Status = Process32Next(hSnapShot, &thePE);
//<2F>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD> **.exe
// if(0 == wcscmp(thePE.szExeFile,L""))
CString sFindName = thePE.szExeFile;//<2F><><EFBFBD><EFBFBD><EFBFBD>еĽ<D0B5><C4BD><EFBFBD><EFBFBD><EFBFBD>
CString sTemp = sExeName.Mid(0, sFindName.GetLength());//Ҫ<>رյĽ<D5B5><C4BD><EFBFBD><EFBFBD><EFBFBD>
if (sFindName == sTemp)
{
bHaveFlag = true;
ProcessID = thePE.th32ProcessID;
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD> ProcessID
if (!TerminateProcess(OpenProcess
(PROCESS_TERMINATE || PROCESS_QUERY_INFORMATION, false, ProcessID), 0))
{
//AfxMessageBox(L"<22>޷<EFBFBD><DEB7><EFBFBD>ָֹ<D6B9><D6B8><EFBFBD>Ľ<EFBFBD><C4BD>̣<EFBFBD>", MB_ICONWARNING || MB_OK);
}
else
{
//AfxMessageBox(L"<22><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD>", MB_ICONWARNING || MB_OK);
break;
}
}
}
CloseHandle(hSnapShot);
}