Revision: 8711 https://osdn.net/projects/ttssh2/scm/svn/commits/8711 Author: zmatsuo Date: 2020-04-12 00:57:11 +0900 (Sun, 12 Apr 2020) Log Message: ----------- _CreateProcessW() を追加 - マクロの exec が動作するのを確認 Modified Paths: -------------- trunk/teraterm/common/compat_win.cpp trunk/teraterm/common/compat_win.h trunk/teraterm/common/layer_for_unicode.cpp trunk/teraterm/common/layer_for_unicode.h -------------- next part -------------- Modified: trunk/teraterm/common/compat_win.cpp =================================================================== --- trunk/teraterm/common/compat_win.cpp 2020-04-11 15:57:03 UTC (rev 8710) +++ trunk/teraterm/common/compat_win.cpp 2020-04-11 15:57:11 UTC (rev 8711) @@ -77,6 +77,11 @@ DWORD (WINAPI *pGetPrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); BOOL (WINAPI *pWritePrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpString, LPCWSTR lpFileName); +BOOL (WINAPI *pCreateProcessW)(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, + DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); // gdi32.lib int (WINAPI *pAddFontResourceExW)(LPCWSTR name, DWORD fl, PVOID res); @@ -219,6 +224,7 @@ { "SetCurrentDirectoryW", (void **)&pSetCurrentDirectoryW }, { "GetPrivateProfileStringW", (void **)&pGetPrivateProfileStringW }, { "WritePrivateProfileStringW", (void **)&pWritePrivateProfileStringW }, + { "CreateProcessW", (void **)&pCreateProcessW }, #endif { "GetConsoleWindow", (void **)&pGetConsoleWindow }, {}, @@ -304,6 +310,9 @@ pGetCurrentDirectoryW = NULL; pSetCurrentDirectoryW = NULL; pGetOpenFileNameW = NULL; + pSHBrowseForFolderW = NULL; + pSHGetPathFromIDListW = NULL; + pCreateProcessW = NULL; } // GetConsoleWindow\x93\xC1\x95ʏ\x88\x97\x9D Modified: trunk/teraterm/common/compat_win.h =================================================================== --- trunk/teraterm/common/compat_win.h 2020-04-11 15:57:03 UTC (rev 8710) +++ trunk/teraterm/common/compat_win.h 2020-04-11 15:57:11 UTC (rev 8711) @@ -129,6 +129,11 @@ extern DWORD (WINAPI *pGetPrivateProfileStringW)(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); extern BOOL (WINAPI *pWritePrivateProfileStringW)(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName); +extern BOOL (WINAPI *pCreateProcessW)(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, + DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); // shlobj_core.h extern LPITEMIDLIST (WINAPI *pSHBrowseForFolderW)(LPBROWSEINFOW lpbi); Modified: trunk/teraterm/common/layer_for_unicode.cpp =================================================================== --- trunk/teraterm/common/layer_for_unicode.cpp 2020-04-11 15:57:03 UTC (rev 8710) +++ trunk/teraterm/common/layer_for_unicode.cpp 2020-04-11 15:57:11 UTC (rev 8711) @@ -656,3 +656,37 @@ free(fileA); return r; } + +BOOL _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, + DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) +{ + if (pCreateProcessW != NULL) { + return pCreateProcessW(lpApplicationName, lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, bInheritHandles, + dwCreationFlags, lpEnvironment, lpCurrentDirectory, + lpStartupInfo, lpProcessInformation); + } + + // \x8E\xE6\x82荇\x82\xA6\x82\xB8\x81Attl.cpp\x82Ŏg\x82\xC1\x82Ă\xA2\x82镪\x82\xBE\x82\xAF + STARTUPINFOA suiA; + memset(&suiA, 0, sizeof(suiA)); + suiA.cb = lpStartupInfo->cb; + suiA.wShowWindow = lpStartupInfo->wShowWindow; + suiA.dwFlags = suiA.dwFlags; + + char *appA = ToCharW(lpApplicationName); + char *cmdA = ToCharW(lpCommandLine); + char *curA = ToCharW(lpCurrentDirectory); + BOOL r = + CreateProcessA(appA, cmdA, lpProcessAttributes, lpThreadAttributes, bInheritHandles, + dwCreationFlags, lpEnvironment, curA, &suiA, lpProcessInformation); + free(appA); + free(cmdA); + free(curA); + + return r; +} Modified: trunk/teraterm/common/layer_for_unicode.h =================================================================== --- trunk/teraterm/common/layer_for_unicode.h 2020-04-11 15:57:03 UTC (rev 8710) +++ trunk/teraterm/common/layer_for_unicode.h 2020-04-11 15:57:11 UTC (rev 8711) @@ -120,6 +120,11 @@ DWORD _GetPrivateProfileStringW(LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName); BOOL _WritePrivateProfileStringW(LPCWSTR lpAppName,LPCWSTR lpKeyName,LPCWSTR lpString,LPCWSTR lpFileName); +BOOL _CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, + DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); // gdi32.lib int _AddFontResourceW(LPCWSTR lpFileName);