Title: Pressing and releasing keys by software
Question: How to press and release keys by software?
Answer:
//----------------------------------------------------------------------
// Just a form with two buttons on it.
// One button is called: ReleaseScrollLockBtn and the other is called:
// SetScrollLockBtn.
//----------------------------------------------------------------------
// References: MicroSoft MDSN library
//
// GetKeyBoardState
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
// winui/hh/winui/keybinpt_0nhh.asp
//
// keybd_event
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
// winui/hh/winui/keybinpt_854k.asp
//----------------------------------------------------------------------
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
Type
TForm1 = Class(TForm)
ReleaseScrollLockBtn: TButton;
SetScrollLockBtn: TButton;
Procedure SetScrollLockBtnClick(Sender: TObject);
Procedure ReleaseScrollLockBtnClick(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Var
Form1 : TForm1;
Implementation
{$R *.DFM}
//----------------------------------------------------------------------
// The Numlock key can be pressed this way under NT but NOT under W95!
// The ScrollLock and CapsLock can be pressed this way under NT and W95
// as well.
// You can also simulate a PrintScreen (SnapShot).
// See the Delphi help file for soft-pressing this key.
// (Set the blinking cursor in the word: "keybd_event" and press: "F1")
//----------------------------------------------------------------------
Procedure SetNumLock(Bo : Boolean);
Var
keyState : TKeyBoardState;
Begin
GetKeyboardstate(keyState);
// keyState[VK_SCROLL] = 0 means the led is off
// keyState[VK_SCROLL] 0 means the led is on
If ( (Bo = True) and (keyState[VK_SCROLL] = 0) ) or
( (Bo = False) and (keyState[VK_SCROLL] 0) ) then
Begin
// Simulate a depress
keybd_event(VK_SCROLL,45,KEYEVENTF_EXTENDEDKEY,0);
// Simulate a release
keybd_event(VK_SCROLL,45,KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP,0);
End;
End;
//----------------------------------------------------------------------
Procedure TForm1.SetScrollLockBtnClick(Sender: TObject);
Begin
SetNumLock(TRUE);
End;
//----------------------------------------------------------------------
Procedure TForm1.ReleaseScrollLockBtnClick(Sender: TObject);
Begin
SetNumLock(FALSE);
End;
//----------------------------------------------------------------------
End. {of Unit1}
//======================================================================