489 lines
12 KiB
C++
489 lines
12 KiB
C++
|
// 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);
|
|||
|
}
|