⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadcmd_c.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 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 + -