]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - Plugson/src/main_windows.c
Fix the order issue in TreeView mode. (#3218)
[Ventoy.git] / Plugson / src / main_windows.c
index 7eea97624762c9e92ff12ecdf5d7d7f7618993aa..49e89c3f504fdf5a5058d8ab8fd1bfdd385cb171 100644 (file)
@@ -82,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
@@ -399,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
@@ -414,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
@@ -527,8 +536,14 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
 {\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
@@ -562,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
@@ -585,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
@@ -605,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