Tôi có một dự án Delphi 2007 chạy tốt trên Windos XP, Vista và "7" trong nhiều năm. Đó là một bản nâng cấp từ Delphi 5, do đó "MainFormOnTaskBar" là "false" theo mặc định (tôi không bao giờ thay đổi nó trong DPR). Trong trường hợp này, phím nóng toàn hệ thống làm việc "toàn hệ thống" với mã sau trong trình xử lý sự kiện OnCreate của biểu mẫu chính.Delphi 2007 - Phím nóng toàn hệ thống KHÔNG phải là "toàn hệ thống" nếu thiết lập "MainFormOnTaskBar: = True"
HotKey_xyz := GlobalAddAtom('Hotkey_xyz');
if NOT RegisterHotKey(Self.Handle, HotKey_xyz, MOD_CONTROL, VK_F12) then
ShowMessage('Unable to register Control-F12 as system-wide hot key') ;
(I have GlobalDeleteAtom() and UnregisterHotKey() in Form.OnDestroy as expected.)
Bây giờ, tôi cần Biểu mẫu để hiển thị nút riêng trên Thanh tác vụ, vì vậy tôi đặt "Application.MainFormOnTaskBar: = True" trong DPR. Điều này hoạt động như mong đợi. Tuy nhiên, điều này có tác dụng phụ mà Control-F12 KHÔNG hoạt động trên toàn hệ thống, nó hoạt động CHỈ NẾU ứng dụng của tôi có tiêu điểm (vì vậy, nó KHÔNG còn là "toàn hệ thống" nữa.)
Tôi đã tìm kiếm rộng rãi 'Net đã tìm thấy nhiều bài báo liên quan đến cách thức/tại sao "MainFormOnTaskBar" ảnh hưởng đến một số hành vi biểu mẫu con/dạng thức nhất định. Tuy nhiên, tôi đã không tìm thấy gì liên quan đến hiệu ứng của nó trên một vấn đề "Hệ thống toàn khóa nóng" mà tôi mô tả ở trên. Tôi đã thử nghiệm và kiểm tra lại ứng dụng của tôi với MainFormOnTaskBar được đặt thành true và false trong khi tất cả các ứng dụng khác vẫn giữ nguyên. Tôi có thể xác minh tích cực rằng vấn đề được mô tả ở trên với phím nóng toàn hệ thống liên quan đến cờ MainFormOnTaskBar.
Tôi sẽ đánh giá rất cao mọi hướng dẫn liên quan đến công việc. Tôi cần BOTH - một phím nóng toàn hệ thống và một biểu mẫu với nút riêng của nó trên thanh tác vụ.
Cảm ơn rất nhiều.
Bạn có thể sao chép nó bằng một dự án * mới * không? Tôi không thể .. –
Tôi cũng không thể tái tạo điều này. Bạn có thể đăng thêm mã không? (Và có thể thử thay đổi 'Self.Handle' thành' Application.Handle' trong cuộc gọi 'RegisterHotkey' trong thời gian chờ đợi? Thông điệp' WM_HOTKEY' sẽ vẫn nhận được biểu mẫu của bạn, bởi vì trình xử lý tin nhắn của ứng dụng không làm bất cứ điều gì với nó ; nó sẽ được gửi vào biểu mẫu của bạn giống như bình thường.) –
@KenWhite: nếu 'Application.Handle' được sử dụng để đăng ký khóa nóng, thì các thông điệp' WM_HOTKEY' S W KHÔNG được chuyển tới TForm, trực tiếp hoặc gián tiếp. Chúng sẽ được chuyển hướng đến 'TApplication' thay vào đó, vì vậy để nắm bắt những thông điệp đó, bạn phải sử dụng sự kiện' TApplication.OnMessage' và/hoặc phương thức 'TApplication.HookMainWindow()'. –