[Ttssh2-commit] [8711] _CreateProcessW() を追加

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 4月 12日 (日) 00:57:11 JST


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);


Ttssh2-commit メーリングリストの案内
Back to archive index