Newsgroup: it.comp.lang.delphi
Titolo: Scrivere in un'altra applicazione

Mi sembra che l'argomento sia stato trattato, ma purtroppo, nei vecchi post,
non ho trovato nulla al riguardo (ho cercato anche con google ma niente).
Ecco il mio problema:
Ho un'applicazione (una sola finestra) di cui non conosco nulla. Presenti
nella finestra sono presenti due campi edit.
In un'applicazione fatta da me, dovrei scrivere del testo dentro queste
edit, come posso fare?
Sono riuscito a recuperare l'handle della prima applicazione e ho provato ad
usare PostMessage, poi ho provato anche con SendInput, ma niente.
Qualcuno potrebbe indirizzarmi verso la strada giusta?
Grazie e ciao

Prova a cercare su Torry come Interprocess (oppure come IPC Server e Client)
Ciao,
  Fabio

 Qualcuno potrebbe indirizzarmi verso la strada giusta?
l'ho fatto numerose volte anch'io. O usi send/post/Message oppure usi:
SetForegroundWindow(hWnd);
keybd_event(VK_codice, 0, 0, 0);
Saluti.

 edit, come posso fare?
Che codice hai usato con PostMessage ? normalmente funziona.
--------------------------------
Inviato via 
http://usenet.libero.it


Ho trovato quello che mi hai suggerito, ma , se non ho capito male,  bisogna
poter aver la possibiltà di agire sul sorgente di entrambe le applicazioni
(server e client) installando i componenti IPCClient e IPCServer. Nel mio
caso, invece, non ho nessun controllo sul codice dell'applicazione che devo
comandare.
Comunque ti ringrazio per l'interessamento e per il suggerimento.
Ciao,
    bub


Grazie, sei stato gentilissimo. Solo che adesso ho due problemini:
1. SetforegroundWindow non rende attiva la finestra che m'interessa (non
credo di passargli un Handle sbagliato - la procedura per recuperarlo l'ho
trovata sempre sul newsgroup)
2. Non riesco a dare il focus alle caselle di testo.
Grazie ancora, ciao
     bub

 2. Non riesco a dare il focus alle caselle di testo.
fai cosě:
- ti fai dare l'handle dell'applicazione.
- con enumwindow e enumchildwindow ti fai dare tutti gli oggetti 
presenti nell'applicazione, cercando la classe del campo di edit. Non so 
come č stato scritto il programma. Probabilmente se č un'applicazione 
delphi tali api restituiranno TEdit.
- utilizzi sendmessage sull'handle del TEdit, cosě risolvi il problema 
del focus.
Tieni presente che sto andando molto a memoria, essendo che l'ho fatto 
3-4 anni fa, ma una cosa identica alla tua io l'ho risolta proprio in 
questo modo.
Saluti.


Forse mi sono spiegato male:
Definire codice quello che ho scritto mi sembra eccessivo :) .
Ho fatto delle prove, prima passando come handle quello dell'applicazione,
poi ho usato il messaggio HWND_BROADCAST ma ho letto che si dovrebbe usare
anche RegisterWindowMessage e qui le cose si sono complicate notevolmente.
Poi non sapevo che messaggio passargli come parametro, quindi ho provato a
cercare una lista di quelli possibili nell'help, ma non sono riuscito a
trovare nulla; non mi deridere, ma disperato, ho passato come parametro il
codice ascii del carattere che volevo scrivere (che vergogna!).
Infine mi sono messo a piangere :( :( :(
Ciao e grazie per l'interessamento.
  bub

 del focus.
Ok, adesso ci prova.
Ciao e grazie

 anche RegisterWindowMessage e qui le cose si sono complicate notevolmente.
Non serve. RegisterWindowMessage si usa quando si vogliono far comunicare
due applicazioni, ma *entrambe* devono usare la registrazione dello *stesso*
messaggio.


 finestra.
Ok, l'handle della finestra riesco ad ottenerlo. Adesso devo riuscire a
trovare l'handle del controllo.
Adesso ci provo
Ciao e grazie

Finalmente ci sono riuscito!
Ringrazio tutti per i consigli che mi avete dato e vorrei chiedervi solo
un'ultima cosa:
dopo aver ottenuto l'handle dei campi dell'applicazione esterna alla mia,
scrivo, come Tobia mi aveva consigliato,
    keybd_event(ord ('a'), 0, 0, 0);
L'unico problema è che non riesco a scrivere nulla che non sia un numero.
L'ultimo aiuto, vi prego.
Ciao e grazie comunque

 trovare l'handle del controllo.
EnumChildWindows


Ho risolto tutti i problemi, che goduria.
Grazie di nuovo a tutti.
Ciao,
  bub