Newsgroup: it.comp.lang.delphi
Titolo: Disperazione: componente per hook

Ho cercato come un pazzo su internet e su questo NG ma non sono riuscito
ancora a trovare un componente DECENTE che gestisca gli eventi di tastiera e
mouse.
Devo realizzare un'applicazione residente nella tray che si "sveglia" solo
quando l'utente clicca un determinato tasto o una combinazione (esempio: F8,
CTRL + T etc etc) o quando clicca con il mouse e preme un tasto funzione
(esempio: CTRL + tasto sinistro).
Ho cercato anche su torry, su VCLComponent ed altri ma sono riuscito a
trovare solo componenti che per un motivo o per un altro creano problemi. Il
più comune è che dopo qualche minuto di utilizzo si blocca la tastiera su
alcune applicazioni (come su NotePad) e l'unico modo di risolvere è
riavviare le applicazioni coinvolte...
Qualche idea?
Max

Ciao Max

Hai provato ad usare RegisterHotKey() per associare un'applicazione alla
pressione di una data combinazione di tasti ?

 pressione di una data combinazione di tasti ?
Sinceramente no, adesso mi documento.
Grazie per il consiglio
--
Max

Ho fatto delle prove e funziona bene ma succede qualcosa all'editor di
Delphi:
la tastiera non funziona più e sono costretto a ravviare il progetto
Max

i componenti che gestiscono gli hook altro non so che wrappers per poche 
funzioni di windows.
Non è poi così difficile sriverne uno.
Imho, visto che quel che devi realizzare non è molto complesso, + che 
cercare un vcl che lo faccia, perderesti meno tempo a cercare links che 
spigano come scrivere un hook di tastiera.
Credo che sui soliti siti qualche dritta la trovi.
A

Hai ragione ma, purtroppo, il tempo è tiranno e sto lavorando a tempo perso;
è un'utility che userei per diletto e posso assicurarti che già adesso è
diventata abbastanza complessa da far venire il mal di testa a tutto il
NG!!! :o))))
grazie per i consigli!
--
Max Etere
meNOSPA...@maxetere.it
http://www.maxetere.it
FoFi Techno 1.2 16V MY96, 3 porte, Jewel Green
FoFo Ambiente 1.8 TDCi 100 CV, 3 porte, Blu Executive, cerchi da 16"

 grazie per i consigli!
Se ci tieni ad usare un Hook Globale, cosa non facile da costruirsi a
differenza del Locale, ti consiglio "Hooks mede easy", un componente share
col sorgente da circa 20$. Usandolo da anni ti assicuro che va' benissimo.
Ciao Giorgio Padoan

 differenza del Locale,
Oddio. La difficoltà sta nel decentrare due funzioni in una dll e fare delle
export?
--
- Carlo -

"Carlo Bertuccini" <cber...@DOHlibero.it> ha scritto nel messaggio
news:bhkHc.74408$G%.26695@tornado.fastwebnet.it...

.. fosse cosi' il problema non esisterebbe, l'hook globale in Delphi lo puoi
fare o inviando il Msg in Broadcast, il che puo' andare benissimo se ad
esempio monitorizzi qualche tasto, se invece monitorizzi il mouse o altri
messaggi che arrivano con una certa frequenza la dll deve inviare l' Msg
solo alla tua applicazione, il che significa fornire il suo handle.
Qui nasce il problema: non puoi memorizzare l'handle fornito
dall'applicazione in una variabile della dll, in quanto cosi' facendo la dll
diverrebbe "parte" del tuo processo (lo spazio delle variabili sarebbe
"locale" all'applicazione) e non sarebbe piu' "globale" con la conseguenza
che catturerebbe solo gli Msg inviati alla tua applicazione.
In C esistono dei segmenti di memoria per definire delle variabili "globali"
ed il problema diventa banale. In Delphi si usa un'altra modo un po' meno
semplice.
Ciao Giorgio Padoan

 che catturerebbe solo gli Msg inviati alla tua applicazione.
Uno dei modi per condividere informazioni in questo genere di 
situazioni sono i Memory Mapped Files (che sono messi a disposizione 
dall'API di Windows).
Ciao :-)
-- 
Andrea Magni

 solo alla tua applicazione, il che significa fornire il suo handle.
Basta che una delle funzioni export della dll prenda come parametro l'handle
del modulo eseguibile.
Ad ogni modo esistono molte tecniche ipc che vanno aldilà del sistema di
messaggistica di Windows.
Memory Mapped Files, SetProp()/GetProp() [sul desktop, ad esempio], mmf etc.
--
- Carlo -

 ha scritto nel messaggio
news:FFtHc.17622$tP4.7...@news4.tin.it...

In effetti, in Delphi, l'handle dell'applicazione la si dovra' memorizzare
in una variabile mappata in memoria all'interno della dll.
... come dicevo esiste un componente bello e pronto da 20$: "Hooks made
easy" che trovate in Google.. e, permettetemi, direi che non sono spesi
affatto male :-)
Ciao Giorgio

 affatto male :-)
Non conosco il componente in sè, se ti semplifica tutto ben venga.
Cmq credo che se arrivi ad avere bisogno di uno hook [non è 
esattamente che serva tutti i giorni, in molti casi ci sono 
alternative più semplici] devi, prima o poi, sporcarti le mani con le API.
Se fossi l'OP mi domanderei 2 volte se mi serve davvero uno hook o se 
mi basta uno hotkey (se non deve intercettare anche gli eventi del 
mouse, non ho capito dal messaggio iniziale se gli interessa "o la 
tastiera o il mouse" o "entrambi").
Per quanto riguarda esempi di codice sugli hooks ricordo ancora quello 
postato da Cosimo Laddomada [credo nel 1997 o nel 1998] sul repository 
dei gruppi di 
news.marcocantu.it
 che forse usava proprio la tecnica 
dei MMF per condividere dei dati.
A parte che di esempi se ne trovano abbastanza agevolmente (magari non 
in Delphi ma basta riadattarli un po'), spesso gli hooks di sistema 
vengono descritti come se fossero chissà che, in realtà non sono altro 
che funzioni di callback.
Ciao
-- 
Andrea Magni