Newsgroup: it.comp.lang.c++
Titolo: Riconoscere ALT+TAB

Sapete dirmi se c'č qualche API o un modo per  riconoscere la pressione dei
tasti ALT+TAB?
Grazie
Lorenzo

Ti Interessa intercettarli a livello della tua applicazione o a livello
globale?
Fammi sapere

tasti ALT+TAB?
oggi ho fatto una piccola prova per questa combinazione.
Ti posto le due righe di codice che ho usato:
var A:Boolean;
begin
  A:=False;
  repeat
    if GetTopWindow($80) = $84 then
     ShowWindow($84,SW_HIDE);
    Application.ProcessMessages;
  until A = True;
in pratica meglio togliere quel repeat - until, io l' ho fatto giusto per
provare.
Ho notato che anche la finestrella di ALT + TAB conserva lo stesso handle,
cioè il sistema operativo gli assegna l' handle pari a $84 o 132 decimale.
Questa cosa vale anche per il desktop, che ha handle $80 o 128 decimale.
Ho pensato che ALT + TAB attiva una finestrella proprietaria del desktop.
Quindi ho utilizzato GetTopWindow che dovrebbe restituire la finestra che si
trova più in alto con la scala delle discendenze.
In questo modo se l' handle trovato da GetTopWindow riferito al desktop di
windows è uguale all' handle (supposto sempre fisso) della finestrella,
allora la nasconde con ShowWindow spedendogli una specie di messaggio
(SW_HIDE).
Non utilizzare il messaggio WM_CLOSE che chiude la finestrella e la prossima
volta che la richiami, ti va in palla windows !!
Così funziona, diciamo che noti una specie di lampeggio perchè per un
istante viene visualizzata, ma il repeat until è sufficientemente veloce
(tenendo purtroppo il processore molto ma molto occupato) da richiuderla al
volo !! eh eh
Se tu vuoi conoscere solamente quando la finestra viene richiamata e quindi
non la vuoi nascondere, basta sostituire la ShowWindow con un bel
ShowMessage scrivendo ad esempio:
ShowMessage('ALT + TAB attiva !! ');
Senza utilzzare GetTopWindow, potresti scrivere direttamente:
ShowWindow($84,SW_HIDE);
con questi esempi voglio dirti che è possibile intercettare la finestrella
tramite il suo handle.
Se vuoi lavorare con qualcosa di diverso, puoi controllare anche lo stato
dei tasti con GetAsyncKeyState ..... insomma puoi muoverti come vuoi nell'
intercettare  questa combinazione.
Già che siamo in argomento....qualcuno ha idea di come si blocca CTRL + ALT
+ CANC ?
Voglio evitare di far comparire la maledetta finestra dei processi attivi
richiamabile con tale combinazione.
Ho provato con un hook globale ma niente fa fare......ho paura che c' è
qualcosa che riguarda la priorità dei processi, cioè il mio processo
riferito al sistema operativo o Kernel !!
Vi saluto.....se avete una soluzione battete un colpo !!
Antonio Tarolla
BSSoftware Tips Mailing-List Support

 Vi saluto.....se avete una soluzione battete un colpo !!
Per Win9X c'è la
SystemParametersInfo(Spi_ScreenSaverRunning,1,@vecchio,0); // blocca tasti
di sistema
dove vecchio è una variabile intera dove riceverai il vecchio valore (0 se i
tasti erano attivi, 1 se erano bloccati)
questa blocca:
- ALT+CTRL+CANC
- Tasto col logo di Win ( e pure il CTRL+ESC)
- ALT+TAB
- e ce n'era ancora una ma non me la ricordo.. :-(
Sotto NT non c'è speranza... (o almeno, si riesce a fare qualcosa del genere
ma le tecniche sono un po + complesse)...
Ciao a tutti :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

Mah se ti interessa ho fatto un componentino per bloccare tutte le
combinazioni di tasti ..
Per bloccare solo il CTRL-ALT-CANC non so ..
Nello stesso componente puoi nascondere la tua app dal CTRL ALT CANC ..
poi non so ..
CIao Ciao

ma le tecniche sono un po + complesse)...
infatti con un amico ne avevo parlato visto che lui ha NT ma mi aveva detto
che per queste cose NT era abbastanza protetto, tra l' altro il CTRL + ALT +
CANC è base visto (se ben ricordo) che appena avvii windows ti compare
quella manina che ti invita a pigiare tale combinazione.
l' altra combinazione che non ricordi te la farò sapere !!
Per ora ti saluto....grazie per la soluzione delle combinazioni.....a presto


   until A = True;
Non sapevo che l'ISO avesse reso il C++ cosě simile al pascal :-)
Comunque visto che la domanda era OT, trattandosi di API, una risposta con
un linguaggio OT pare adeguata.
Solo che non mi sembra proprio la soluzione migliore, non sono esperto di
API e messaggi di Windows, ma credo ci sia qualcosa da intercettare...
--
Alessandro Monti

API e messaggi di Windows, ma credo ci sia qualcosa da intercettare...
non so se sia OT o meno, comunque le API sono state una soluzione al
problema, ma bene o male le API si utilizzano spesso quindi restringere il
newsgroup a tutti gli argomenti che non riguardano nemmeno una chiamata ad
un API mi sembra un po' troppo.
Devo essere sincero.....molte volte le API che conosco a memoria le uso
molto ma molto volentieri !!
In effetti c' č un' altra soluzione (oltre quella proposta da Andrea che
perň oltre a bloccare ALT + TAB blocca combinazioni piů importanti....poi si
tratta di un API ) in pratica un hook di tastiera che dovrebbe bloccare alla
grande ALT + TAB, anzi, piů che bloccare lo intercetta, poi basta nascondere
la finestrella di ALT+TAB con l'API (č si...ci risiamo). Ma perchč fare un
hook globale per una combinazione cosě semplice che puň essere bloccata con
due righe di codice ?
Ci saranno anche altre alternative, ma bisognerebbe spulciare per benino l'
SDK (cioč API )!! eh he
Ti saluto...alle prossime !!


forse in C++ ?
Se guardi gli header, vedi che il mex e' in crosspost sia su
it.comp.delphi che it.comp.lang.c++
--
  ==o-   | Running | HomePage 
http://pinguin.linuxbox.com
   /\\-\ |  Linux  | 1st email: r.salmaso (at) 
flashnet.it
 0-\_/-0 |   2.2   | 2nd email: pinguin (at) 
pinguin.linuxbox.com