123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include ".\crashdlg.h"
- #include ".\configdlg.h"
- #include ".\resource.h"
- #include ".\settings.h"
- #include "exceptionhandler.h"
- #include <strsafe.h>
- extern Settings settings;
- extern PEXCEPTION_POINTERS gExceptionInfo;
- BOOL CALLBACK CrashDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- UNREFERENCED_PARAMETER(lParam);
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- // as we're loading things, make sure we've got a decent icon size to use in the second usage
- HICON hIcon = (HICON)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(102),IMAGE_ICON,48,48,LR_SHARED);
- SetClassLongPtr(hwndDlg, GCLP_HICON, (LONG_PTR)hIcon);
- HWND hwndPrg = GetDlgItem(hwndDlg, IDC_PRG_COLLECT);
- SendMessage(hwndPrg, PBM_SETRANGE, 0, MAKELPARAM(0,100));
- SendMessage(hwndPrg, PBM_SETPOS, 0, 0);
- // this will make sure that we've got the logo shown even when using a localised version
- SendDlgItemMessage(hwndDlg,IDC_BMP_LOGO,STM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcon);
- SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Analyzing settings...");
- settings.ClearTempData();
- wchar_t waPath[2*_MAX_PATH] = {0};
- if (GetModuleFileName( NULL, waPath, 2*_MAX_PATH ))
- {
- settings.WriteWinamp(waPath);
- }
- SetTimer(hwndDlg, 123, 1000, NULL);
- break;
- }
- case WM_TIMER:
- if (wParam == 123)
- {
- KillTimer(hwndDlg,wParam);
- HWND hwndPrg = GetDlgItem(hwndDlg, IDC_PRG_COLLECT);
- SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Generating log file...");
- SendMessage(hwndPrg, PBM_SETPOS, 30, 0);
- UpdateWindow(hwndDlg);
- if (settings.createLOG) settings.WriteLogCollectResult(CreateLog(gExceptionInfo, L"Winamp"));
- SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Generating dump file...");
- SendMessage(hwndPrg, PBM_SETPOS, 50, 0);
- UpdateWindow(hwndDlg);
- if (settings.createDMP) settings.WriteDmpCollectResult(CreateDump(gExceptionInfo));
- SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Starting error reporter...");
- SendMessage(hwndPrg, PBM_SETPOS, 90, 0);
- UpdateWindow(hwndDlg);
- STARTUPINFO si = {0};
- si.cb = sizeof(si);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_SHOW;
- PROCESS_INFORMATION pi = {0};
- wchar_t reporter[512] = {0}, waPlugPath[MAX_PATH] = {0}, cmd[512] = {0}, *waPath = 0;
- GetModuleFileName( NULL, waPlugPath, MAX_PATH);
- CreatePathFromFullName(&waPath, waPlugPath);
- StringCchPrintf(reporter, 512, L"%s\\reporter.exe", waPath);
- StringCchPrintf(cmd, 512, L" \"%s\"", settings.GetPath());
- if (CreateProcess(
- reporter, // name of executable module
- cmd, // command line string
- NULL, // process attributes
- NULL, // thread attributes
- FALSE, // handle inheritance option
- 0, // creation flags
- NULL, // new environment block
- NULL, // current directory name
- &si, // startup information
- &pi)) // process information
- {
- SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Done.");
- SetTimer(hwndDlg, 126, 200, NULL);
- }
- else
- {
- SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Error. Unable to run reporter.");
- SetTimer(hwndDlg, 126, 3000, NULL);
- }
- SendMessage(hwndPrg, PBM_SETPOS, 100, 0);
- UpdateWindow(hwndDlg);
- }
- else if (wParam == 126)
- {
- KillTimer(hwndDlg,wParam);
- DestroyWindow(hwndDlg);
- }
- break;
- }
- return FALSE;
- }
|