Alexandr_57
Новичок
Собственно вопрос. Есть ли в c# возможность отловить прогресс установки?
Если да то может мне ктонить выслать код или пример как это сделать?
Если да то может мне ктонить выслать код или пример как это сделать?
Значения progressbaraА немного поподробнее. Весь процесс, начиная с приветствия и кончая финишной страницы, или же только значение прогрессбара?
int main( void )
{
// Ищем наш инсталл
HWND mWnd = FindWindow( L"TWizardForm", L"Установка — Inno Setup Ultra" );
if( !mWnd )
return 0;
// Ищем кнопку
HWND Button = FindWindowEx( mWnd, 0, L"TNewButton", L"&Далее >" );
if( !Button )
return 0;
// Нажимаем
SendMessage( Button, WM_LBUTTONDOWN, 0, 0 );
SendMessage( Button, WM_LBUTTONUP, 0, 0 );
return 0;
}
Ну, ищи инсталл другим способом, все в твоих рукахЯ чет не понял. А нужно ли указывать имя процесса инсталятора?
Тут же все написано, SendMesage вернет текущую позицию прогрессбараИли получается сам SendMesage вернет позицию
А почему нет?В таймере.
Раз я не могу создать красивый стиль для инсталятора как это сделал для лунчера то собираюсь сделать отлов распаковки файлов и прикрутить к лунчеру c#Если ты хочешь написать оболочку с помощью Visual Studio, а прикрутить распаковку(я как понял ISDone), скинь потом исходники проекта. Пожалуйста.
public static class WinAPI
{
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}
IntPtr mWnd = WinAPI.FindWindow("TWizardForm", "Установка — Inno Setup Ultra");
Я понял. Какой код у PBM_GETPOS так как в c# его тоже нет. Да и мне чет подсказывает что вылезет куча ошибокЭто название инсталла
public static class WinAPI
{
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
}
Какой код у PBM_GETPOS
#define WM_USER 0x0400
#define PBM_GETPOS WM_USER+8
public static class WinAPI
{
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
}
private void tmr2_Tick(object sender, EventArgs e)
{
int v1 = 0x0400;
int v2 = v1 + 8;
IntPtr mWnd = WinAPI.FindWindow("TWizardForm", "Установка — " + SNameMakers[indexSelMaker]);
IntPtr PrgBar = WinAPI.FindWindowEx(mWnd, (IntPtr)0, "TNewProgressBar", "");
metroProgressBar1.Value = WinAPI.SendMessage(PrgBar, v2, (IntPtr)0, (IntPtr)0);
}
А ты сделай проверку, вдруг он его не находитIntPtr PrgBar = WinAPI.FindWindowEx(mWnd, (IntPtr)0, "TNewProgressBar", "");
HWND Notebook = FindWindowEx( mWnd, 0, L"TNewNotebook", L"" );
if( !Notebook )
return 0;
HWND PB = FindWindowEx( Notebook, 0, L"TNewProgressBar", L"" );
if( !PB )
return 0;