[Ttssh2-commit] [6749] FileDir の初期値をDownloads(XP以前はMy Documents ) に変更

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2017年 5月 27日 (土) 09:24:51 JST


Revision: 6749
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6749
Author:   maya
Date:     2017-05-27 09:24:51 +0900 (Sat, 27 May 2017)
Log Message:
-----------
FileDir の初期値をDownloads(XP以前はMy Documents)に変更

Modified Paths:
--------------
    trunk/teraterm/common/ttlib.c
    trunk/teraterm/common/ttlib.h
    trunk/teraterm/ttpcmn/ttpcmn.def
    trunk/teraterm/ttpset/ttset.c

-------------- next part --------------
Modified: trunk/teraterm/common/ttlib.c
===================================================================
--- trunk/teraterm/common/ttlib.c	2017-05-24 14:56:53 UTC (rev 6748)
+++ trunk/teraterm/common/ttlib.c	2017-05-27 00:24:51 UTC (rev 6749)
@@ -823,6 +823,37 @@
 	return v;
 }
 
+void GetDownloadFolder(char *dest, int destlen)
+{
+	HMODULE hDll;
+	typedef GUID KNOWNFOLDERID;
+	typedef HRESULT(WINAPI *SHGETKNOWNFOLDERPATH)(KNOWNFOLDERID*, DWORD, HANDLE, PWSTR*);
+	// {374DE290-123F-4565-9164-39C4925E467B}
+	KNOWNFOLDERID FOLDERID_Downloads = { 0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b };
+	char download[MAX_PATH];
+
+	memset(download, 0, sizeof(download));
+	if (hDll = LoadLibrary("shell32.dll")) {
+		SHGETKNOWNFOLDERPATH pSHGetKnownFolderPath = (SHGETKNOWNFOLDERPATH)GetProcAddress(hDll, "SHGetKnownFolderPath");
+		if (pSHGetKnownFolderPath) {
+			PWSTR pBuffer = NULL;
+			pSHGetKnownFolderPath(&FOLDERID_Downloads, 0, NULL, &pBuffer);
+			WideCharToMultiByte(CP_ACP, 0, pBuffer, -1, download, sizeof(download), NULL, NULL);
+		}
+		FreeLibrary(hDll);
+	}
+	if (strlen(download) == 0) {
+		LPITEMIDLIST pidl;
+		if (SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &pidl) == NOERROR) {
+			SHGetPathFromIDList(pidl, download);
+			CoTaskMemFree(pidl);
+		}
+	}
+	if (strlen(download) > 0) {
+		strncpy_s(dest, destlen, download, _TRUNCATE);
+	}
+}
+
 void WINAPI GetDefaultFName(char *home, char *file, char *dest, int destlen)
 {
 	// My Documents \x82\xC9 file \x82\xAA\x82\xA0\x82\xE9\x8Fꍇ\x81A

Modified: trunk/teraterm/common/ttlib.h
===================================================================
--- trunk/teraterm/common/ttlib.h	2017-05-24 14:56:53 UTC (rev 6748)
+++ trunk/teraterm/common/ttlib.h	2017-05-27 00:24:51 UTC (rev 6749)
@@ -37,6 +37,7 @@
 BOOL GetNthString(PCHAR Source, int Nth, int Size, PCHAR Dest);
 void GetNthNum(PCHAR Source, int Nth, int far *Num);
 int GetNthNum2(PCHAR Source, int Nth, int defval);
+void GetDownloadFolder(char *dest, int destlen);
 void WINAPI GetDefaultFName(char *home, char *file, char *dest, int destlen);
 void GetDefaultSetupFName(char *home, char *dest, int destlen);
 void GetUILanguageFile(char *buf, int buflen);

Modified: trunk/teraterm/ttpcmn/ttpcmn.def
===================================================================
--- trunk/teraterm/ttpcmn/ttpcmn.def	2017-05-24 14:56:53 UTC (rev 6748)
+++ trunk/teraterm/ttpcmn/ttpcmn.def	2017-05-27 00:24:51 UTC (rev 6749)
@@ -83,3 +83,4 @@
   HasGetAdaptersAddresses @72
   HasDnsQuery @73
   HasBalloonTipSupport @87
+  GetDownloadFolder @88

Modified: trunk/teraterm/ttpset/ttset.c
===================================================================
--- trunk/teraterm/ttpset/ttset.c	2017-05-24 14:56:53 UTC (rev 6748)
+++ trunk/teraterm/ttpset/ttset.c	2017-05-27 00:24:51 UTC (rev 6749)
@@ -1102,11 +1102,11 @@
 	GetPrivateProfileString(Section, "FileDir", "",
 	                        ts->FileDir, sizeof(ts->FileDir), FName);
 	if (strlen(ts->FileDir) == 0)
-		strncpy_s(ts->FileDir, sizeof(ts->FileDir), ts->HomeDir, _TRUNCATE);
+		GetDownloadFolder(ts->FileDir, sizeof(ts->FileDir));
 	else {
 		_getcwd(Temp, sizeof(Temp));
 		if (_chdir(ts->FileDir) != 0)
-			strncpy_s(ts->FileDir, sizeof(ts->FileDir), ts->HomeDir, _TRUNCATE);
+			GetDownloadFolder(ts->FileDir, sizeof(ts->FileDir));
 		_chdir(Temp);
 	}
 



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