From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Winamp/setup/postsetup.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Src/Winamp/setup/postsetup.cpp (limited to 'Src/Winamp/setup/postsetup.cpp') 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 -- cgit