Đưa ra một phím nóng, làm thế nào tôi có thể tìm thấy chương trình nào sở hữu nó?
Đưa ra một phím nóng, làm thế nào tôi có thể tìm thấy chương trình nào sở hữu nó?
Câu trả lời:
Thận trọng : Nếu bạn sử dụng Win 8 trở lên, không sử dụng tiện ích này vì nó sẽ tạo ra một số rắc rối - xem bình luận.
Nếu bạn đang chạy Windows sớm hơn Windows 8, thì đó Windows Hotkey Explorer
có lẽ là điều bạn muốn. Điều này cũng được đề cập trong câu hỏi StackOverflow: Tìm hiểu quá trình đăng ký một phím nóng toàn cầu? (API Windows) .
Điều này hoạt động với tôi trong Win10 (và có lẽ tất cả các phiên bản Windows gần đây mơ hồ khác) ... cũng được sao chép ở đây từ https://stackoverflow.com/a/43645062/995048 vì trang này dường như xuất hiện đầu tiên trong kết quả tìm kiếm :
Một cách có thể là sử dụng công cụ Visual Studio Spy ++ .
Hãy thử xem:
- Chạy công cụ (đối với tôi, nó tại
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
hoặc sử dụngspyxx.exe
để giám sát các quy trình 32 bit)- Trong thanh menu, chọn Spy -> Nhật ký tin nhắn ... (hoặc nhấn Ctrl+ M)
- Kiểm tra tất cả Windows trong hệ thống trong khung Windows bổ sung
- Chuyển sang tab Tin nhắn
- Nhấp vào Xóa tất cả nút
- Chọn
WM_HOTKEY
trong hộp danh sách hoặc kiểm tra Bàn phím trong Nhóm tin nhắn (nếu bạn ổn với tiếng ồn tiềm năng hơn)- Nhấp vào nút OK
- Nhấn phím nóng trong câu hỏi ( ví dụ Win+ R)
- Chọn
WM_HOTKEY
dòng trong cửa sổ Tin nhắn (Tất cả Windows) , nhấp chuột phải và chọn Thuộc tính ... trong menu ngữ cảnh- Trong hộp thoại Thuộc tính thư , bấm vào liên kết Xử lý cửa sổ (đây sẽ là tay cầm cho cửa sổ nhận tin nhắn)
- Nhấp vào nút Đồng bộ hóa trên hộp thoại Thuộc tính Cửa sổ . Điều này sẽ hiển thị cửa sổ trong treeview cửa sổ Spy ++ chính.
- Trên hộp thoại Thuộc tính cửa sổ , chọn tab Quy trình
- Nhấp vào liên kết ID tiến trình . Điều này sẽ cho bạn thấy quá trình (Trong trường hợp Win+ của tôi :)R
EXPLORER
WM_HOTKEY
thông báo trong Nhật ký tin nhắn sau khi nhấn phím nóng, bạn có thể cần chạy phiên bản Spy ++ 32 bit .
Điều này có lẽ đã được trả lời trên Stack Overflow trong chuỗi này:
Tìm hiểu quá trình đăng ký một phím nóng toàn cầu? (API Windows)
Đây là câu trả lời của Pauk :
Câu hỏi của bạn đã thu hút sự quan tâm của tôi, vì vậy tôi đã thực hiện một chút đào và trong khi, thật không may, tôi không có câu trả lời thích hợp cho bạn, tôi nghĩ tôi muốn chia sẻ những gì tôi có.
Tôi đã tìm thấy ví dụ này về việc tạo móc bàn phím (bằng Delphi) được viết vào năm 1998, nhưng có thể biên dịch được trong Delphi 2007 với một vài điều chỉnh.
Đó là một DLL với một lệnh gọi
SetWindowsHookEx
đi qua chức năng gọi lại, sau đó có thể chặn các nét chính: Trong trường hợp này, nó tự mày mò để giải trí, thay đổi con trỏ sang phải, v.v. Một ứng dụng đơn giản sau đó gọi DLL và báo cáo lại kết quả của nó dựa trên một sự kiện TTimer. Nếu bạn quan tâm tôi có thể đăng mã dựa trên Delphi 2007.Nó được ghi chép và bình luận tốt và bạn có khả năng có thể sử dụng nó như là một cơ sở để tìm ra nơi mà một phím bấm đang diễn ra. Nếu bạn có thể xử lý ứng dụng đã gửi các nét chính, bạn có thể theo dõi nó theo cách đó. Với cách xử lý đó, bạn có thể có được thông tin bạn cần khá dễ dàng.
Các ứng dụng khác đã thử xác định các phím nóng bằng cách đi qua Phím tắt của chúng vì chúng có thể chứa phím tắt, đây chỉ là một thuật ngữ khác của phím nóng. Tuy nhiên, hầu hết các ứng dụng không có xu hướng thiết lập thuộc tính này để nó có thể không trả lại nhiều. Nếu bạn quan tâm đến tuyến đường đó, Delphi có quyền truy cập vào
IShellLink
giao diện COM mà bạn có thể sử dụng để tải một lối tắt lên và lấy phím nóng của nó:uses ShlObj, ComObj, ShellAPI, ActiveX, CommCtrl; procedure GetShellLinkHotKey; var LinkFile : WideString; SL: IShellLink; PF: IPersistFile; HotKey : Word; HotKeyMod: Byte; HotKeyText : string; begin LinkFile := 'C:\Temp\Temp.lnk'; OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL)); // The IShellLink implementer must also support the IPersistFile // interface. Get an interface pointer to it. PF := SL as IPersistFile; // Load file into IPersistFile object OleCheck(PF.Load(PWideChar(LinkFile), STGM_READ)); // Resolve the link by calling the Resolve interface function. OleCheck(SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI)); // Get hotkey info OleCheck(SL.GetHotKey(HotKey)); // Extract the HotKey and Modifier properties. HotKeyText := ''; HotKeyMod := Hi(HotKey); if (HotKeyMod and HOTKEYF_ALT) = HOTKEYF_ALT then HotKeyText := 'ALT+'; if (HotKeyMod and HOTKEYF_CONTROL) = HOTKEYF_CONTROL then HotKeyText := HotKeyText + 'CTRL+'; if (HotKeyMod and HOTKEYF_SHIFT) = HOTKEYF_SHIFT then HotKeyText := HotKeyText + 'SHIFT+'; if (HotKeyMod and HOTKEYF_EXT) = HOTKEYF_EXT then HotKeyText := HotKeyText + 'Extended+'; HotKeyText := HotKeyText + Char(Lo(HotKey)); if (HotKeyText = '') or (HotKeyText = #0) then HotKeyText := 'None'; ShowMessage('Shortcut Key - ' + HotKeyText); end;
Nếu bạn đã có quyền truy cập vào Safari Books Online , có một phần hay về cách làm việc với các phím tắt / liên kết shell trong Hướng dẫn dành cho nhà phát triển Borland Delphi 6 của Steve Teixeira và Xavier Pacheco. Ví dụ của tôi ở trên là một phiên bản bị đánh cắp từ đó và trang web này .
Mong rằng sẽ giúp!