diff options
author | Jean-Francois Mauguit <jfmauguit@mac.com> | 2024-09-24 09:03:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 09:03:25 -0400 |
commit | bab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/setup/postsetup.cpp | |
parent | 4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff) | |
parent | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff) | |
download | winamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz |
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/Winamp/setup/postsetup.cpp')
-rw-r--r-- | Src/Winamp/setup/postsetup.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Src/Winamp/setup/postsetup.cpp b/Src/Winamp/setup/postsetup.cpp new file mode 100644 index 00000000..55eafa94 --- /dev/null +++ b/Src/Winamp/setup/postsetup.cpp @@ -0,0 +1,68 @@ +#define APSTUDIO_READONLY_SYMBOLS +#include "main.h" +#include ".\postsetup.h" +#include "./setup_resource.h" +#include "./langutil.h" +#include "api.h" + + +static BOOL SleepMsg(DWORD dwTimeout) +{ + DWORD dwStart = GetTickCount(); + DWORD dwElapsed; + while ((dwElapsed = GetTickCount() - dwStart) < dwTimeout) + { + DWORD dwStatus = MsgWaitForMultipleObjectsEx(0, NULL, dwTimeout - dwElapsed, QS_ALLINPUT, MWMO_WAITALL | MWMO_INPUTAVAILABLE); + if (dwStatus == WAIT_OBJECT_0) while (application->app_messageLoopStep()); + } + return TRUE; // timed out +} + +BOOL StartWinamp(BOOL bWaitShow, HWND *phwndWA, LPCSTR pszParam) +{ + HWND hwndWA; + DWORD pid; + wchar_t buf[MAX_PATH] = L"\""; + STARTUPINFOW si = {sizeof(si), }; + PROCESS_INFORMATION pi; + + if (phwndWA) *phwndWA = NULL; + + GetModuleFileNameW(NULL, buf + 1, sizeof(buf)/sizeof(wchar_t) - 1); + StringCchCatW(buf, MAX_PATH, L"\" /NEW "); + if (*pszParam && lstrlenA(pszParam)) + { + int count, len; + len = sizeof(buf)/sizeof(wchar_t) - lstrlenW(buf)- 1; + count = MultiByteToWideChar(CP_ACP, 0, pszParam, -1, NULL, 0); + if (count < len) MultiByteToWideChar(CP_ACP, 0, pszParam, -1, buf + lstrlenW(buf), len); + } + si.dwFlags = STARTF_FORCEONFEEDBACK | STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWNOACTIVATE; + if ( 0 ==CreateProcessW(NULL, buf, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + { + return FALSE; + } + + hwndWA = NULL; + if (bWaitShow) + { + for (int a = 0; a < 20; a++) + { + if (!hwndWA) + { + while (NULL != (hwndWA = FindWindowExW(NULL, hwndWA, szAppName, NULL))) + { + GetWindowThreadProcessId(hwndWA, &pid); + if (pid == pi.dwProcessId) break; + } + } + SleepMsg(250); + if (hwndWA && IsWindowVisible(hwndWA)) + break; + } + } + + if (phwndWA) *phwndWA = hwndWA; + return TRUE; +}
\ No newline at end of file |