📄 loadcmd_c.cpp
字号:
// loadcmd_c.cpp
#include <windows.h>
#include <stdio.h>
#include "msc.h"
#include "access.h"
#include "environ.h"
#include "execute.h"
#include "filename.h"
#include "reg.h"
#include "res.h"
#include "resource.h"
#include "shfolder.h"
#include "stringex.h"
#include "winmain.h"
#include "conv_reg.h"
#define SHORTSTRING_MAX 0x80
// 僷僗傪愝掕偼丄NT宯偱偼 AddEnvPath() 偱
// 95宯偱偼僶僢僠僼傽僀儖偱
int main ( int argc, char *argv [] ) {
const int IsOsUnicode = IsNT () ;
// 堷偒悢偺張棟
for ( int nCountArgv = 1 ; nCountArgv < argc ; nCountArgv ++ ) {
char *szArgv = argv [ nCountArgv ] ;
if ( *szArgv == '/' || *szArgv == '-' ) {
switch ( szArgv [ 1 ] ) {
case 'E' :
case 'e' :
SetResourceLanguage ( LANGID_ENGLISH ) ;
break ;
case 'J' :
case 'j' :
SetResourceLanguage ( LANGID_JAPANESE ) ;
break ;
default :
break ;
}
}
}
if ( IsOsUnicode ) {
wchar_t szFolder [ MAX_PATH ] ;
wchar_t szBatFileName [ MAX_PATH ] ;
// 儅僀僪僉儏儊儞僩僼僅儖僟柤傪庢摼
if ( GetSpecialFolderPathW ( NULL, szFolder, CSIDL_PERSONAL, 0 ) ) {
if ( GetSpecialFolderPathW ( NULL, szFolder, CSIDL_DESKTOP, 0 ) ) wcscpy ( szFolder, L"C:\\" ) ;
}
SetCurrentDirectoryW ( szFolder ) ;
// 傕偆堦偮偺僷僗傪愝掕乮傕偟偁傟偽乯
if ( IsOsUnicode && ! GetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_SUB_W, L"Path", szFolder, MAX_PATH ) ) {
SetPathSeparatorW ( szFolder, ADD_SEPARATOR_ONLY_ROOT ) ;
AddEnvPathW ( szFolder, TRUE ) ;
}
// 僷僗傪愝掕
if ( GetRegStringW ( HKEY_LOCAL_MACHINE, REG_SUBKEY_W, L"Path", szFolder, MAX_PATH ) ) {
GetModuleFileNameW ( NULL, szFolder, MAX_PATH ) ;
ChangeFileNameW ( szFolder, NULL ) ;
}
SetPathSeparatorW ( szFolder, ADD_SEPARATOR_ONLY_ROOT ) ;
if ( IsOsUnicode && AddEnvPathW ( szFolder, TRUE ) ) {
wchar_t szCommandName [ SHORTSTRING_MAX ] ;
LoadStringExW ( IDS_COMMANDNAME, szCommandName, SHORTSTRING_MAX ) ;
MessageBoxW ( NULL, GetStringW ( IDS_NOT_ENOUGH_MEMORY ), szCommandName, MB_OK ) ;
return 1 ;
}
// 僶僢僠僼傽僀儖柤傪愝掕
wcscpy ( szBatFileName, szFolder ) ;
SetPathSeparatorW ( szBatFileName, ADD_SEPARATOR_ALWAYS ) ;
wcscat ( szBatFileName, GetStringW ( IDS_BAT_FILENAME ) ) ;
// 僐儅儞僪僀儞僞乕僾儕僞柤傪庢摼
int nResult = GetEnvironmentVariableW ( L"COMSPEC", szFolder, MAX_PATH ) ;
if ( nResult <= 0 || nResult > MAX_PATH ) {
if ( IsOsUnicode ) wcscpy ( szFolder, L"CMD.EXE" ) ;
else wcscpy ( szFolder, L"COMMAND.COM" ) ;
}
// CMD.EXE 偺奼挘婡擻傪晅壛
const wchar_t *szComspecAddtional = IsOsUnicode ? L" /f:on" : L"" ; // "f:on" 偺慜偵嬻敀傪
// 僐儅儞僪儔僀儞傪嶌惉
wchar_t szCommandLine [ MAX_PATH + MAX_PATH + 0x10 ] ;
if ( IsFileExistW ( szBatFileName ) ) swprintf ( szCommandLine, L"\"%s\"%s /K \"%s\"", szFolder, szComspecAddtional, szBatFileName ) ;
else swprintf ( szCommandLine, L"\"%s\"%s", szFolder, szComspecAddtional ) ;
// 幚峴
ExecuteW ( szCommandLine, -1, 0, NULL ) ;
}
else {
char szFolder [ MAX_PATH ] ;
char szBatFileName [ MAX_PATH ] ;
// 儅僀僪僉儏儊儞僩僼僅儖僟柤傪庢摼
if ( GetSpecialFolderPathA ( NULL, szFolder, CSIDL_PERSONAL, 0 ) ) {
if ( GetSpecialFolderPathA ( NULL, szFolder, CSIDL_DESKTOP, 0 ) ) strcpy ( szFolder, "C:\\" ) ;
}
SetCurrentDirectoryA ( szFolder ) ;
// 傕偆堦偮偺僷僗傪愝掕乮傕偟偁傟偽乯
if ( IsOsUnicode && ! GetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_SUB_A, "Path", szFolder, MAX_PATH ) ) {
SetPathSeparatorA ( szFolder, ADD_SEPARATOR_ONLY_ROOT ) ;
AddEnvPathA ( szFolder, TRUE ) ;
}
// 僷僗傪愝掕
if ( GetRegStringA ( HKEY_LOCAL_MACHINE, REG_SUBKEY_A, "Path", szFolder, MAX_PATH ) ) {
GetModuleFileNameA ( NULL, szFolder, MAX_PATH ) ;
ChangeFileNameA ( szFolder, NULL ) ;
}
SetPathSeparatorA ( szFolder, ADD_SEPARATOR_ONLY_ROOT ) ;
if ( IsOsUnicode && AddEnvPathA ( szFolder, TRUE ) ) {
char szCommandName [ SHORTSTRING_MAX ] ;
LoadStringExA ( IDS_COMMANDNAME, szCommandName, SHORTSTRING_MAX ) ;
MessageBoxA ( NULL, GetStringA ( IDS_NOT_ENOUGH_MEMORY ), szCommandName, MB_OK ) ;
return 1 ;
}
// 僶僢僠僼傽僀儖柤傪愝掕
strcpy ( szBatFileName, szFolder ) ;
SetPathSeparatorA ( szBatFileName, ADD_SEPARATOR_ALWAYS ) ;
strcat ( szBatFileName, GetStringA ( IDS_BAT_FILENAME ) ) ;
// 僐儅儞僪僀儞僞乕僾儕僞柤傪庢摼
int nResult = GetEnvironmentVariableA ( "COMSPEC", szFolder, MAX_PATH ) ;
if ( nResult <= 0 || nResult > MAX_PATH ) {
if ( IsOsUnicode ) strcpy ( szFolder, "CMD.EXE" ) ;
else strcpy ( szFolder, "COMMAND.COM" ) ;
}
// CMD.EXE 偺奼挘婡擻傪晅壛
const char *szComspecAddtional = IsOsUnicode ? " /f:on" : "" ; // "f:on" 偺慜偵嬻敀傪
// 僐儅儞僪儔僀儞傪嶌惉
char szCommandLine [ MAX_PATH + MAX_PATH + 0x10 ] ;
if ( IsFileExistA ( szBatFileName ) ) sprintf ( szCommandLine, "\"%s\"%s /K \"%s\"", szFolder, szComspecAddtional, szBatFileName ) ;
else sprintf ( szCommandLine, "\"%s\"%s", szFolder, szComspecAddtional ) ;
// 幚峴
ExecuteA ( szCommandLine, -1, 0, NULL ) ;
}
return 0 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -