GetAsyncKeyState_(#xxx) & $1

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

GetAsyncKeyState_(#xxx) & $1

Message par Atlante »

Hello,

Une petite question sur cette ligne de code.
Je comprends l'api Windows il 'y a pas de souci à ce niveau là mais je ne comprends pas le :

Code : Tout sélectionner

& $1
Ce la correspond a un et si la touche est appuyée ?

cdt,

Atlante
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: GetAsyncKeyState_(#xxx) & $1

Message par falsam »

Le code fonctionnera aussi sans le & $1 à condition d'avoir le doigt agile.
Place un debug "teste" juste aprés ton GetAsyncKeyState_(#xxx) & $1 et retite le & $1. Puis remet le.

Un peu de code qui affiche ou pas une fenêtre. Touche F8 pour activer ou désactiver cette fenêtre.

Code : Tout sélectionner

Enumeration
  #Mainform
  #MenuPopUp
EndEnumeration

Global MainformStatus.b

Procedure ShowHideWindow(*Value)
  Repeat
    If GetAsyncKeyState_(#VK_F8) & $1
      Debug "teste"
      If MainformStatus = #False
        HideWindow(#MainForm, #False)
        MainformStatus = #True
        
      Else
        HideWindow(#Mainform, #True)
        MainformStatus = #False
      EndIf
     
    EndIf
  ForEver
EndProcedure

OpenWindow(#MainForm, 100, 150, 300, 100, "SysTray Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

CreatePopupMenu(#MenuPopUp)
MenuItem(0, "Afficher la fenetre")
MenuItem(1, "Quitter")

HideWindow(#Mainform, #True)

AddSysTrayIcon(1, WindowID(#Mainform), LoadIcon_(#Null, #IDI_WARNING))
SysTrayIconToolTip(1, "Touche F8" +#CRLF$+ "Pour afficher la fenetre")

CreateThread(@ShowHideWindow(), #Null)

Repeat
  
  Select WaitWindowEvent()    
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0
          HideWindow(#Mainform, #False)
        Case 1
          End 
      EndSelect
      
    Case #PB_Event_SysTray
      If EventType() = #PB_EventType_LeftDoubleClick
        HideWindow(#Mainform, #False)
      EndIf
      
      If EventType() = #PB_EventType_RightClick
        DisplayPopupMenu(#MenuPopUp, WindowID(#Mainform))
      EndIf
      
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: GetAsyncKeyState_(#xxx) & $1

Message par Atlante »

j'avais déjà fait l'essai mais je souhaite juste savoir à quoi cela correspond.
Par exemple le : & = and dans la syntaxe PB
et le $1 pour donner 1 seconde ?
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: GetAsyncKeyState_(#xxx) & $1

Message par Backup »

en general le fait d'ajouter un "&" (qui est en fait un AND ) reviens a faire un masque !!

Code : Tout sélectionner


a$="1001"

debug a$
debug %1001&%01 ; ici on affiche que le "1" de fin... on a masqué tout le reste

debug bin(%1001&%1110) ; ici on affiche que le 1 du debut ..
; en clair on n'affiche que si c'est pareil que le masque ;)





;rappel :

 0 &  0  =    0
 0  &  1  =    0
 1  &  0  =    0
 1  &  1  =    1



au passage la Doc est mal faite car elle indique

0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

le "|" se voulant etre une colonne et non pas le Or "|" ce qui porte a confusion
mon affichage ci dessus serai plus clair ;)

pour l'API le masque permet de ne tester QUE ce qui nous interresse ...
sinon l'info pourrai passer comme valable par exemple si le bit de fin est important ceci "100011" sans masque pourrai etre egal a "100111"
car sans masque le bit de fin est a 1 alors que le binaire est bien different
Dernière modification par Backup le lun. 18/mars/2013 14:38, modifié 2 fois.
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: GetAsyncKeyState_(#xxx) & $1

Message par Atlante »

Tu as mis le doigt sur le problème dobro.
Je pense que j'ai une grosse lacune sur ce point là.

%1001&01 affiche que le 1 je pige à moitié car le second cas ne fonctionne pas avec mon raisonnement.

Déjà %1001 c'est le modulo sous PB ?

ensuite le masque 01 correspond bien à 0001 ?
Donc :
1001
0001
-----
0001

Mais pour le deuxième exemple cela ne fonctionne pas :
1001
0110
------
0000

Si tu pouvais m'apporter la lumière sur ce point ^^?
cdt,

Atlante
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: GetAsyncKeyState_(#xxx) & $1

Message par GallyHC »

Bonjour,

Dobro> Je vois pas le problème dans la doc de PB, moi j'ai :

LHS | RHS |Résultat
------------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

Ce qui me parait en réalité correcte? et dans ton exemple tu mets les même valeur ?

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: GetAsyncKeyState_(#xxx) & $1

Message par Backup »

Atlante a écrit :Tu as mis le doigt sur le problème dobro.
Je pense que j'ai une grosse lacune sur ce point là.

%1001&01 affiche que le 1 je pige à moitié car le second cas ne fonctionne pas avec mon raisonnement.

Déjà %1001 c'est le modulo sous PB ?
oui , mais le signe % au debut d'un chiffre binaire sert aussi a désigner ce chiffre comme etant Binaire ! :)
ceci est un modulo : 10%5
ceci est un chiffre binaire %1001
tout comme "$" designe un chiffre hexa = $FF

ensuite le masque 01 correspond bien à 0001 ?
tout a fait ! :)
Donc :
1001
0001
-----
0001

Mais pour le deuxième exemple cela ne fonctionne pas :
1001
0110
------
0000

Si tu pouvais m'apporter la lumière sur ce point ^^?
cdt,

Atlante
oui , je me suis gourré dans la syntaxe , j'aurai du ecrire :

Code : Tout sélectionner


a$="1001"

debug a$
debug %1001&%01 ; ici on affiche que le "1" de fin... on a masqué tout le reste

debug bin(%1001&%1110) ; ici on affiche que le 1 du debut ..
; en clair on n'affiche que si c'est pareil que le masque ;)




bin() permet de transformer un decimal en binaire ... je me suis planté la dessus Sorry :)
( j'ai modifié mon exemple )
Dernière modification par Backup le lun. 18/mars/2013 14:38, modifié 4 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: GetAsyncKeyState_(#xxx) & $1

Message par Backup »

GallyHC a écrit :Bonjour,

Dobro> Je vois pas le problème dans la doc de PB, moi j'ai :

LHS | RHS |Résultat
------------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

Ce qui me parait en réalité correcte? et dans ton exemple tu mets les même valeur ?

Cordialement,
GallyHC
oui , mais l'utilisation du caractere "|" fait confusion !! il est plus clair d'afficher

0 | 0 = 0
0 | 1 = 0
1 | 0 = 0
1 | 1 = 1

; le Signe "|" est le signe de (OR) il ne devrai donc pas apparaitre pour les autres Opérateur ...
sinon tel que c'est ecris , lorsque je vois ça :
0 | 0 | 0
moi je lis : 0 or 0 or 0 ...
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: GetAsyncKeyState_(#xxx) & $1

Message par GallyHC »

OK je n'avais pas vu cela comme tu l'explique, la c'est pas faut... On peut confondre avec le "OR" comme tu l'explique.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: GetAsyncKeyState_(#xxx) & $1

Message par Atlante »

Tout est plus clair sauf le $ devant le 1.
En fait j'ai cherché dans al doc mais je ne trouve rien qui dit que :

% devant variable = binaire
$ devant variable = ????
...

Je sais je suis chiant mais j'ai le droit aujourd'hui mdr
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: GetAsyncKeyState_(#xxx) & $1

Message par GallyHC »

Bonjour,

$ avant quelque chose permet juste d'écrire un nombre et hexadecimal donc :

0 = $0
1 = $1
2 = $2
3 = $3
...
10 = $a
11 = $b
12 = $c
...

un petit exemple :

Code : Tout sélectionner

Debug $100
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: GetAsyncKeyState_(#xxx) & $1

Message par Backup »

Dobro a écrit : oui , mais le signe % au debut d'un chiffre binaire sert aussi a désigner ce chiffre comme etant Binaire ! :)
ceci est un modulo : 10%5
ceci est un chiffre binaire %1001
tout comme "$" designe un chiffre hexa = $FF
8O t'es peut etre miro :lol:

Bon anniversaire a Atlante , et au Psychopathe .. (tiens c'est marrant que vous soyez né le meme jour :mrgreen: )
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: GetAsyncKeyState_(#xxx) & $1

Message par falsam »

Dobro a écrit :(tiens c'est marrant que vous soyez né le meme jour :mrgreen: )
Tu ne vas quand même pas suspecter qu'atlante est aussi un technicien informatique à la Defense tout comme Psychopathe ? Si c'était vrai ça serait vraiment incroyable :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: GetAsyncKeyState_(#xxx) & $1

Message par Backup »

:)
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: GetAsyncKeyState_(#xxx) & $1

Message par Atlante »

C'est vrai, cela serait vraiment incroyable quand même cette histoire mdr :D
Le pire dans tout ça que que je fais toujours du support info à la défense ^^
Sauf que je fais que du n2, ça fait plaisir de plus pousser son chariot avec les pc...


Dsl Dobro mais oui je pense que je suis miro ^^.
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Répondre