PDA

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



mbshareat
چهارشنبه 29 خرداد 1398, 07:42 صبح
سلام
من در دو برنامه که ممکنه همزمان باز باشند، از Shift+W برای بازگشت به برنامه استفاده می کنم.
فرض کنید برنامه A,B باز هستند و هر دو با برنامه های دیگه روی یک پوشه کار مرتبط انجام میدند.برای اینکه نیاز به ور رفتن به Alt+Tab نشه Shift+W رو تعیین کردم که سریع به برنامه مورد نظر منتقل بشم.
هر کدوم از دو برنامه A,B به تنهایی باز باشه Shift+W خوب عمل می کنه ولی اگر هر دو باز باشند برای یکی عمل می کنه.
این در حالیه که برای برنامه A فقط در حالی بازگشت به برنامه رو میخوام که برنامه C فعال باشه.
راهی هست که مطمئن بشم Hotkey تعیین شده(همون Shift+W) در صورتیکه برنامه C فعال نیست برای برنامه B عمل می کنه؟
یعنی پیغام صفحه کلید وقتی که برنامه C فعال نیست، به برنامه B می رسه؟
این کد رو چطور برای برنامه A تغییر بدم؟
..
Procedure WMHotkey( Var msg: TWMHotkey ) ;message WM_HOTKEY;
...
procedure TFileBrowserForm.FormCreate(Sender: TObject);
begin
RegisterHotkey (Handle, 1, MOD_Shift, Ord('W'));
...
Function WindowCaption(H:THandle):String;
Var
aText:array [0..255] of char;
begin
SendMessage(H, WM_GETTEXT,
SizeOf(aText), integer(@aText)) ;
Result:=aText;
end;
procedure TFileBrowserForm.WMHotkey(var msg: TWMHotkey);
begin
If (msg.hotkey = 1) and (pos('Foxit Reader',WindowCaption(GetForeGroundWindow()))>0)
and (FileBrowserForm.Visible=true) Then
Begin
SetForeGroundWindow(Self.Handle);
Application.Restore;
End;
end;

mbshareat
سه شنبه 11 تیر 1398, 23:57 عصر
سلام
فهمیدم میشه بدون اون شرط خاص،تعریف hotKey رو ملغی کرد و با Keybd_Event فشار و رها کردن کلید رو شبیه سازی کرد و بعد دوباره HotKey رو تعریف کرد.فقط نمی دونم چرا نیاز نبود اگر مثلا Shift+Q رو تعریف کردم رها کردن Shift روشبیه سازی کنم.