--- ---
Here's a procedure that sends a simulated key press to the active control:
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean); type TShiftKeyInfo = record shift: Byte; vkey: Byte; end; ByteSet = set of 0..7; const shiftkeys: array [1..3] of TShiftKeyInfo = ( (shift: Ord(ssCtrl) ; vkey: VK_CONTROL), (shift: Ord(ssShift) ; vkey: VK_SHIFT), (shift: Ord(ssAlt) ; vkey: VK_MENU) ); var flag: DWORD; bShift: ByteSet absolute shift; j: Integer; begin for j := 1 to 3 do begin if shiftkeys[j].shift in bShift then keybd_event( shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0 ); end; if specialkey then flag := KEYEVENTF_EXTENDEDKEY else flag := 0; keybd_event(key, MapvirtualKey(key, 0), flag, 0); flag := flag or KEYEVENTF_KEYUP; keybd_event(key, MapvirtualKey(key, 0), flag, 0); for j := 3 downto 1 do begin if shiftkeys[j].shift in bShift then keybd_event( shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), KEYEVENTF_KEYUP, 0 ); end; end;
Parameters:
Ord(character).
This procedure uses the Windows API function keybd_event to manufacture a series of key events matching the passed parameters. The events go to the control with focus. Note that for characters key is always the upper-case version of the character. Sending without any modifier keys will result in a lower-case character, sending it with [ssShift] will result in an upper-case character.
Usage:
procedure TForm1.SpeedButton1Click(Sender: TObject) ; begin // Simulate PRINTSCREEN - snapshot of the full screen PostKeyEx32(VK_SNAPSHOT, [], False) ; // Simulate PRINTSCREEN - snapshot of the active window PostKeyEx32(VK_SNAPSHOT, [ssAlt], False) ; // Simulate Spacebar key PostKeyEx32(VK_space, [], False) ;( I changed this) // Simulate Alt+F4 - close active window PostKeyEx32(VK_F4, [ssAlt], False) ; end;