Newsgroup: it.comp.lang.delphi
Titolo: Intercettzione tasti

Ciao a tutti,
   ho un grosso problema che non credo sia facile risolvere.
 
Cerchero' di spiegarmi il meglio possibile.
 
Devo inserire delle promozioni con una certa validita' di tempo, per esempio 
30 giorni dal 01/02/2016, con sconto 10% riferiti ad alcuni prodotti che ho 
in una lista preparata precedentemente (Per questo non ho problemi).
Il programma gira in "modalita' icona" perche' non deve dar fastidio, al 
bisogno si tira su rendendolo visibile per eventuali aggiornamenti delle 
promozioni. (neanche questo crea problemi).
 
Ecco il problema (dato che il gestionale NON gestisce nessun tipo di 
promozioni) e sono lontani dalla realizzazione di questa procedura (che 
secondo me darebbe un valore aggiunto al gestionale)
Una volta letto il codice a barre (o digitato tramite tastiera alla 
pressione del tasto ENTER) e SOLO da una determinata schermata del 
gestionale (vendita) il programma che gira in modalita' "nascosta" dovrebbe 
intercettare codesto codice e se c'e' una promozione dare un avviso al 
terminale del tipo "PROMOZIONE IN CORSO PREZZO ATTUALE 15.50 FINO AL 
02/03/2016").
 
Per essere onesti non ho ancora cercato su google, ma prima di buttarmi su 
progetto impossibile (per  i miei limitatissimi mezzi) da realizzare chiedo 
se una realizzazione del genere e' possibile.
 
Grazie a tutti e scusate per l'argomento, comunque potrebbe interessare 
anche ad altri.
 
Ciao
 
Daniele
 
 
 

Ciao a tutti,
evito di auto quotarmi.
 
Problema risolto.
 
Se puo' interessare a qualcuno ecco com'e' stato risolto (dopo una giornata 
di sbattimento).
 
Per intercettare un tasto da qualsiasi applicazione aperta sul desktop si 
deve installare un hook (gancio) che permetta di intercettare la pressione 
di qualsiasi tasto, quindi un keyboard hook.
L'hook puo' essere locale o globale, in questo caso (perche' riguarda tutto 
il sistema e non solo l'applicazione) deve essere globale.
L'unica via per installare un hook globale e' tramite le DLL, quindi il 
programma "supervisore" si dovra' preoccupare di (dopo tutti i controlli del 
caso) installare (alla partenza) e disinstallare (al termine) questo hook.
Ovviamente la dll va creata secondo le proprie esigenze.
Il programma che si sta sviluppando, dovra' poi gestire le informazioni che 
verranno passate, per esempio alla pressione di enter visualizzare un 
messaggio.
Una volta lanciato questo programma, in qualsiasi applicazione ci sitrovi, 
alla pressione di enter appare il precedente messaggio.
 
Considerato che a me serve solo visualizzare il messaggio se enter e' 
premuto in un dato programma e in una data procedura che apre una 
particolare finestra con un'intestazione personalizzata (nel senso che 
quella stringa si trova solo in quella particolare procedura / situazione), 
tramite la funzione seguente
 
function ActiveCaption: string;
var
   Handle: THandle;
   Len: LongInt;
   Title: string;
begin
   Result := '';
   Handle := GetForegroundWindow;
   if Handle <> 0 then
   begin
     Len := GetWindowTextLength(Handle) + 1;
     SetLength(Title, Len);
     GetWindowText(Handle, PChar(Title), Len);
     ActiveCaption := TrimRight(Title);
   end;
end;
 
controllo la prima parola della titolo della form che ha lanciato la 
pressione dell' enter.
 
Se il controllo e' positivo si apre la procedura del mio programma, 
all'uscita della procedura il controllo ritorna nella finestra in cui ero 
precedentemente prima della pressione dell'enter.
 
Probabilmente non servira' a nessuno, comunque e' una soluzione "sporca" per 
mettere delle pezze a programmi commerciali (come nel mio caso) a cui 
mancano delle procedure ben lontane dall'essere implementate (nel mio caso 
MAI).
 
Istruttivo perche' ho anche imparato ad installare gli hotkey globali.
 
Alla prossima
 
Ciao
 
Daniele
 
 
 

 deve installare un hook (gancio) che permetta di intercettare la pressione 
 
Occhio che gli hook, specie se system-wide, a volte fanno incazzare gli antivirus.
 
 

 antivirus.
 
Non ho altra scelta che questa, ho anche chiesto agli sviluppatori del 
software se, in quella data form, in quel componente mettevano a 
disposizione dell'utente l'avvio di una certa procedura.
 
Lascio a te indovinare il tipo di risposta ricevuto .........
 
Ciao
 
Daniele 
 

 disposizione dell'utente l'avvio di una certa procedura.
 
Che succede se un utente copia e incolla un testo col mouse?
 
-- 
4ndre4
"The use of COBOL cripples the mind; its teaching should, therefore, be 
regarded as a criminal offense." (E. Dijkstra)
"Ora, questo "Delta11" non è nulla di più di uno scemo del villaggio" - 
http://goo.gl/1nrkkX
 

 Che succede se un utente copia e incolla un testo col mouse?
Assolutamente niente !
Purtroppo non e' una strada percorribile perche' il controllo delle 
eventuali scontistiche dev'essere fatto al "volo".
Ovvero, passo il codice a barre, il gestionale identifica il prodotto e, 
prima di proporre la vendita dovrebbe cercare eventuali offerte, poi propone 
la vendita.
Cosa che non fa, c'e' la possibilita' di introdurre un prezzo alternativo 
...... ma non ha la gestione temporale, quindi se l'offerta e' valida per 45 
giorni il gestionale (oggi) continua a proporre il prezzo alternativo anche 
dopo il limite temporale perche' e' l'operatore che si deve ricordare di 
cambiare il prezzo.
Se e' un articolo potrebbe essere accettabile .... ma con  migliaia di 
articoli non e' possibile.
Gli sviluppatori hanno detto che sara' presa in considerazione una modifica 
del genere in un futuro !!!!
 
Ciao
 
Daniele