Newsgroup: it.comp.lang.c
Titolo: Mask e tipi

Salve
mi e' sorto un dubbio
facendo un piccolo programma e' mi sorge un dubbio?
questa riga altera il valore di k?
  if ((K & 1073741824)==0){ //keydown
		N=K >> 16;
		N=N << 8;
		N=N >> 8;
		switch (N) {.....
se la cambio in
  if ((K & 1073741824)!=0){ //keyup
		N=K >> 16;
		N=N << 8;
		N=N >> 8;
		switch (N) {.....
non funge nulla
la cosa riguarda ovviamente la tastiera sotto win :D
Credo di non ricordare bene quetsi operatori...
Altra cosa
short 16 bit
char 8 bit
long 32 bit giusto?
unsigned (senza attribbuti) 1 bit :D
per fare un int da 4 bit c'e' un modo?
Grazie mille
Kirys
--------------------------------------------------
Brayan Fix Kirys Solfory
E-Mail: 
Ki...@technologist.com
 
For Free Software go to: 
http://Kiryssoft.cjb.net

 per fare un int da 4 bit c'e' un modo?
  Per fare un tavolo ci vuole un fiore... :)
  No, non c'e` modo, a meno di non usare mappe di bit su interi oppure i
campi di bit nelle struct.
	Alla prossima,
		Marco

per fare un int da 4 bit c'e' un modo?
I campi bit delle strutture.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

>                 N=N >> 8;
dovrebbe ritornarmi i dati oem
Value	Description
0-15	Specifies the repeat count. The value is the number of times
the keystroke is repeated as a result of the user's holding down the
key.
16-23	Specifies the scan code. The value depends on the original
equipment manufacturer (OEM).
24	Specifies whether the key is an extended key, such as a
function key or a key on the numeric keypad. The value is 1 if the key
is an extended key; otherwise, it is 0.
25-28	Reserved.
29	Specifies the context code. The value is 1 if the ALT key is
down; otherwise, it is 0.
30	Specifies the previous key state. The value is 1 if the key is
down before the message is sent; it is 0 if the key is up.
31	Specifies the transition state. The value is 0 if the key is
being pressed and 1 if it is being released.
Ti allego l'intera funzione per completezza
LRESULT __declspec(dllexport) CALLBACK KeyboardProc(
    int code,	// hook code
    WPARAM wParam,	// virtual-key code
    LPARAM lParam 	// keystroke-message information
   )
{
	long N;
	long K;
	HHOOK *KH;
	K=lParam;
	PW=FindWindow("kplusWndClass",NULL);
	KH=GetProp(PW,"Hook");
	if (KH != NULL)
		KHook=*KH;
		else
			KHook=NULL;
	if ((wParam==255)) //se il carattere e' 255 allora appartiene
alla schiera dei caratteri speciali
	   if ((K & 1073741824)==0){ //se il tasto e' stato premuto
		N=lParam >> 16;
		N=N << 8;
		N=N >> 8;
		switch (N) {
			case 16:{SendCComm(kc_stop);
					break;}
			case 18:{SetMute(!GetMute());
SendMessage(PW,WM_TRAYUPD,Vlevel(),0);
					break;}
			case 25:{SendCComm(kc_play);
					break;}
			case 30:{
				//IncVolume();
				SetVolume(2000);
				SendMessage(PW,WM_TRAYUPD,Vlevel(),0);
				break;}
			case 32:
ShellExecute(0,"open","C:\\documenti\\programmazione","","",SW_SHOWNORMAL);
				break;
			case 37:
				//DecVolume();
				SetVolume(-2000);
				SendMessage(PW,WM_TRAYUPD,Vlevel(),0);
				break;
			case 38:
ShellExecute(0,"open","D:\\Programmi\\DAP\\DAP.exe","","",SW_SHOWNORMAL);
				break;
			case 46:
ShellExecute(0,"open","C:\\NET\\Kirys\\bookmark.htm","","",SW_SHOWNORMAL);
				break;
			case 48:
ShellExecute(0,"open","rasphone.exe","","",SW_SHOWNORMAL);
				break;
			case 50:
ShellExecute(0,"open","netscape.exe","","",SW_SHOWNORMAL);
				break;
			case 94:
				//AdjustTokenPrivileges(
				if (ExitWindowsEx(EWX_SHUTDOWN |
EWX_POWEROFF |EWX_LOGOFF,0)==0) MessageBeep(MB_OK);
				break;
			case 95:
				break;
			case 99:
				if (ExitWindowsEx(EWX_REBOOT,0)==0)
MessageBeep(MB_OK);
				break;
		}
		CallNextHookEx(KHook,code,wParam,lParam);
		return -1
		} else { //Se il tasto e' stato rilasciato
		N=lParam >> 16;
		N=N << 8;
		N=N >> 8;
		BinaryMSG(lParam);
		switch (N) {
		case 16:{MessageBeep(MB_OK);
		break;}
		} 		return -1
			}
	CallNextHookEx(KHook,code,wParam,lParam); return 0;
}
se (K & 1073741824)==0 e' falso la variabile lParam e esattamente Il
valore inverso (scambio di zero ed uno) dell' lParam che ha ricevuto
(per testate simulo wm_keyup passando i numeri che voglio).
Sta cosa mi sta facendo impazzire, non so da cosa possa essere
causata.
Il sorgente e' un esperimento ed e' arronzato
I parametri li passa windows (NT) (questa chiamata e' in una dll usata
per creare un hook alla tastiera
AIUTOOOOOOOOO


Ambiente: windows nt
it.comp.programmare.win32


 in una dll usata per creare un hook alla tastiera
  Hai provato a chiedere in qualche gruppo specifico come si fa a
definire correttamente un hook? I miei (scarni) ricordi dell'SDK non mi
consentono di valutare esattamente cosa hai scritto.
	Alla prossima,
		Marco

consentono di valutare esattamente cosa hai scritto.
si ho scritto nel ng microzozz e spatto risposta :D
Ciao


it.comp.programmare.win32
non riguarda il S.O. dato che con delphi il problema non si verifica
quindi pensavo riguardasse la mia poca protica in C, per questo ho
postato qua.
Io il c lo ho studiato(scuola) ma ho deciso di impararlo solo ora
perche' so che mi servira'.
a questo punto penso ad un baco del compilatore


 1011 diventa 0100 non mi viene la parola :D
Penso che si chiami "not"...
--
 Ciao, Bianco.
 Reply to 
luca....@tiscalinet.it

 a zero. Era questo che volevi? Se si`, bastava un or.
una and forse?