1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #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;
- }
|