]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Add commad line option -s in VentoyVlnk.exe.
authorlongpanda <admin@ventoy.net>
Thu, 17 Feb 2022 02:39:04 +0000 (10:39 +0800)
committerlongpanda <admin@ventoy.net>
Thu, 17 Feb 2022 02:39:04 +0000 (10:39 +0800)
Vlnk/src/main_windows.c
Vlnk/vs/VentoyVlnk/Release/VentoyVlnk.exe

index 064604058723a847847cb375fc90aaa32382d232..ba195f26fe30c36e7161ce19ce118a34ce5b7c18 100644 (file)
@@ -14,6 +14,7 @@ static HWND g_create_button;
 static HWND g_parse_button;\r
 \r
 static BOOL g_ShowHelp = FALSE;\r
 static HWND g_parse_button;\r
 \r
 static BOOL g_ShowHelp = FALSE;\r
+static BOOL g_SaveAs = FALSE;\r
 static WCHAR g_CmdInFile[MAX_PATH];\r
 static WCHAR g_CmdOutFile[MAX_PATH];\r
 \r
 static WCHAR g_CmdInFile[MAX_PATH];\r
 static WCHAR g_CmdOutFile[MAX_PATH];\r
 \r
@@ -363,11 +364,30 @@ End:
 }\r
 \r
 \r
 }\r
 \r
 \r
+static BOOL VentoyGetSaveFileName(HWND hWnd, WCHAR *szFile)\r
+{\r
+    OPENFILENAME ofn = { 0 };\r
+\r
+    ofn.lStructSize = sizeof(ofn);\r
+    ofn.hwndOwner = hWnd;\r
+    ofn.lpstrFilter = L"Vlnk File\0*.vlnk.iso;*.vlnk.img;*.vlnk.wim;*.vlnk.efi;*.vlnk.vhd;*.vlnk.vhdx;*.vlnk.vtoy;*.vlnk.dat\0";\r
+    ofn.nFilterIndex = 1;\r
+    ofn.lpstrFile = szFile;\r
+    ofn.nMaxFile = MAX_PATH;\r
+    ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;\r
+    ofn.lpstrFileTitle = NULL;\r
+    ofn.nMaxFileTitle = 0;\r
+    ofn.lpstrInitialDir = NULL;\r
+\r
+    return GetSaveFileName(&ofn);\r
+}\r
+\r
 static int CreateVlnk(HWND hWnd, WCHAR *Dir, WCHAR *InFile, WCHAR *OutFile)\r
 {\r
     int i;\r
     int end;\r
     int len;\r
 static int CreateVlnk(HWND hWnd, WCHAR *Dir, WCHAR *InFile, WCHAR *OutFile)\r
 {\r
     int i;\r
     int end;\r
     int len;\r
+    BOOL SetOutFile = FALSE;\r
     UINT32 DiskSig;\r
     DISK_EXTENT DiskExtend;\r
     OPENFILENAME ofn = { 0 };\r
     UINT32 DiskSig;\r
     DISK_EXTENT DiskExtend;\r
     OPENFILENAME ofn = { 0 };\r
@@ -500,6 +520,7 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir, WCHAR *InFile, WCHAR *OutFile)
         return 1;\r
     }\r
 \r
         return 1;\r
     }\r
 \r
+\r
     Buf = malloc(VLNK_FILE_LEN);\r
     if (Buf)\r
     {\r
     Buf = malloc(VLNK_FILE_LEN);\r
     if (Buf)\r
     {\r
@@ -510,10 +531,25 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir, WCHAR *InFile, WCHAR *OutFile)
         if (OutFile)\r
         {\r
             wcscpy_s(DstFullPath, MAX_PATH, OutFile);\r
         if (OutFile)\r
         {\r
             wcscpy_s(DstFullPath, MAX_PATH, OutFile);\r
+            SetOutFile = TRUE;\r
         }\r
         else\r
         {\r
             DefaultVlnkDstFullPath(Pos + 1, Dir, DstFullPath);\r
         }\r
         else\r
         {\r
             DefaultVlnkDstFullPath(Pos + 1, Dir, DstFullPath);\r
+\r
+            if (g_SaveAs)\r
+            {\r
+                wcscpy_s(szFile, MAX_PATH, DstFullPath);\r
+                if (VentoyGetSaveFileName(hWnd, szFile))\r
+                {\r
+                    wcscpy_s(DstFullPath, MAX_PATH, szFile);\r
+                    SetOutFile = TRUE;\r
+                }\r
+                else\r
+                {\r
+                    LogA("User cancel the save as diaglog, use default name\n");\r
+                }\r
+            }\r
         }\r
 \r
         LogW(L"vlnk output file path is <%ls>\n", DstFullPath);\r
         }\r
 \r
         LogW(L"vlnk output file path is <%ls>\n", DstFullPath);\r
@@ -524,7 +560,7 @@ static int CreateVlnk(HWND hWnd, WCHAR *Dir, WCHAR *InFile, WCHAR *OutFile)
 \r
             LogW(L"Vlnk file create success <%ls>\n", DstFullPath);\r
 \r
 \r
             LogW(L"Vlnk file create success <%ls>\n", DstFullPath);\r
 \r
-            if (OutFile)\r
+            if (SetOutFile)\r
             {\r
                 swprintf_s(Msg, 1024, L"%ls\r\n\r\n%ls", g_msg_lang[MSGID_VLNK_SUCCESS], DstFullPath);\r
                 VtoyMessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION);\r
             {\r
                 swprintf_s(Msg, 1024, L"%ls\r\n\r\n%ls", g_msg_lang[MSGID_VLNK_SUCCESS], DstFullPath);\r
                 VtoyMessageBox(hWnd, Msg, g_msg_lang[MSGID_INFO], MB_OK | MB_ICONINFORMATION);\r
@@ -580,7 +616,6 @@ static CHAR GetDriveLetter(UINT32 disksig, UINT64 PartOffset)
     return 0;\r
 }\r
 \r
     return 0;\r
 }\r
 \r
-\r
 static int ParseVlnk(HWND hWnd)\r
 {\r
     int i;\r
 static int ParseVlnk(HWND hWnd)\r
 {\r
     int i;\r
@@ -728,6 +763,10 @@ static int ParseCmdLine(LPSTR lpCmdLine)
         {\r
             g_ShowHelp = TRUE;\r
         }\r
         {\r
             g_ShowHelp = TRUE;\r
         }\r
+        else if (lstrcmp(lpszArgv[i], L"-s") == 0 || lstrcmp(lpszArgv[i], L"-S") == 0)\r
+        {\r
+            g_SaveAs = TRUE;\r
+        }\r
         else if (lstrcmp(lpszArgv[i], L"-i") == 0 || lstrcmp(lpszArgv[i], L"-I") == 0)\r
         {\r
             if (i + 1 < argc)\r
         else if (lstrcmp(lpszArgv[i], L"-i") == 0 || lstrcmp(lpszArgv[i], L"-I") == 0)\r
         {\r
             if (i + 1 < argc)\r
index f046a4f7f69df82772ca6b41f207f6def08f6a01..4e37e435c2ed61067fac1a026baeb5213237e6ae 100644 (file)
Binary files a/Vlnk/vs/VentoyVlnk/Release/VentoyVlnk.exe and b/Vlnk/vs/VentoyVlnk/Release/VentoyVlnk.exe differ