saludos!!
me parece que no te funciona porque ese código que ejecutas no se encuentra dentro de la dirección de memoria del programa "Instalador" o de otro cualquiera al que intentas clickearle el button,
para lograr esto de esa *forma que intentas*, creo que debes inyectarte dentro de ese otro programa, eso de inyecciones es un poco graaaande y trabajoso, te presento una forma mas cómoda y sin complicarnos con direcciones de memorias u otra cosa:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
hWnd, hBtn: Cardinal;
btnPos: TWindowInfo;
vCPosBefore: TPoint;
X, Y: Integer;
begin
hWnd := FindWindow(nil, 'Ejecutar');
hBtn := FindWindowEx(hWnd, 0, 'Button', '&Examinar...');
GetCursorPos(vCPosBefore);
SetForegroundWindow(hWnd);
if GetWindowInfo(hBtn, btnPos) = true then
begin
X := btnPos.rcClient.Left + ((btnPos.rcClient.Right - btnPos.rcClient.Left) div 2);
Y := btnPos.rcClient.Top + ((btnPos.rcClient.Bottom - btnPos.rcClient.Top) div 2) ;
SetCursorPos(X, Y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
SetCursorPos(vCPosBefore.x, vCPosBefore.y);
SetForegroundWindow(Handle);
end;
que crees? abre la ventanita "Ejecutar" de Windows y pruébalo!!!
de todas formas, lo que intentabas hacer presionando espacio en el button, creo que antes debes pasarle el foco, y aún así, yo no lo haría de esa forma, por ejemplo, te muestro como lo haría si quisiera mandar a clickear un button de mi formulario:
Código Delphi
[-]
SendMessage(Form1.Handle, WM_COMMAND, 0, Button1. Handle);
** claro, que este código se ejecuta dentro de la misma dirección de memoria de mi programa... por eso me funciona ok!**
espero que te funcione!!!
saludos,