tutorial studio setup script inno descargar automation inno-setup autohotkey nsis

automation - studio - ¿Puede Inno Setup enviar pulsaciones de teclas y mouse, si no es así, cómo se puede hacer con un instalador?



inno setup descargar (2)

La mejor apuesta para esto es usar la API SendInput() desde una DLL que luego llama desde Inno Setup. Esto permitirá el control total de todo lo que puede hacer manualmente en esa aplicación.

Soy novato de los instaladores de [Microsoft Windows] y de Inno Setup, pero necesito saber si se puede usar Inno Setup (o un equivalente) para automatizar la entrada a un programa de Windows basado en GUI, durante la instalación, por ejemplo, haciendo clic en un menú y seleccionando un subtema, por ejemplo?

Soy consciente de AutoIt y AutoHotkey , así como de NSIS , sin embargo, Inno Setup es altamente recomendado como instalador / creador de software, y también me gusta la idea de aprender un poco de programación de Pascal;)

Cualquier idea o pensamiento es bienvenido :-)


Estoy de acuerdo con @Deanna, la función SendInput es la mejor para simular la entrada del usuario que puede obtener. En el siguiente script, he mostrado cómo simular clics del mouse en la posición absoluta de la pantalla (en píxeles). Como ejemplo, estoy tratando de mostrar el cuadro de Inno Setup a través del elemento de menú Help / About Inno Setup (si tiene la misma configuración de pantalla que yo y maximiza el Inno Setup IDE, incluso puede llegar a ese elemento del menú. aquí solo está la parte del mouse (y solo se puede obtener una funcionalidad limitada). Tómelo como una prueba, que es posible simular la entrada del usuario desde Inno Setup:

[Setup] AppName=My Program AppVersion=1.5 DefaultDirName={pf}/My Program OutputDir=userdocs:Inno Setup Examples Output [code] const SM_CXSCREEN = 0; SM_CYSCREEN = 1; INPUT_MOUSE = 0; MOUSEEVENTF_MOVE = $0001; MOUSEEVENTF_LEFTDOWN = $0002; MOUSEEVENTF_LEFTUP = $0004; MOUSEEVENTF_RIGHTDOWN = $0008; MOUSEEVENTF_RIGHTUP = $0010; MOUSEEVENTF_MIDDLEDOWN = $0020; MOUSEEVENTF_MIDDLEUP = $0040; MOUSEEVENTF_VIRTUALDESK = $4000; MOUSEEVENTF_ABSOLUTE = $8000; type TMouseInput = record Itype: DWORD; dx: Longint; dy: Longint; mouseData: DWORD; dwFlags: DWORD; time: DWORD; dwExtraInfo: DWORD; end; function GetSystemMetrics(nIndex: Integer): Integer; external ''[email protected] stdcall''; function SendMouseInput(nInputs: UINT; pInputs: TMouseInput; cbSize: Integer): UINT; external ''[email protected] stdcall''; function SendMouseClick(Button: TMouseButton; X, Y: Integer): Boolean; var Flags: DWORD; Input: TMouseInput; ScreenWidth: Integer; ScreenHeight: Integer; begin Result := False; Flags := MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_VIRTUALDESK or MOUSEEVENTF_MOVE; ScreenWidth := GetSystemMetrics(SM_CXSCREEN); ScreenHeight := GetSystemMetrics(SM_CYSCREEN); Input.Itype := INPUT_MOUSE; Input.dx := Round((X * 65536) / ScreenWidth); Input.dy := Round((Y * 65536) / ScreenHeight); case Button of mbLeft: Input.dwFlags := Flags or MOUSEEVENTF_LEFTDOWN; mbRight: Input.dwFlags := Flags or MOUSEEVENTF_RIGHTDOWN; mbMiddle: Input.dwFlags := Flags or MOUSEEVENTF_MIDDLEDOWN; end; Result := SendMouseInput(1, Input, SizeOf(Input)) = 1; if Result then begin Input.Itype := INPUT_MOUSE; Input.dx := Round((X * 65536) / ScreenWidth); Input.dy := Round((Y * 65536) / ScreenHeight); case Button of mbLeft: Input.dwFlags := Flags or MOUSEEVENTF_LEFTUP; mbRight: Input.dwFlags := Flags or MOUSEEVENTF_RIGHTUP; mbMiddle: Input.dwFlags := Flags or MOUSEEVENTF_MIDDLEUP; end; Result := SendMouseInput(1, Input, SizeOf(Input)) = 1; end; end; procedure InitializeWizard; begin if MsgBox(''Are you sure you want to let the installer click '' + ''somewhere on your screen ? TLama warned you :-)'', mbConfirmation, MB_YESNO) = IDYES then begin if not SendMouseClick(mbLeft, 242, 31) then MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok); if not SendMouseClick(mbLeft, 382, 263) then MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok); end; end;