Wednesday، August 17، 2005

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

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

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



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

Monday، August 15، 2005

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



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;