معلم دلفی

چهارشنبه، مرداد ۲۶، ۱۳۸۴

شبیه سازی فشرده شدن یک کلید از درون برنامه

گاهی شما می خواهید از درون برنامه خودتان فشرده شدن یک کلید را برای برنامه شبیه سازی نمائید بطوریکه انگار یک کاربر این کلید را فشرده است.

در این روتین برای همه کلیدهائی که قابل نمایش هستند فق کافیست که کد اسکی آنها را به این روتین بدهید و برای کلیدهای شیفت یا کنترل بایستی متغیر مربوطه را تنظیم نمائید.



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

دوشنبه، مرداد ۲۴، ۱۳۸۴

چطور میشه برنامه را از نوار وظیفه پنهان کرد؟



procedure TForm1.FormCreate(Sender: TObject) ;
begin
ShowWindow(Application.Handle, SW_HIDE) ;
SetWindowLong(Application.Handle, GWL_EXSTYLE,
getWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW) ;
ShowWindow(Application.Handle, SW_SHOW) ;
end;