Newsgroup: it.comp.lang.delphi
Titolo: Uhm... led della tastiera in FAQ?

Stavo leggiucchiando le FAQ e ho visto la domanda 4.4
"Mi servirebbe sapere come poter accendere e spegnere i tre led della tastiera."
La risposta lascia pochi dubbi, quindi ho provato, ma a me non funzia!
Cosě vado a leggere l'help di win32 e vedo:
"Because the SetKeyboardState function alters the input state of the calling
thread and not the global input state of the system, an application cannot use
SetKeyboardState to set the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights
on the keyboard. "
E allora? A voi funzia?
__
Jax

 E allora? A voi funzia?
Come non detto, ho letto un po' di messaggi vecchi dove si discuteva di questo
fatto (e ovviamente Andrea e Carlo flamavano ;))
__
Jax
PS: Ma "Annulla messaggio" che voi sappiate funziona su libero? Ho provato ad
annullarlo ma è sempre lì... mah.

 on the keyboard. "
Mah l'ho provato su windows 98 e ricordo che funzionava, ma mi pare che su
NT e seguito non funzioni..
Che dite la tolgo ?

 Che dite la tolgo ?
No, basta che specifichi che in WinNT/2K non funzia.
Al massimo domani faccio qualche prova e vedo se riesco a farla funzionare.
__
Jax

 Che dite la tolgo ?
io la eliminerei. La documentazione riportata parla chiaro in merito, anche
se poi su Win9x il tutto sembra funzionare.
Tuttavia non credo che sia una FAQ, nella vera accezione del termine.
--
- Carlo -
c.b...@libero.it

 fatto (e ovviamente Andrea e Carlo flamavano ;))
Purtroppo chi ha scritto quella FAQ ha frainteso il significato
di SetKeyboardState:
"Because the SetKeyboardState function alters the input state 
 of the calling thread and not the global input state of the 
 system, an application cannot use SetKeyboardState to set 
 the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights on 
 the keyboard".
La funzione in questione serve ad impostare lo STATO della tastiera,
non ad accendere i led.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 non ad accendere i led.
Oddio, non vorrei scatenare un altro flame come quello che ho letto.
Personalmente, posso essere d'accordo con te, ma non sarei cosě fiscale.
La documentazione dice quello che dice, ma i fatti sono che sotto win98 usando questo
metodo, si ottiene che le luci si accendono e si spengono correttamente, una cosa che non
si puň ottenere sotto NT/2K.
Basta saperlo... che differenza fa se la funzione imposta lo stato della tastiera? Se io
voglio che i led si accendano e accendere i led č un effetto collaterale di questa
funzione, che importa?
Tutto il resto, IMHO, č filosofia :)
__
Jax

 collaterale di questa funzione, che importa?
La funzione non si chiama "SetKeyboardLights", ma "SetKeyboardState" 
e la differenza e' fondamentale.  Non puo' essere usata per accendere
i led non per un impedimento fisico, ma per correttezza. 
La corrispondenza tra lo stato globale della tastiera e l'accensione 
di un led deve essere biunivoca.  Indicatore acceso significa stato e
stato globale impostato significa indicatore acceso.  Il fatto che
un led si accenda e' una conseguenza, appunto, collaterale, ma che
non corrisponde allo stato globale della tastiera.  E' per questo
che Microsoft e' libera, sotto i sistemi NT, di non far vedere alcun
indicatore acceso, perche' la funzione non e' studiata per quello e
perche' si darebbe un'informazione sbagliata.  Lo stato della tastiera
impostato con SKS vale solo per il thread chiamante e questo significa
che l'indicatore acceso e', comunque, un'informazione fuorviante.


 i led non per un impedimento fisico, ma per correttezza.
Credo di aver capito cosa intendi, e hai ragione, non foss'altro per il fatto che
cambiando lo stato della tastiera continuamente (sono riuscito finalmente a provare su
win98), si creano casini, però solo con il BLOC-NUM  o__O
Comunque effettivamente è un po' tirata come cosa, quindi forse è giusto toglierla dalla
faq.
Scusa se l'ho tirata per le lunghe!
__
Jax

 No, basta che specifichi che in WinNT/2K non funzia.
Il discorso non e' che sotto NT/2K non funziona e sotto 98 si'.
L'API in questione "funziona" comunque, perche' la sua "funzione"
non e' quella di accendere i led.  Quando si parla di "funzionamento"
lo si fa in riferimento allo scopo per cui la funzione e' studiata.
Quello che si dovrebbe capire e' che usare una funzione per i suoi 
effetti collaterali, anziche' per il suo scopo principale, e' un 
atteggiamento molto "error prone".
Il produttore puo' cambiare/correggere/modificare gli effetti
secondari delle API, senza darne avvertenza agli utenti e senza
sconvolgere l'interfacciamento della funzione.  Stesso discorso
si applica a funzioni come RegisterServiceProcess, che viene data
come panacea alla domanda "come si elimina un processo dalla task
list sotto Win9x ?".  L'eliminazione di un processo dalla task
list e' un effetto secondario.  La funzione non si chiama 
"HideAnApplicationFromTheTaskList", ma lascia intendere che la sua
funzione sia quella di registrare un processo nel sistema come
servizio, in quei sistemi in cui non esiste un vero e proprio
concetto di "servizio".  Non sono poche le persone che, portate a
credere che l'applicazione, dal momento in cui questa funzione
veniva applicata in poi, avrebbe continuato a comportarsi normalmente,
si sono trovate nei problemi, accorgendosi che tra una sessione e
l'altra di accesso alla rete locale, l'applicazione non veniva chiusa
e riaperta, ma restava in piedi (come si conviene ad un servizio).
Microsoft e' liberissima di "upgradare" le API, eliminando gli effetti
secondari (vedi l'accensione dei led con SKS e il mascheramento del
nome del processo con RSP) senza che il programmatore sia in diritto
di lamentarsi.  Sulle FAQ va bene lasciare il riferimento a queste
funzioni, ma bisogna specificare: guardate che questo e' solo un 
effetto secondario, quindi non e' garantito che funzioni, sempre, 
su tutti i sistemi ed e' possibile che in futuro questo comportamento
non venga piu' implementato.


Ok allora mi segno di toglierla, in effetti non e' neanche tanto faq.. a
presto il nuovo post!
--
{MSX}  -  
http://msx.rules.it
Mantenitore delle FAQ di it.comp.lang.delphi,
reperibili qui: 
http://gpi.infomedia.it/abc/delphi/FaqDelphi.txt