📄 dlgmain.cpp
字号:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <errno.h>
#include "resource.h"
#include "Define.h"
#include "Common.h"
#include "DlgMain.h"
#include "DlgOption.h"
#include "DlgHelp.h"
extern SYSTEM g_Sys;
BOOL CALLBACK DlgMain(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM)
{ static DLGMAIN Dlg = {0};
switch (uMsg){
case WM_INITDIALOG: return InitDlgMain(hDlg, &Dlg);
case WM_LBUTTONDOWN:
SendMessage(hDlg, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)){
case IDBN_CHECK: return DlgMainOnCheck (hDlg, &Dlg);
case IDBN_FREE: return DlgMainOnFree (hDlg, &Dlg);
case IDBN_INSTALL: return DlgMainOnInstall(hDlg, &Dlg);
case IDBN_START: return DlgMainOnStart (hDlg, &Dlg);
case IDBN_STOP: return DlgMainOnStop (hDlg, &Dlg);
case IDBN_UNINST: return DlgMainOnUninst (hDlg, &Dlg);
case IDBN_OPTION: return DlgMainOnOption (hDlg, &Dlg);
case IDBN_HELP: return DlgMainOnHelp (hDlg, &Dlg);
default: break;
}
break;
case WM_CLOSE: return DlgMainOnClose(hDlg, &Dlg);
default: break;
}
return FALSE;
}
BOOL InitDlgMain(HWND hDlg, PDLGMAIN pDlg)
{ TCHAR caBuffer[MAX_STRING];
g_Sys.hWnd = hDlg;
SetClassLong(hDlg, GCL_HICON, (LONG)g_Sys.hIcon);
//SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
pDlg->hDlg = hDlg;
pDlg->hBnCheck = GetDlgItem(hDlg, IDBN_CHECK);
pDlg->hBnFree = GetDlgItem(hDlg, IDBN_FREE);
pDlg->hBnInstall = GetDlgItem(hDlg, IDBN_INSTALL);
pDlg->hBnStart = GetDlgItem(hDlg, IDBN_START);
pDlg->hBnStop = GetDlgItem(hDlg, IDBN_STOP);
pDlg->hBnUninst = GetDlgItem(hDlg, IDBN_UNINST);
pDlg->hBnOption = GetDlgItem(hDlg, IDBN_OPTION);
pDlg->hBnHelp = GetDlgItem(hDlg, IDBN_HELP);
pDlg->uTimerID = SetTimer(hDlg, TIMER_ID, TIMER_ELAPSE, TimerProc);
if ( 0 == pDlg->uTimerID ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("设置定时器失败:%s"), caBuffer);
return PostMessage(hDlg, WM_CLOSE, 0, 0);
}
if ( NULL == g_Sys.hSCManager ){
EnableWindow(pDlg->hBnInstall, FALSE);
EnableWindow(pDlg->hBnStart , FALSE);
EnableWindow(pDlg->hBnStop , FALSE);
EnableWindow(pDlg->hBnUninst , FALSE);
}
return TRUE;
}
BOOL DlgMainOnCheck(HWND hDlg, PDLGMAIN pDlg)
{
SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( Build(hDlg, _T("checked")) ){
MessageBox(hDlg, _T("操作成功!"), _T("WDMbuild"), MB_ICONASTERISK);
}
SetCursor(LoadCursor(NULL, IDC_ARROW));
return TRUE;
}
BOOL DlgMainOnFree(HWND hDlg, PDLGMAIN pDlg)
{
SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( Build(hDlg, _T("free")) ){
MessageBox(hDlg, _T("操作成功!"), _T("WDMbuild"), MB_ICONASTERISK);
}
SetCursor(LoadCursor(NULL, IDC_ARROW));
return TRUE;
}
BOOL DlgMainOnInstall(HWND hDlg, PDLGMAIN pDlg)
{ LPCTSTR lpServiceName = NULL;
LPCTSTR lpDisplayName = NULL;
LPCTSTR lpDriverName = NULL;
LPCTSTR lpDriverPath = NULL;
TCHAR caFileName[_MAX_PATH];
TCHAR caBuffer[MAX_STRING];
DWORD dwStartType = SERVICE_AUTO_START;
lpServiceName =
lpDisplayName =
lpDriverName = g_Sys.Option.caDriverName;
lpDriverPath = g_Sys.Option.caCopyToPath;
MakeFileName(caFileName, lpDriverPath, lpDriverName, _T(".SYS"));
if ( !InstallAService(g_Sys.hSCManager, caFileName,
lpServiceName, lpDisplayName, dwStartType) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("安装“%s”服务失败:%s"), lpServiceName, caBuffer);
}
return TRUE;
}
BOOL DlgMainOnUninst(HWND hDlg, PDLGMAIN pDlg)
{ LPCTSTR lpServiceName = g_Sys.Option.caDriverName;
TCHAR caBuffer[MAX_STRING];
if ( !UninstallAService(g_Sys.hSCManager, lpServiceName) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("卸载“%s”服务失败:%s"), lpServiceName, caBuffer);
}
return TRUE;
}
BOOL DlgMainOnStart(HWND hDlg, PDLGMAIN pDlg)
{ LPCTSTR lpServiceName = g_Sys.Option.caDriverName;
TCHAR caBuffer[MAX_STRING];
lpServiceName = g_Sys.Option.caDriverName;
if ( !StartAService(g_Sys.hSCManager, lpServiceName) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("启动“%s”服务失败:%s"), lpServiceName, caBuffer);
}
return TRUE;
}
BOOL DlgMainOnStop(HWND hDlg, PDLGMAIN pDlg)
{ LPCTSTR lpServiceName = g_Sys.Option.caDriverName;
TCHAR caBuffer[MAX_STRING];
lpServiceName = g_Sys.Option.caDriverName;
if ( !StopAService(g_Sys.hSCManager, lpServiceName) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("停止“%s” 服务失败:%s"), lpServiceName, caBuffer);
}
return TRUE;
}
BOOL DlgMainOnOption(HWND hDlg, PDLGMAIN pDlg)
{ TCHAR caBuffer[MAX_STRING];
if ( -1 == DialogBox(g_Sys.hModule, LPTSTR(IDD_OPTION), hDlg, DlgOption) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("创建对话框失败:%s"), caBuffer);
}
return TRUE;
}
BOOL DlgMainOnHelp(HWND hDlg, PDLGMAIN pDlg)
{ TCHAR caBuffer[MAX_STRING];
if ( -1 == DialogBox(g_Sys.hModule, LPTSTR(IDD_HELP), hDlg, DlgHelp) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hDlg, MB_ICONERROR, _T("WDMbuild"),
_T("创建对话框失败:%s"), caBuffer);
}
return TRUE;
}
BOOL DlgMainOnClose(HWND hDlg, PDLGMAIN pDlg)
{
if ( (UINT)0 != pDlg->uTimerID ){
KillTimer(hDlg, pDlg->uTimerID);
}
return EndDialog(hDlg, 0);
}
VOID CALLBACK TimerProc(HWND hWnd, UINT, UINT, DWORD)
{ TCHAR caBuffer[MAX_STRING];
LPCTSTR lpText;
DWORD dwStatus;
dwStatus = GetServiceStatus(g_Sys.hSCManager, g_Sys.Option.caDriverName);
switch (dwStatus){
case SERVICE_STOPPED : lpText = _T("Stopped"); break;
case SERVICE_START_PENDING : lpText = _T("Start Pending"); break;
case SERVICE_STOP_PENDING : lpText = _T("Stop Pending"); break;
case SERVICE_RUNNING : lpText = _T("Runing"); break;
case SERVICE_CONTINUE_PENDING: lpText = _T("Continue Pending"); break;
case SERVICE_PAUSE_PENDING : lpText = _T("Pause Pending"); break;
case SERVICE_PAUSED : lpText = _T("Paused"); break;
default : lpText = _T("Uninstall"); break;
}
wsprintf(caBuffer, _T("%s - %s: %s"),
g_Sys.caName, g_Sys.Option.caDriverName, lpText);
SetWindowText(hWnd, caBuffer);
}
BOOL CheckOption(HWND hWnd)
{ TCHAR caBuffer[MAX_STRING];
INT iReturn = 0;
if ( IsOptionError(NULL, NULL, &(g_Sys.Option)) ){
if ( IDYES == MessageBox(hWnd,
_T("系统 'Option' 设置不正确!\n\n"
"要修改系统 'Option' 设置么?"),
_T("WDMbuild"),
MB_YESNO | MB_ICONERROR) ){
iReturn = DialogBox(g_Sys.hModule, LPTSTR(IDD_OPTION),
hWnd, DlgOption);
if ( -1 == iReturn ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
FMessageBox(hWnd, MB_ICONERROR, _T("WDMbuild"),
_T("创建对话框失败: %s"), caBuffer);
return FALSE;
}
return ( IDOK == iReturn );
}
return FALSE;
}
return TRUE;
}
BOOL CheckSourcePath(VOID)
{ LPCTSTR saSourceFile[] = {_T("*.c"),
_T("*.cpp"),
_T("*.asm"),
_T("*.rc"),
NULL};
TCHAR caFileName[_MAX_PATH];
INT i;
for ( i = 0; NULL != saSourceFile[i]; i++ ){
MakeFileName(caFileName,
g_Sys.Option.caSourcePath, saSourceFile[i], NULL);
if ( FileExist(caFileName) ){
return TRUE;
}
}
return FALSE;
}
BOOL Build(HWND hWnd, LPCTSTR lpVersion)
{ TCHAR caBuffer[MAX_STRING] = {0};
TCHAR caFileName[_MAX_PATH] = {0};
BOOL bErrOccur = FALSE;
if ( !CheckOption(hWnd) ){
return FALSE;
}
if ( !CheckSourcePath() ){
FMessageBox(hWnd, MB_ICONERROR, _T("WDMbuild"),
_T("在指定目录中未发现可编译文件(*.c,*.cpp,*.asm或*.rc):%s"),
g_Sys.Option.caSourcePath);
return FALSE;
}
if ( !CreateMakefileFile(g_Sys.Option.caSourcePath) ){
GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
MakeFileName(caFileName, g_Sys.Option.caSourcePath,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -