PDA

View Full Version : تشخیص فشردن کلید های کیبورد موقعی که فرم فوکوس نداره



siroosss
جمعه 26 مهر 1392, 16:27 عصر
سلام
همونطور که می دونید ، وقتی خارج از فرم دلفی ، در محیط دسکتاپ و یا روی تسکبار و... کلیک می کنیم
فرم فوکوس رو از دست میده .
من چطور می تونم موقعی که فرم فوکوس نداره ، از کلید های کیبورد استفاده کنم و فرم ، فشردن کلید های کیبورد رو تشخیص بده؟
به عنوان مثال موقعی که فرم فوکوس نداره ، با فشردن کلید F از روی کیبورد فرم بسته بشه .
لطفا راهنمایی کنید

persia_hrn
جمعه 26 مهر 1392, 17:25 عصر
دوست عزیز شما میتونید از کامپوننت Hotkey استفاده کنید .

siroosss
جمعه 26 مهر 1392, 23:16 عصر
ممنونم از شما
اما من دنبال یه راهی هستم که بدون کامپوننت این کار انجام بشه
راهی بدون کامپوننت سراغ ندارید؟

Ananas
شنبه 27 مهر 1392, 02:31 صبح
GetAsyncKeyState

siroosss
شنبه 27 مهر 1392, 18:14 عصر
کاربر Ananas ممنونم از شما
من با این عنوان تو فروم گشتم و یه مطلب پیدا کردم که اتفا قا شما تو اون در مورد GetAsyncKeyState کامل توضیح داده بودید
من اون رو خوندم و الان یه مشکل دارم .
اول لطفا به این کدی که گذاشتم یه نگاهی بندازید
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (GetAsyncKeyState(VK_CONTROL) and $8000 = 0) then
if self.Focused then
begin
Form1.Caption := 'Up';
end;
if not self.Focused then
begin
Form1.Caption := 'Down';
end;

end;

مشکلی که دارم این هستش که ، با این کد ، کلید کنترل تو حالتی که فرم فوکوس نداره ، غیر فعال هستش
نمی دونم اشکال کارم کجاست که وقتی با موس بیرون فرم کلیک می کنم کپشن فرم تغییر می کنه
من فقط می خوام در حالتی که فرم فوکوس داره و یا نداره ، وقتی کلید کنترل کیبورد رو فشار میدم کپشن فرم up یا DOWN بشه (و نشانگر موس این وسط هیچکاره باشه)
لطفا راهنمایی کنید

SayeyeZohor
یک شنبه 28 مهر 1392, 18:13 عصر
لطفاً كدتون رو در تگ مخصوص () قرار بديد


[PASCAL]
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (GetAsyncKeyState(VK_CONTROL) and $8000 = 0) then
if self.Focused then
begin
Form1.Caption := 'Up';
end;
if not self.Focused then
begin
Form1.Caption := 'Down';
end;

end;

SayeyeZohor
یک شنبه 28 مهر 1392, 18:26 عصر
procedure TForm1.Timer1Timer(Sender: TObject);
var
i : integer;
begin

for i:=8 To 222 do
begin
if GetAsyncKeyState(i)=-32767 then
begin
case i of
8 : memo1.Lines[memo1.Lines.count-1] := copy(memo1.Lines[memo1.Lines.count-1],1,length(memo1.Lines[memo1.Lines.count-1])-1); //Backspace
9 : memo1.text:=memo1.text+'[Tab]';
13 : memo1.text:=memo1.text+#13#10; //Enter
17 : memo1.text:=memo1.text+'[Ctrl]';
27 : memo1.text:=memo1.text+'[Esc]';
32 :memo1.text:=memo1.text+' '; //Space
// Del,Ins,Home,PageUp,PageDown,End
33 : memo1.text := Memo1.text + '[Page Up]';
34 : memo1.Text := Memo1.text + '[Page Down]';
35 : memo1.text := Memo1.text + '[End]';
36 : memo1.text := Memo1.text + '[Home]';
//Arrow Up Down Left Right
37 : memo1.text := Memo1.text + '[Left]';
38 : memo1.text := Memo1.text + '[Up]';
39 : memo1.text := Memo1.text + '[Right]';
40 : memo1.text := Memo1.text + '[Down]';

44 : memo1.text := Memo1.text + '[Print Screen]';
45 : memo1.text := Memo1.text + '[Insert]';
46 : memo1.text := Memo1.text + '[Del]';
145 : memo1.text := Memo1.text + '[Scroll Lock]';

//Number 1234567890 Symbol !@#$%^&*()
48 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+')'
else memo1.text:=memo1.text+'0';
49 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'!'
else memo1.text:=memo1.text+'1';
50 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'@'
else memo1.text:=memo1.text+'2';
51 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'#'
else memo1.text:=memo1.text+'3';
52 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'$'
else memo1.text:=memo1.text+'4';
53 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'%'
else memo1.text:=memo1.text+'5';
54 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'^'
else memo1.text:=memo1.text+'6';
55 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'&'
else memo1.text:=memo1.text+'7';
56 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'*'
else memo1.text:=memo1.text+'8';
57 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'('
else memo1.text:=memo1.text+'9';
65..90 : // a..z , A..Z
begin
if ((GetKeyState(VK_CAPITAL))=1) then
if GetKeyState(VK_SHIFT)<0 then
memo1.text:=memo1.text+LowerCase(Chr(i)) //a..z
else
memo1.text:=memo1.text+UpperCase(Chr(i)) //A..Z
else
if GetKeyState(VK_SHIFT)<0 then
memo1.text:=memo1.text+UpperCase(Chr(i)) //A..Z
else
memo1.text:=memo1.text+LowerCase(Chr(i)); //a..z
end;
//Numpad
96..105 : memo1.text:=memo1.text + inttostr(i-96); //Numpad 0..9
106:memo1.text:=memo1.text+'*';
107:memo1.text:=memo1.text+'&';
109:memo1.text:=memo1.text+'-';
110:memo1.text:=memo1.text+'.';
111:memo1.text:=memo1.text+'/';
144 : memo1.text:=memo1.text+'[Num Lock]';

112..123: //F1-F12
memo1.text:=memo1.text+'[F'+IntToStr(i - 111)+']';

186 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+':'
else memo1.text:=memo1.text+';';
187 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'+'
else memo1.text:=memo1.text+'=';
188 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'<'
else memo1.text:=memo1.text+',';
189 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'_'
else memo1.text:=memo1.text+'-';
190 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'>'
else memo1.text:=memo1.text+'.';
191 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'?'
else memo1.text:=memo1.text+'/';
192 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'~'
else memo1.text:=memo1.text+'`';
219 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'{'
else memo1.text:=memo1.text+'[';
220 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'|'
else memo1.text:=memo1.text+'\';
221 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'}'
else memo1.text:=memo1.text+']';
222 : if GetKeyState(VK_SHIFT)<0 then memo1.text:=memo1.text+'"'
else memo1.text:=memo1.text+'''';
end;
end;
end;

end;



شانس آوردي من از گذاشتن كد تو سايت لذت مي برم وگرنه مجبور بودي دنبال اين keylogger بگردي
حالا محض اينكه خودتم يك كاري كرده باشي اين keylogger رو تكميل كن و Alt, Ctrl, Arrows, End, Insert, Numbers, Symbols, Backspace... رو اضافه كن
بعد كه تكميل شد بذارش تو تاپيك "مرجع توابع دلفي" يا "سورس هاي نمونه"
:گیج:

ضمناً Ananas خيلي مي خوامت (كاربر خاص)

SayeyeZohor
یک شنبه 28 مهر 1392, 18:46 عصر
اينم يك فانكشن كه باهاش مي توني بفهمي كدوم كليك موس فشار داده شده است ؟


uses
Windows;
...
function IsBtnPressed(ABtn: integer): boolean;
//ABtn can be either VK_LBUTTON, VK_MBUTTON, or VK_RBUTTON
begin
result := (GetAsyncKeyState(ABtn) and $8000) = $8000;
end
3.




if IsBtnPressed(VK_LBUTTON) then ShowMessage('lbtn');

SayeyeZohor
یک شنبه 28 مهر 1392, 18:48 عصر
112071

اينم يك ايبوك از ترفند هاي دلفي
A Collection of Delphi Tips & Tricks

SayeyeZohor
یک شنبه 28 مهر 1392, 18:56 عصر
If ((GetKeyState(VK_CONTROL) AND 128)=128) and
((GetKeyState(VK_F5) AND 128)=128) and
((GetKeyState(ord('8')) AND 128)=128)
then
ShowMessage('CTRL+F5+8 Pressed');

SayeyeZohor
یک شنبه 28 مهر 1392, 19:23 عصر
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if ((GetKeyState(VK_CONTROL) AND 128)=128) and (Form1.Active) then Form1.Caption := 'UP';
if ((GetKeyState(VK_CONTROL) AND 128)=128) and (NOT Form1.Active) then Form1.Caption := 'DOWN';
end;


اينم كد تغيير يافته شما
ديگه در حال انفجارم

SayeyeZohor
یک شنبه 28 مهر 1392, 19:25 عصر
اين تاپيك رو هم يك نگاه بنداز

شبيه سازی فشردن کلید های کیبورد (http://barnamenevis.org/showthread.php?396298-%D8%B4%D8%A8%D9%8A%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%81%D8%B4%D8%B1%D8%AF%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%87%D8%A7%DB%8C-%DA%A9%DB%8C%D8%A8%D9%88%D8%B1%D8%AF)
تشخیص تمامی کلید های فشار داده شده حتی بدون داشتن فوکاس روی فرم (http://barnamenevis.org/showthread.php?111405-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%AA%D9%85%D8%A7%D9%85%DB%8C-%DA%A9%D9%84%DB%8C%D8%AF-%D9%87%D8%A7%DB%8C-%D9%81%D8%B4%D8%A7%D8%B1-%D8%AF%D8%A7%D8%AF%D9%87-%D8%B4%D8%AF%D9%87-%D8%AD%D8%AA%DB%8C-%D8%A8%D8%AF%D9%88%D9%86-%D8%AF%D8%A7%D8%B4%D8%AA%D9%86-%D9%81%D9%88%DA%A9%D8%A7%D8%B3-%D8%B1%D9%88%DB%8C-%D9%81%D8%B1%D9%85)
شبیه سازی رویداد کلید های کیبورد (http://barnamenevis.org/showthread.php?61649-%D8%B4%D8%A8%DB%8C%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-%DA%A9%D9%84%DB%8C%D8%AF-%D9%87%D8%A7%DB%8C-%DA%A9%DB%8C%D8%A8%D9%88%D8%B1%D8%AF)
تشخیص فشردن کلید (http://barnamenevis.org/showthread.php?41685-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D9%81%D8%B4%D8%B1%D8%AF%D9%86-%DA%A9%D9%84%DB%8C%D8%AF)

siroosss
یک شنبه 28 مهر 1392, 21:15 عصر
برادر SayeyeZohor عزیز ، بابا دمت گرم
خیلی با حالی اگه تا آخرش همینجور سنگ تموم بزاری
ولی تا همین جاشم خیلی حال دادی
تشکر بی پایان

SayeyeZohor
یک شنبه 28 مهر 1392, 23:03 عصر
برادر SayeyeZohor عزیز ، بابا دمت گرم
خیلی با حالی اگه تا آخرش همینجور سنگ تموم بزاری
ولی تا همین جاشم خیلی حال دادی
تشکر بی پایان


قابلي نداشت
فقط بايد كدي كه دادم رو كامل كني و بذاري تو همين تاپيك مي خوام تلاشتو ببينم
اگه تلاشي نباشه توقعي نبايد از دوستان داشته باشي

Ananas
یک شنبه 28 مهر 1392, 23:48 عصر
if ((GetAsyncKeyState(VK_CONTROL) and $8000) <> 0) then
begin
if self.Focused then
begin
Form1.Caption := 'Up';
end
else
begin
Form1.Caption := 'Down';
end;
end;