Newsgroup: it.comp.lang.delphi
Titolo: Automatizzare pressione tasto ok

Ciao a tutti,
programmo da diversi anni con delphi a livello hobbistico,
avrei la necessit� di automatizzare l'avvio di un applicazione sviluppata da 
terzi e che gira su windows XP.
Succede questo: il programma si avvia ed appare una finestra di login per 
accedere, il nome utente e la password rimangono memorizzati ma per accedere 
bisogna premere invio o fare un click sul pulsante ok.
Sapete dirmi a grandi lineee prima di tutto se � possibile creare un piccolo 
programmino che interagisca con la finestra del login di una terza 
applicazione e quale potrebbe essere la tecnica?
Vi ringrazio
Ciao. 

 applicazione e quale potrebbe essere la tecnica?
si. si parte da FindWindow o  FindWindowEx .
A.

 si. si parte da FindWindow o  FindWindowEx .
Trovi la finestra con le due funzioni dette da Alberto,
poi invii a queste finestre msg. windows WM_xyz corrispondenti ai msg.
generati da un normale utente che inserisce user, pwd e poi preme OK.
ciao,
gp

generati da un normale utente che inserisce user, pwd e poi preme OK.
Mi sono documentato ed ho creato questa soluzione che funziona:
begin
  nome:='TLoginForm';
  hFinestra := FindWindow(PAnsiChar(nome), nil);
  if hFinestra <> 0 then
  begin
    focusedThreadID := GetWindowThreadProcessID(Hfinestra, @aDwordvar) ;
    if AttachThreadInput(GetCurrentThreadID, focusedThreadID, true) then
  try
    Windows.setFocus(HFinestra);
SendMessage(FindWindowEx(HFinestra, 0, 'TButton', 
'Connetti'),WM_LBUTTONDOWN,0,0);
SendMessage(FindWindowEx(HFinestra, 0, 'TButton', 
'Connetti'),WM_LBUTTONUP,0,0);
  finally
   AttachThreadInput(GetCurrentThreadID, focusedThreadID, false) ;
  end;
end;
Si potrebbe fare di meglio?

 Si potrebbe fare di meglio?
Giï¿œ il fatto che funziona basterebbe :-)
Per curiositï¿œ ho googlato 30 secondi e ho visto che qualcosa si trova 
per "delphi hooking processes".
Il mio consiglio ï¿œ che se la cosa che hai fatto funziona, usa quella, 
poi eventualmente la migliorerai col tempo.
Ciao
-- 
Morde

 Mi sono documentato ed ho creato questa soluzione che funziona:
E' esattamente quello che intendevo.
L'avevo fatto una volta direttamente in C standard (per windows) e
funzionava più o meno allo stesso modo.
Mi manca solo un pezzo: dove gli inserisci la user e la pwd prima di
premere il tasto 'Connetti'?
Gp

premere il tasto 'Connetti'?
Il nome utente e la password sono memorizzati e sono gi� presenti al momento 
in cui la finestra di login viene visualizzata.
Comunque penso che si pu� risolvere inviando una lunga serie di messaggi del 
tipo WM_KEYDOWN - WM_KEYUP con parametro il codice del tasto
alla casella di testo recuperandone il nome con utility tipo Winspector SPy

 alla casella di testo recuperandone il nome con utility tipo Winspector SPy
O direttamente dei WM_CHAR, se ricordo bene il lavoro fatto 6-7 anni
fa.
Grazie!
Gp

Ciao Beppe,
ho visto che hai risolto.
quello che ti volevo chiederti � questo:
io ho pi� o moeno lo stesso tipo di problema.
praticamente ho in esecuzione automatica un applicavoi che parte
ma ha bisogno di una pressione del tasto "invio" della tastiera per partire
definitivamente. siccome lo utilizzo quando sono in assistenza remoto volevo
chiederti una cosa: esiste un eseguibile che messo sempre in esecuzione
automatica  o in un file *.bat dopo il mio programma lanci la pressione del
tasto "invio" facendo partire il mio programma??
per delphi avrei trovato questo:
var
hIExplorer: HWND;
begin
hIExplorer := FindWindow('TLoginForm', 'Login');
if hIExplorer <> 0 then
begin
postmessage(hIExplorer, WM_KEYDOWN, VK_RETURN, 0);
postmessage(hIExplorer, WM_KEYUP, VK_RETURN, 0);
end;
ma non so come renderlo eseguibile (*.exe).
come posso fare?? 
hai per caso qualcosa di simile gi� in formato *.exe??
spero tu mi possa aiutare, perch� non sono esperto in delphi.
grazie mille.
web...@gmail.com
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it