GetAsyncKeyState keystate short long of Ulong

Alles over het toepassen van API en DLL's in Liberty BASIC

Moderator: anthonio

GetAsyncKeyState keystate short long of Ulong

Berichtdoor Gordon » ma mei 28, 2007 12:19 pm

Hallo Allemaal,


Ik begreep van iemand die het weten kan het volgende:

Code: Selecteer alles
 calldll #user32, "GetAsyncKeyState",_
 _VK_RETURN as long, keystate as short
 if keystate < 0 then goto [exit]

Deze routine springt naar [exit] als de (Enter) key gebruikt is;
het kan voor elke andere toets aangepast worden door _VK_RETURN te wijzigen.

Let verder op dat er op <0 (dus negatieve waarden) getest wordt.
Daarvoor moet je volgens die kenner dus een short gebruiken.
De short staat in de MSB volgens mij als eerste byte?


Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Berichtdoor anthonio » wo mei 30, 2007 2:03 pm

idd, long kan ook gebruikt worden maar zoals eerder vermeld reserveer je dan meer geheugen dan nodig is.
ff teste en ik post dan een voorbeeld.

kleine edit, waarom niet gewoon de native command in lb gebruike?
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm

Berichtdoor Abcott » do mei 31, 2007 10:38 pm

Hallo


Ik ben zeker geen held in API/DLL.
Maar ik had het volgende van deze functie uit de user32.dll
begrepen.

1. De functie is bedoeld voor de tweede parameter.
In het voorbeeld is dat de parameter KeyState.
Deze parameter geeft een 0 (false) zolang er niets
ingetoetst wordt.

Daaruit hebben programmeurs geconcludeerd dat je op
<>0 (voor true) kunt controleren. In feite kijkt de functie naar de
MSB en ziet daar FFFF FFFF (-32767) staan als een toets wordt ingedrukt.
Dus KeyState mag als short of long benaderd worden, het doet er niet toe.

2. Een bijkomend voordeel van de functie is dat ook de getalswaarde van
de ingedrukte toets wordt getest in key. De functie werkt natuurlijk niet
als er niet getest wordt. Maar meer dan 255 wordt key nooit.
Dus key mag ook long of short zijn.

Code: Selecteer alles
[loop]
    for key = 1 to 255
        calldll #user32, "GetAsyncKeyState",_
        key as long, keystate as short
        if keystate < 0 then goto [exit]
        print keystate
    next key
goto [loop]
wait

[exit]
print key
print chr$(key+32)
print "yes some key was pressed"
print keystate
wait


Abcott

Trouwens deze listing zag ergens op het internet.
Avatar gebruiker
Abcott
 
Berichten: 115
Geregistreerd: wo mei 25, 2005 9:58 pm

Berichtdoor anthonio » za jun 02, 2007 12:34 am

mooie uitleg abcott alleen blijf ik het zeggen.
geen onnodig geheugen reserveren als dit niet nodig is maar in dit voorbeeld doet het er niet toe of je nu long of short gebruikt aangezien het een zeer klein programma is.
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm


Keer terug naar API/DLL

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron