در این روتین برای همه کلیدهائی که قابل نمایش هستند فق کافیست که کد اسکی آنها را به این روتین بدهید و برای کلیدهای شیفت یا کنترل بایستی متغیر مربوطه را تنظیم نمائید.
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;
برای استفاده از کد بالا در برنامه هم می توانید از سورس دلفی زیر استفاده نمائید:
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 left Windows key
PostKeyEx32(VK_LWIN, [], False) ;
// Simulate Alt+F4 - close active window
PostKeyEx32(VK_F4, [ssAlt], False) ;
end
برداشتی از سایت Delphi.About.com