Mega Code Archive

 
Categories / Delphi / Examples
 

Pressing and releasing keys by software

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} //======================================================================