]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - Ventoy2Disk/Ventoy2Disk/WinDialog.c
c2535603574c4dd1f3b6408cefb6a46f0fd8a635
[Ventoy.git] / Ventoy2Disk / Ventoy2Disk / WinDialog.c
1 /******************************************************************************
2 * WinDialog.c
3 *
4 * Copyright (c) 2020, longpanda <admin@ventoy.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 3 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20
21 #include <Windows.h>
22 #include <commctrl.h>
23 #include "resource.h"
24 #include "Language.h"
25 #include "Ventoy2Disk.h"
26
27 HINSTANCE g_hInst;
28
29
30 BOOL g_SecureBoot = FALSE;
31 HWND g_DialogHwnd;
32 HWND g_ComboxHwnd;
33 HWND g_StaticLocalVerHwnd;
34 HWND g_StaticDiskVerHwnd;
35 HWND g_BtnInstallHwnd;
36 HWND g_StaticDevHwnd;
37 HWND g_StaticLocalHwnd;
38 HWND g_StaticDiskHwnd;
39 HWND g_BtnUpdateHwnd;
40 HWND g_ProgressBarHwnd;
41 HWND g_StaticStatusHwnd;
42 CHAR g_CurVersion[64];
43 HANDLE g_ThreadHandle = NULL;
44
45 int g_language_count = 0;
46 int g_cur_lang_id = 0;
47 VENTOY_LANGUAGE *g_language_data = NULL;
48 VENTOY_LANGUAGE *g_cur_lang_data = NULL;
49
50 static int LoadCfgIni(void)
51 {
52 int value;
53
54 value = GetPrivateProfileInt(TEXT("Ventoy"), TEXT("SecureBoot"), 0, VENTOY_CFG_INI);
55
56 if (value == 1)
57 {
58 g_SecureBoot = TRUE;
59 }
60
61 return 0;
62 }
63
64 static int WriteCfgIni(void)
65 {
66 WCHAR TmpBuf[128];
67
68 swprintf_s(TmpBuf, 128, TEXT("%d"), g_cur_lang_id);
69 WritePrivateProfileString(TEXT("Ventoy"), TEXT("Language"), TmpBuf, VENTOY_CFG_INI);
70
71 swprintf_s(TmpBuf, 128, TEXT("%d"), g_SecureBoot);
72 WritePrivateProfileString(TEXT("Ventoy"), TEXT("SecureBoot"), TmpBuf, VENTOY_CFG_INI);
73
74 return 0;
75 }
76
77
78 void GetExeVersionInfo(const char *FilePath)
79 {
80 UINT length;
81 DWORD verBufferSize;
82 CHAR verBuffer[2048];
83 VS_FIXEDFILEINFO *verInfo = NULL;
84
85 verBufferSize = GetFileVersionInfoSizeA(FilePath, NULL);
86
87 if (verBufferSize > 0 && verBufferSize <= sizeof(verBuffer))
88 {
89 if (GetFileVersionInfoA(FilePath, 0, verBufferSize, (LPVOID)verBuffer))
90 {
91 VerQueryValueA(verBuffer, "\\", &verInfo, &length);
92
93 safe_sprintf(g_CurVersion, "%u.%u.%u.%u",
94 HIWORD(verInfo->dwProductVersionMS),
95 LOWORD(verInfo->dwProductVersionMS),
96 HIWORD(verInfo->dwProductVersionLS),
97 LOWORD(verInfo->dwProductVersionLS));
98 }
99 }
100 }
101
102 void SetProgressBarPos(int Pos)
103 {
104 CHAR Ratio[64];
105
106 if (Pos >= PT_FINISH)
107 {
108 Pos = PT_FINISH;
109 }
110
111 SendMessage(g_ProgressBarHwnd, PBM_SETPOS, Pos, 0);
112
113 safe_sprintf(Ratio, "Status - %.0lf%%", Pos * 100.0 / PT_FINISH);
114 SetWindowTextA(g_StaticStatusHwnd, Ratio);
115 }
116
117 static void OnComboxSelChange(HWND hCombox)
118 {
119 int nCurSelected;
120 PHY_DRIVE_INFO *CurDrive = NULL;
121
122 SetWindowTextA(g_StaticLocalVerHwnd, GetLocalVentoyVersion());
123 EnableWindow(g_BtnInstallHwnd, FALSE);
124 EnableWindow(g_BtnUpdateHwnd, FALSE);
125
126 nCurSelected = SendMessage(hCombox, CB_GETCURSEL, 0, 0);
127 if (CB_ERR == nCurSelected)
128 {
129 return;
130 }
131
132 CurDrive = GetPhyDriveInfoById(nCurSelected);
133 if (!CurDrive)
134 {
135 return;
136 }
137
138 SetWindowTextA(g_StaticDiskVerHwnd, CurDrive->VentoyVersion);
139
140 if (g_ForceOperation == 0)
141 {
142 if (CurDrive->VentoyVersion[0])
143 {
144 //only can update
145 EnableWindow(g_BtnInstallHwnd, FALSE);
146 EnableWindow(g_BtnUpdateHwnd, TRUE);
147 }
148 else
149 {
150 //only can install
151 EnableWindow(g_BtnInstallHwnd, TRUE);
152 EnableWindow(g_BtnUpdateHwnd, FALSE);
153 }
154 }
155 else
156 {
157 EnableWindow(g_BtnInstallHwnd, TRUE);
158 EnableWindow(g_BtnUpdateHwnd, TRUE);
159 }
160
161 InvalidateRect(g_DialogHwnd, NULL, TRUE);
162 UpdateWindow(g_DialogHwnd);
163 }
164
165 static void UpdateItemString(int defaultLangId)
166 {
167 int i;
168 HMENU SubMenu;
169 HFONT hLangFont;
170 HMENU hMenu = GetMenu(g_DialogHwnd);
171
172 g_cur_lang_id = defaultLangId;
173 g_cur_lang_data = g_language_data + defaultLangId;
174
175
176
177 hLangFont = CreateFont(g_language_data[defaultLangId].FontSize, 0, 0, 0, 400, FALSE, FALSE, 0,
178 DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
179 CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
180 DEFAULT_PITCH, g_language_data[defaultLangId].FontFamily);
181
182 SendMessage(g_BtnInstallHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
183 SendMessage(g_BtnUpdateHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
184 SendMessage(g_StaticStatusHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
185 SendMessage(g_StaticLocalHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
186 SendMessage(g_StaticDiskHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
187 SendMessage(g_StaticDevHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
188 SendMessage(g_DialogHwnd, WM_SETFONT, (WPARAM)hLangFont, TRUE);
189
190 ModifyMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, 0, _G(STR_MENU_OPTION));
191
192 SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_DEV), _G(STR_DEVICE));
193 SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_LOCAL), _G(STR_LOCAL_VER));
194 SetWindowText(GetDlgItem(g_DialogHwnd, IDC_STATIC_DISK), _G(STR_DISK_VER));
195 SetWindowText(g_StaticStatusHwnd, _G(STR_STATUS));
196
197 SetWindowText(g_BtnInstallHwnd, _G(STR_INSTALL));
198 SetWindowText(g_BtnUpdateHwnd, _G(STR_UPDATE));
199
200 SubMenu = GetSubMenu(hMenu, 0);
201 if (g_SecureBoot)
202 {
203 ModifyMenu(SubMenu, 0, MF_BYPOSITION | MF_STRING | MF_CHECKED, 0, _G(STR_MENU_SECURE_BOOT));
204 }
205 else
206 {
207 ModifyMenu(SubMenu, 0, MF_BYPOSITION | MF_STRING | MF_UNCHECKED, 0, _G(STR_MENU_SECURE_BOOT));
208 }
209
210 ShowWindow(g_DialogHwnd, SW_HIDE);
211 ShowWindow(g_DialogHwnd, SW_NORMAL);
212
213 //Update check
214 for (i = 0; i < g_language_count; i++)
215 {
216 CheckMenuItem(hMenu, VTOY_MENU_LANGUAGE_BEGIN | i, MF_BYCOMMAND | MF_STRING | MF_UNCHECKED);
217 }
218 CheckMenuItem(hMenu, VTOY_MENU_LANGUAGE_BEGIN | defaultLangId, MF_BYCOMMAND | MF_STRING | MF_CHECKED);
219 }
220
221 static void LanguageInit(void)
222 {
223 int i, j, k;
224 int id, DefaultId;
225 WCHAR Language[64];
226 WCHAR TmpBuf[256];
227 LANGID LangId = GetSystemDefaultUILanguage();
228 HMENU SubMenu;
229 HMENU hMenu = GetMenu(g_DialogHwnd);
230
231 SubMenu = GetSubMenu(hMenu, 1);
232 DeleteMenu(SubMenu, 0, MF_BYPOSITION);
233
234 g_language_data = (VENTOY_LANGUAGE *)malloc(sizeof(VENTOY_LANGUAGE)* VENTOY_MAX_LANGUAGE);
235 memset(g_language_data, 0, sizeof(VENTOY_LANGUAGE)* VENTOY_MAX_LANGUAGE);
236
237 swprintf_s(Language, 64, L"StringDefine");
238 for (i = 0; i < STR_ID_MAX; i++)
239 {
240 swprintf_s(TmpBuf, 256, L"%d", i);
241 GET_INI_STRING(TmpBuf, g_language_data[0].StrId[i]);
242 }
243
244 for (i = 0; i < VENTOY_MAX_LANGUAGE; i++)
245 {
246 swprintf_s(Language, 64, L"Language%d", i);
247 GET_INI_STRING(TEXT("name"), g_language_data[i].Name);
248
249 if (g_language_data[i].Name[0] == '#')
250 {
251 break;
252 }
253
254 g_language_count++;
255 Log("Find Language%d ...", i);
256
257 AppendMenu(SubMenu, MF_STRING | MF_BYCOMMAND, VTOY_MENU_LANGUAGE_BEGIN | i, g_language_data[i].Name);
258
259 GET_INI_STRING(TEXT("FontFamily"), g_language_data[i].FontFamily);
260 g_language_data[i].FontSize = GetPrivateProfileInt(Language, TEXT("FontSize"), 10, VENTOY_LANGUAGE_INI);
261
262 for (j = 0; j < STR_ID_MAX; j++)
263 {
264 GET_INI_STRING(g_language_data[0].StrId[j], g_language_data[i].MsgString[j]);
265
266 for (k = 0; g_language_data[i].MsgString[j][k] && g_language_data[i].MsgString[j][k + 1]; k++)
267 {
268 if (g_language_data[i].MsgString[j][k] == '#' && g_language_data[i].MsgString[j][k + 1] == '@')
269 {
270 g_language_data[i].MsgString[j][k] = '\r';
271 g_language_data[i].MsgString[j][k + 1] = '\n';
272 }
273 }
274 }
275 }
276
277 DefaultId = (MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) == LangId) ? 0 : 1;
278 id = GetPrivateProfileInt(TEXT("Ventoy"), TEXT("Language"), DefaultId, VENTOY_CFG_INI);
279 if (id >= i)
280 {
281 id = DefaultId;
282 }
283
284 UpdateItemString(id);
285 }
286
287 static BOOL InitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
288 {
289 DWORD i;
290 HANDLE hCombox;
291 HFONT hStaticFont;
292 CHAR Letter[32];
293 CHAR DeviceName[256];
294 HICON hIcon;
295
296 g_DialogHwnd = hWnd;
297 g_ComboxHwnd = GetDlgItem(hWnd, IDC_COMBO1);
298 g_StaticLocalVerHwnd = GetDlgItem(hWnd, IDC_STATIC_LOCAL_VER);
299 g_StaticDiskVerHwnd = GetDlgItem(hWnd, IDC_STATIC_DISK_VER);
300 g_BtnInstallHwnd = GetDlgItem(hWnd, IDC_BUTTON4);
301
302
303 g_StaticDevHwnd = GetDlgItem(hWnd, IDC_STATIC_DEV);
304 g_StaticLocalHwnd = GetDlgItem(hWnd, IDC_STATIC_LOCAL);
305 g_StaticDiskHwnd = GetDlgItem(hWnd, IDC_STATIC_DISK);
306
307
308 g_BtnUpdateHwnd = GetDlgItem(hWnd, IDC_BUTTON3);
309 g_ProgressBarHwnd = GetDlgItem(hWnd, IDC_PROGRESS1);
310 g_StaticStatusHwnd = GetDlgItem(hWnd, IDC_STATIC_STATUS);
311
312 hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1));
313 SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
314 SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
315
316 SendMessage(g_ProgressBarHwnd, PBM_SETRANGE, (WPARAM)0, (LPARAM)(MAKELPARAM(0, PT_FINISH)));
317 PROGRESS_BAR_SET_POS(PT_START);
318
319 SetMenu(hWnd, LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU1)));
320
321 LoadCfgIni();
322 LanguageInit();
323
324
325 // Fill device combox
326 hCombox = GetDlgItem(hWnd, IDC_COMBO1);
327 for (i = 0; i < g_PhyDriveCount; i++)
328 {
329 if (g_PhyDriveList[i].Id < 0)
330 {
331 continue;
332 }
333
334 if (g_PhyDriveList[i].FirstDriveLetter >= 0)
335 {
336 safe_sprintf(Letter, "%C: ", g_PhyDriveList[i].FirstDriveLetter);
337 }
338 else
339 {
340 Letter[0] = 0;
341 }
342
343 safe_sprintf(DeviceName, "%s[%dGB] %s %s",
344 Letter,
345 GetHumanReadableGBSize(g_PhyDriveList[i].SizeInBytes),
346 g_PhyDriveList[i].VendorId,
347 g_PhyDriveList[i].ProductId
348 );
349 SendMessageA(hCombox, CB_ADDSTRING, 0, (LPARAM)DeviceName);
350 }
351
352 SendMessage(hCombox, CB_SETCURSEL, 0, 0);
353
354 // Set static text & font
355 hStaticFont = CreateFont(26, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0,
356 ANSI_CHARSET, OUT_DEFAULT_PRECIS,
357 CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
358 DEFAULT_PITCH&FF_SWISS, TEXT("Courier New"));
359
360 SendMessage(g_StaticLocalVerHwnd, WM_SETFONT, (WPARAM)hStaticFont, TRUE);
361 SendMessage(g_StaticDiskVerHwnd, WM_SETFONT, (WPARAM)hStaticFont, TRUE);
362
363 OnComboxSelChange(g_ComboxHwnd);
364
365 SetFocus(g_ProgressBarHwnd);
366
367 return TRUE;
368 }
369
370 static DWORD WINAPI InstallVentoyThread(void* Param)
371 {
372 int rc;
373 PHY_DRIVE_INFO *pPhyDrive = (PHY_DRIVE_INFO *)Param;
374
375 rc = InstallVentoy2PhyDrive(pPhyDrive);
376 if (rc)
377 {
378 Log("This time install failed, now wait and retry...");
379 Sleep(10000);
380
381 Log("Now retry to install...");
382
383 rc = InstallVentoy2PhyDrive(pPhyDrive);
384 }
385
386 if (rc == 0)
387 {
388 PROGRESS_BAR_SET_POS(PT_FINISH);
389 MessageBox(g_DialogHwnd, _G(STR_INSTALL_SUCCESS), _G(STR_INFO), MB_OK | MB_ICONINFORMATION);
390 safe_strcpy(pPhyDrive->VentoyVersion, GetLocalVentoyVersion());
391 }
392 else
393 {
394 PROGRESS_BAR_SET_POS(PT_FINISH);
395 MessageBox(g_DialogHwnd, _G(STR_INSTALL_FAILED), _G(STR_ERROR), MB_OK | MB_ICONERROR);
396 }
397
398 PROGRESS_BAR_SET_POS(PT_START);
399 g_ThreadHandle = NULL;
400 SetWindowText(g_StaticStatusHwnd, _G(STR_STATUS));
401 OnComboxSelChange(g_ComboxHwnd);
402
403 return 0;
404 }
405
406 static DWORD WINAPI UpdateVentoyThread(void* Param)
407 {
408 int rc;
409 PHY_DRIVE_INFO *pPhyDrive = (PHY_DRIVE_INFO *)Param;
410
411 rc = UpdateVentoy2PhyDrive(pPhyDrive);
412 if (rc)
413 {
414 Log("This time update failed, now wait and retry...");
415 Sleep(10000);
416
417 Log("Now retry to update...");
418
419 rc = UpdateVentoy2PhyDrive(pPhyDrive);
420 }
421
422 if (rc == 0)
423 {
424 PROGRESS_BAR_SET_POS(PT_FINISH);
425 MessageBox(g_DialogHwnd, _G(STR_UPDATE_SUCCESS), _G(STR_INFO), MB_OK | MB_ICONINFORMATION);
426 safe_strcpy(pPhyDrive->VentoyVersion, GetLocalVentoyVersion());
427 }
428 else
429 {
430 PROGRESS_BAR_SET_POS(PT_FINISH);
431 MessageBox(g_DialogHwnd, _G(STR_UPDATE_FAILED), _G(STR_ERROR), MB_OK | MB_ICONERROR);
432 }
433
434 PROGRESS_BAR_SET_POS(PT_START);
435 g_ThreadHandle = NULL;
436 SetWindowText(g_StaticStatusHwnd, _G(STR_STATUS));
437 OnComboxSelChange(g_ComboxHwnd);
438
439 return 0;
440 }
441
442
443
444 static void OnInstallBtnClick(void)
445 {
446 int nCurSel;
447 PHY_DRIVE_INFO *pPhyDrive = NULL;
448
449 if (MessageBox(g_DialogHwnd, _G(STR_INSTALL_TIP), _G(STR_WARNING), MB_YESNO | MB_ICONWARNING) != IDYES)
450 {
451 return;
452 }
453
454 if (MessageBox(g_DialogHwnd, _G(STR_INSTALL_TIP2), _G(STR_WARNING), MB_YESNO | MB_ICONWARNING) != IDYES)
455 {
456 return;
457 }
458
459 if (g_ThreadHandle)
460 {
461 Log("Another thread is runing");
462 return;
463 }
464
465 nCurSel = SendMessage(g_ComboxHwnd, CB_GETCURSEL, 0, 0);
466 if (CB_ERR == nCurSel)
467 {
468 Log("Failed to get combox sel");
469 return;;
470 }
471
472 pPhyDrive = GetPhyDriveInfoById(nCurSel);
473 if (!pPhyDrive)
474 {
475 return;
476 }
477
478 EnableWindow(g_BtnInstallHwnd, FALSE);
479 EnableWindow(g_BtnUpdateHwnd, FALSE);
480
481 g_ThreadHandle = CreateThread(NULL, 0, InstallVentoyThread, (LPVOID)pPhyDrive, 0, NULL);
482 }
483
484
485
486 static void OnUpdateBtnClick(void)
487 {
488 int nCurSel;
489 PHY_DRIVE_INFO *pPhyDrive = NULL;
490
491 if (MessageBox(g_DialogHwnd, _G(STR_UPDATE_TIP), _G(STR_INFO), MB_YESNO | MB_ICONQUESTION) != IDYES)
492 {
493 return;
494 }
495
496 if (g_ThreadHandle)
497 {
498 Log("Another thread is runing");
499 return;
500 }
501
502 nCurSel = SendMessage(g_ComboxHwnd, CB_GETCURSEL, 0, 0);
503 if (CB_ERR == nCurSel)
504 {
505 Log("Failed to get combox sel");
506 return;;
507 }
508
509 pPhyDrive = GetPhyDriveInfoById(nCurSel);
510 if (!pPhyDrive)
511 {
512 return;
513 }
514
515 EnableWindow(g_BtnInstallHwnd, FALSE);
516 EnableWindow(g_BtnUpdateHwnd, FALSE);
517
518 g_ThreadHandle = CreateThread(NULL, 0, UpdateVentoyThread, (LPVOID)pPhyDrive, 0, NULL);
519 }
520
521 static void MenuProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
522 {
523 WORD CtrlID;
524 HMENU hMenu = GetMenu(hWnd);
525
526 CtrlID = LOWORD(wParam);
527
528 if (CtrlID == 0)
529 {
530 g_SecureBoot = !g_SecureBoot;
531
532 if (g_SecureBoot)
533 {
534 CheckMenuItem(hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_CHECKED);
535 }
536 else
537 {
538 CheckMenuItem(hMenu, 0, MF_BYCOMMAND | MF_STRING | MF_UNCHECKED);
539 }
540 }
541 else if (CtrlID >= VTOY_MENU_LANGUAGE_BEGIN && CtrlID < VTOY_MENU_LANGUAGE_BEGIN + g_language_count)
542 {
543 UpdateItemString(CtrlID - VTOY_MENU_LANGUAGE_BEGIN);
544 }
545 }
546
547 INT_PTR CALLBACK DialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
548 {
549 WORD NotifyCode;
550 WORD CtrlID;
551
552 switch (Message)
553 {
554 case WM_COMMAND:
555 {
556 NotifyCode = HIWORD(wParam);
557 CtrlID = LOWORD(wParam);
558
559 if (CtrlID == IDC_COMBO1 && NotifyCode == CBN_SELCHANGE)
560 {
561 OnComboxSelChange((HWND)lParam);
562 }
563
564 if (CtrlID == IDC_BUTTON4 && NotifyCode == BN_CLICKED)
565 {
566 OnInstallBtnClick();
567 }
568 else if (CtrlID == IDC_BUTTON3 && NotifyCode == BN_CLICKED)
569 {
570 OnUpdateBtnClick();
571 }
572
573 if (lParam == 0 && NotifyCode == 0)
574 {
575 MenuProc(hWnd, wParam, lParam);
576 }
577
578 break;
579 }
580 case WM_INITDIALOG:
581 {
582 InitDialog(hWnd, wParam, lParam);
583 break;
584 }
585 case WM_CTLCOLORSTATIC:
586 {
587 if (GetDlgItem(hWnd, IDC_STATIC_LOCAL_VER) == (HANDLE)lParam ||
588 GetDlgItem(hWnd, IDC_STATIC_DISK_VER) == (HANDLE)lParam)
589 {
590 SetBkMode((HDC)wParam, TRANSPARENT);
591 SetTextColor((HDC)wParam, RGB(255, 0, 0));
592 return (LRESULT)(HBRUSH)(GetStockObject(HOLLOW_BRUSH));
593 }
594 else
595 {
596 break;
597 }
598 }
599 case WM_CLOSE:
600 {
601 if (g_ThreadHandle)
602 {
603 MessageBox(g_DialogHwnd, _G(STR_WAIT_PROCESS), _G(STR_INFO), MB_OK | MB_ICONINFORMATION);
604 }
605 else
606 {
607 EndDialog(hWnd, 0);
608 }
609 WriteCfgIni();
610 break;
611 }
612 }
613
614 return 0;
615 }
616
617 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
618 {
619 UNREFERENCED_PARAMETER(hPrevInstance);
620
621 if (!IsFileExist(VENTOY_FILE_VERSION))
622 {
623 if (IsDirExist("grub"))
624 {
625 MessageBox(NULL, _G(STR_INCORRECT_DIR), _G(STR_ERROR), MB_OK | MB_ICONERROR);
626 }
627 else
628 {
629 MessageBox(NULL, _G(STR_INCORRECT_DIR), _G(STR_ERROR), MB_OK | MB_ICONERROR);
630 }
631 return ERROR_NOT_FOUND;
632 }
633
634 GetExeVersionInfo(__argv[0]);
635
636 Log("\n################################ Ventoy2Disk %s ################################", g_CurVersion);
637
638 ParseCmdLineOption(lpCmdLine);
639
640 DumpWindowsVersion();
641
642 Ventoy2DiskInit();
643
644
645
646 g_hInst = hInstance;
647 DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
648
649 Ventoy2DiskDestroy();
650
651 return 0;
652 }