Làm cách nào để xác định tiến trình nào sở hữu một phím nóng trong Windows?


Câu trả lời:


46

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 Explorercó 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) .


31
HotKey explorer vặn vít khá tệ trong Windows 8 - khi khởi động, về cơ bản nó "ép" mọi phím nóng, khiến tất cả các loại vật lạ xảy ra, sau đó nó bị khóa và phải bị giết.
Nathan Ridley

2
@NathanRidley Ugh. Tôi ước tôi đọc bình luận của bạn trước. Đây là sự kết hợp kinh khủng với Win8 và Autohotkey. Kiểu bash bàn phím này cũng có thể gây ra một số thiệt hại nghiêm trọng.
VitalyB

10
KHÔNG sử dụng Hotkey Explorer trên Windows 10. Nó làm điều tương tự @NathanRidley đã đề cập. Chỉ cần tìm ra cách khó khăn.
Artem Russakovskii

5
Cũng khá rắc rối trên Windows 7. Nó đã chuyển độ phân giải màn hình chính của tôi thành 640x480 (thiết lập nhiều màn hình).
Costa

3
Tôi ước có một công cụ gần đây hơn như Hotkey Exporer hoạt động cho Windows 8 & 10
Flion 16/1/2016

57

Đ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:

  1. 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.exehoặc sử dụng spyxx.exeđể giám sát các quy trình 32 bit)
  2. Trong thanh menu, chọn Spy -> Nhật ký tin nhắn ... (hoặc nhấn Ctrl+ M)
  3. Kiểm tra tất cả Windows trong hệ thống trong khung Windows bổ sung
  4. Chuyển sang tab Tin nhắn
  5. Nhấp vào Xóa tất cả nút
  6. Chọn WM_HOTKEYtrong 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)
  7. Nhấp vào nút OK
  8. Nhấn phím nóng trong câu hỏi ( ví dụ Win+ R)
  9. Chọn WM_HOTKEYdò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
  10. 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)
  11. 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.
  12. Trên hộp thoại Thuộc tính cửa sổ , chọn tab Quy trình
  13. 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 :)REXPLORER

3
Đây là một câu trả lời tuyệt vời, nó là rất nhiều bước nhưng cung cấp thông tin chi tiết hoàn hảo. Lưu ý rằng bạn sẽ cần phải cài đặt SPY ++ bằng cách nào đó và bạn cần chạy phiên bản 64 bit trên PC 64 bit nếu không nó sẽ không hoạt động. Tôi nghĩ cách 'dễ nhất' để cài đặt SPY ++ là cài đặt Visual Studio 2017, hãy chắc chắn chọn tải trọng C ++. Đối với những người không phát triển thì đây có thể là một công việc hơi quá.
Roy T.

2
Đây là hoàn hảo. Xây dựng, nhưng hoàn hảo!
angensesen

16
Câu trả lời chính xác! Chỉ cần lưu ý rằng phiên bản Spy ++ 64 bit chỉ bắt được các tin nhắn cho các ứng dụng 64 bit , vì vậy nếu bạn không thấy WM_HOTKEYthô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 .
Dawid Ferenczy Rogožan

Liên kết nên được cập nhật đến trang web tài liệu mới . Đối với Visual Studio 2017, tải trọng yêu cầu duy nhất là " Các tính năng cốt lõi của Visual C ++ ". Ứng dụng hotkey cụ thể không được đăng nhập? Ví dụ: Ctrl + B trong MS Word sẽ làm cho văn bản in đậm.
Franklin Yu

Cám ơn bạn rất nhiều về điều này. Tôi HOÀN TOÀN phát hiện ra điều gì đã đánh cắp Ctrl Shift F từ tôi. (Đó là Razer Cortex). Một lưu ý khác là đôi khi spy ++ sẽ gặp sự cố khi bạn cố xem các thuộc tính. (Và sau đó bạn không thể thấy bất kỳ hook nào nữa cho đến khi khởi động lại.) Tôi đã có thể giải quyết vấn đề này bằng cách nhấp chuột phải, trước bước 9 và chọn "Dừng thông báo đăng nhập". Tại thời điểm đó, nó không còn bị sập khi tôi cố kiểm tra các thuộc tính. Cảm ơn một lần nữa!
Khale_Kitha

6

Đ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 IShellLinkgiao 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!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.