mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-18 18:46:22 +01:00
68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
|
#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;
|
||
|
}
|