[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 224
  • Last Modified:

How access key-states?

Hi!

Here's an easy one... How can I check whether Ctrl, Alt or L/R Shift is pressed in an IF-statement. Like:

if (bla bla bla) then begin
  CtrlPressed := True;
end;

In good, old DOS (may she rest in peace) there was a particular address where some bits indicated the key-states, but hey!... it's the 90ties now!

Thanks!

//Daniel, Sweden
0
Dippen
Asked:
Dippen
  • 3
  • 2
1 Solution
 
westphalCommented:
use the windows function

GetKeyState(nVirtKey : integer)

where nVirtKey is one of the following value:
VK_LSHIFT      
VK_RSHIFT
VK_LCONTROL      
VK_RCONTROL
VK_LMENU      
VK_RMENU

the return value is
if the high-order bit is 1, the key is down; otherwise, it is up. If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.
0
 
westphalCommented:
here is an example:
if you have a form with 2 buttons you can test the GetKeyState with the following code:

procedure TForm1.Button1Click(Sender: TObject);
begin
 if GetKeyState(vk_LControl) and $80 = $80 then
   MessageDlg('left control key is down',mtInformation,[mbOk],0)
 else
   MessageDlg('left control key is up',mtInformation,[mbOk],0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if GetKeyState(vk_NumLock) and $1 = $1 then
   MessageDlg('NumLock is toggled',mtInformation,[mbOk],0)
 else
   MessageDlg('NumLock is untoggled',mtInformation,[mbOk],0);
end;

0
 
DippenAuthor Commented:
Hi, westphal!

I can't get your first procedure to work using the VK_LCONTROL constant, but if I change it to VK_CONTROL it works for both Ctrl keys. Is it because I use Win95? And if it IS because of Win95, is there any workaround in case I want to distinguish between Left and right Shift or Ctrl?

0
 
westphalCommented:
you are right, win95 does'nt know the difference between right and left :) but you can use in win95 a direct access to bios or harware (old way in dos program's)

0
 
DippenAuthor Commented:
OK. Thanks for your help!
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now