PDA

Visualizza la versione completa : [DELPHI]: Gestire un determinato protocollo applicazione


VaLvOnAuTa
22-11-2005, 15:37
Mi spiego:
Tramite opportune modifiche al registro di sistema, è possibile assegnare un comando che permette di lanciare un'applicazione (o parte di essa). Esempio banale: se da "Start">"Esegui" digito mailto:indirizzo@mail.it
mi si apre la finestra per inviare una mail col mio client di posta elettronica predefinito.
Ora, sto sviluppando un'applicazioncina che permette di monitorare l'attività di un telefono ip ed eventualmente di fargli effettuare telefonate e quant'altro.
Ora mi interesserebbe sapere se, ad applicazione attiva, fosse possibile anzichè richiamare l'intero programma, richiamare solo una routine di questo.

P.S. So già come e dove impostare i valori del registro di sistema, volevo solo sapere se è possibile (ed eventualmente come) richiamare una routine del programma.

VaLvOnAuTa
22-11-2005, 15:51
Ok.. girovagando su internet credo di aver trovato la soluzione.

Basta mettere sul client un tcpserver in ascolto ed aggiungere alla stringa nel registro il comando da inviare al software.

Testo ed eventualmente posto.. si sa mai che questa soluzione possa servire a qualcun altro :D

VaLvOnAuTa
22-11-2005, 16:16
Ci sono quasi:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\voipcall]
@="URL:VoipCall Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\voipcall\shell]
@=""

[HKEY_CLASSES_ROOT\voipcall\shell\open]
@=""

[HKEY_CLASSES_ROOT\voipcall\shell\open\command]
@="C:\\PhoneMan\\PhoneMan.exe %1"

Con questo creo una chiave ne registro di sistema che mi permette di far avviare il programma tramite il comando "voipcall: numero" (in questo modo posso far effettuare la chiamata anche da web, semplicemente mettendo un link del genere tel (voipcall:numero))

Ora però il problema è che con quel sistema, il programma viene eseguito (anche se è già attivo). Io invece voglio che, essendo già attivo esegua il comando che gli ho imposto. Qualcuno sa dirmi come devo impostare la voce del registro?? :stordita:

VaLvOnAuTa
23-11-2005, 10:36
Mi sono arreso.. niente routine mi appoggio ad un eseguibile esterno.
In pratica mi serve che digitando il comando "voipcall:103" il telefono pilotato dal software faccia partire una chiamata verso il numero che segue i due punti.
Fatta salva la configurazione del registro che ho postato prima, ho messo nel programma un tcpserver che si attiva alla creazione del form e poi ho usato la seguente funzione:

procedure TForm1.TcpServerExecute(AThread: TIdPeerThread);
begin
Label2.Caption := AThread.Connection.ReadLn();
Linea.MakeCall(Label2.Caption);
Disconnect;
Close;
end;
Dove "Linea" è il nome del componente che mi permette di pilotare il telefono, mentre "MakeCall" (neanche a dirlo) è la routine che mi permette di effettuare la chiamata verso il numero passato come parametro.

Ora.. banalmente... perchè non funziona?
Non basta questo per prendere il parametro passato dal registro come %1? :fagiano:

VaLvOnAuTa
23-11-2005, 11:41
uppete :fagiano:

VaLvOnAuTa
23-11-2005, 12:30
Ok... avevo sbagliato l'impostazione. :stordita:

Il tcpserver che avevo trovato in un'altro software non serviva al mio scopo.

Bastava semplicemente fare

Label2.caption:=copy(ParamStr(1),10,length(ParamSt r(1))-9 );
Linea.MakeCall(Label2.Caption);


Me la son cantata e suonata da solo :fagiano:

alka
23-11-2005, 12:42
Originariamente inviato da VaLvOnAuTa
Me la son cantata e suonata da solo :fagiano:
Mi dispiace non avere avuto il tempo di "esaminare la tua pratica". :(

Tieni sempre a mente, però, che ciò che scrivi può sempre essere utile ad altri, quindi anche se ti autorispondi svolgi comunque un servizio utile che potrà essere apprezzato in futuro.

Ciao! :ciauz:

VaLvOnAuTa
23-11-2005, 13:03
Ma per carità alka... avendo svolto il compitino da solo ho avuto la possibilità di studiarmi bene il registry. :D

Comunque ho postato la soluzione proprio perchè potrebbe eventualmente dare uno spunto a qualcuno che in futuro avrà un problema simile al mio :zizi:

Loading