]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - Plugson/src/main_windows.c
Fix the issue that VTOY_LINUX_REMOUNT option does not take effect in latest openSUSE...
[Ventoy.git] / Plugson / src / main_windows.c
index 6f74d2b713e9fde402ed426afd7368f936a2db4f..49e89c3f504fdf5a5058d8ab8fd1bfdd385cb171 100644 (file)
@@ -12,6 +12,7 @@
 \r
 char g_ventoy_dir[MAX_PATH];\r
 \r
+static BOOL g_ChromeFirst = TRUE;\r
 static BOOL g_running = FALSE;\r
 static HWND g_refresh_button;\r
 static HWND g_start_button;\r
@@ -81,6 +82,14 @@ const WCHAR *g_msg_en[MSGID_BUTT] =
        L"ventoy\\plugson.tar.xz does not exist, please run under the correct directory!",\r
 };\r
 \r
+#define UTF8_Log(fmt, wstr) \\r
+{\\r
+    memset(TmpPathA, 0, sizeof(TmpPathA));\\r
+    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, TmpPathA, sizeof(TmpPathA), NULL, NULL);\\r
+    vlog(fmt, TmpPathA);\\r
+}\r
+\r
+\r
 const WCHAR **g_msg_lang = NULL;\r
 \r
 HINSTANCE g_hInst;\r
@@ -118,14 +127,17 @@ static void OpenURL(void)
 \r
        sprintf_s(url, sizeof(url), "http://%s:%s/index.html", g_sysinfo.ip, g_sysinfo.port);\r
 \r
-    for (i = 0; Browsers[i] != NULL; i++)\r
-    {\r
-        if (ventoy_is_file_exist("%s", Browsers[i]))\r
-        {\r
-            ShellExecuteA(NULL, "open", Browsers[i], url, NULL, SW_SHOW);\r
-            return;\r
-        }\r
-    }\r
+       if (g_ChromeFirst)\r
+       {\r
+               for (i = 0; Browsers[i] != NULL; i++)\r
+               {\r
+                       if (ventoy_is_file_exist("%s", Browsers[i]))\r
+                       {\r
+                               ShellExecuteA(NULL, "open", Browsers[i], url, NULL, SW_SHOW);\r
+                               return;\r
+                       }\r
+               }\r
+       }\r
 \r
     ShellExecuteA(NULL, "open", url, NULL, NULL, SW_SHOW);\r
 }\r
@@ -395,7 +407,7 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara
         {\r
             InitDialog(hWnd, wParam, lParam);\r
             break;\r
-        }        \r
+        }\r
         case WM_CLOSE:\r
         {\r
                        if (g_running)\r
@@ -410,6 +422,7 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lPara
 \r
             OnDestroyDialog();\r
             EndDialog(hWnd, 0);\r
+                       break;\r
         }\r
     }\r
 \r
@@ -521,12 +534,28 @@ static void DllProtect(void)
 \r
 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)\r
 {\r
+       int i;\r
     int rc;\r
+       int status = 0;\r
        HANDLE hMutex;\r
+       WCHAR* Pos = NULL;\r
        WCHAR CurDir[MAX_PATH];\r
+       WCHAR ExePath[MAX_PATH];\r
+       WCHAR CurDirBk[MAX_PATH];\r
+       WCHAR ExePathBk[MAX_PATH];\r
+       CHAR TmpPathA[MAX_PATH];\r
 \r
     UNREFERENCED_PARAMETER(hPrevInstance);\r
 \r
+       for (i = 0; i < __argc; i++)\r
+       {\r
+               if (__argv[i] && _stricmp(__argv[i], "/F") == 0)\r
+               {\r
+                       g_ChromeFirst = FALSE;\r
+                       break;\r
+               }\r
+       }\r
+\r
        DllProtect();\r
 \r
     if (GetUserDefaultUILanguage() == 0x0804)\r
@@ -548,12 +577,67 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
        }\r
 \r
        GetCurrentDirectoryW(MAX_PATH, CurDir);\r
+       GetCurrentDirectoryW(MAX_PATH, CurDirBk);\r
+       GetModuleFileNameW(NULL, ExePath, MAX_PATH);\r
+       GetModuleFileNameW(NULL, ExePathBk, MAX_PATH);\r
+\r
+       for (Pos = NULL, i = 0; i < MAX_PATH && ExePath[i]; i++)\r
+       {\r
+               if (ExePath[i] == '\\' || ExePath[i] == '/')\r
+               {\r
+                       Pos = ExePath + i;\r
+               }\r
+       }\r
+\r
+       if (Pos)\r
+       {\r
+               *Pos = 0;\r
+               if (wcscmp(CurDir, ExePath))\r
+               {\r
+                       status |= 1;\r
+                       SetCurrentDirectoryW(ExePath);\r
+                       GetCurrentDirectoryW(MAX_PATH, CurDir);\r
+               }\r
+               else\r
+               {\r
+                       status |= 2;\r
+               }\r
+       }\r
+\r
+       Pos = wcsstr(CurDir, L"\\altexe");\r
+       if (Pos)\r
+       {\r
+               *Pos = 0;\r
+               status |= 4;\r
+               SetCurrentDirectoryW(CurDir);\r
+       }\r
+\r
+\r
        WideCharToMultiByte(CP_UTF8, 0, CurDir, -1, g_cur_dir, MAX_PATH, NULL, 0);\r
 \r
        sprintf_s(g_ventoy_dir, sizeof(g_ventoy_dir), "%s", g_cur_dir);\r
-       sprintf_s(g_log_file, sizeof(g_log_file), "%s\\%s", g_cur_dir, LOG_FILE);\r
+       sprintf_s(g_log_file, sizeof(g_log_file), "%s", LOG_FILE);\r
        ventoy_log_init();\r
 \r
+       vlog("====================== Ventoy Plugson =========================\n");\r
+\r
+       UTF8_Log("Current Directory <%s>\n", CurDirBk);\r
+       UTF8_Log("Exe file path <%s>\n", ExePathBk);\r
+       \r
+       if (status & 1)\r
+       {\r
+               UTF8_Log("Change current dir to exe <%s>\n", ExePath);\r
+       }\r
+       if (status & 2)\r
+       {\r
+               vlog("Current directory check OK.\n");\r
+       }\r
+       if (status & 4)\r
+       {\r
+               UTF8_Log("altexe detected, change current dir to <%s>\n", CurDir);\r
+       }\r
+\r
+\r
     if (!ventoy_is_file_exist("%s\\ventoy\\%s", g_ventoy_dir, PLUGSON_TXZ))\r
     {        \r
                MessageBoxW(NULL, g_msg_lang[MSGID_NO_TARXZ_TIP], g_msg_lang[MSGID_ERROR], MB_OK | MB_ICONERROR);\r
@@ -571,7 +655,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
        }\r
 \r
        vlog("===============================================\n");\r
-       vlog("===== Ventoy Plugson %s:%s =====\n", g_sysinfo.ip, g_sysinfo.port);\r
+       vlog("========= Ventoy Plugson %s:%s =========\n", g_sysinfo.ip, g_sysinfo.port);\r
        vlog("===============================================\n");\r
 \r
 \r
@@ -591,7 +675,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
     ventoy_http_init();\r
 \r
     g_hInst = hInstance;\r
-    DialogBoxA(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);\r
+    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);\r
 \r
     return 0;\r
 }\r