Làm cách nào để tạo ứng dụng thực hiện tác vụ bằng phím tắt (Ứng dụng phải ẩn). Ví dụ: Hiển thị MessageBox khi người dùng nhấn Ctrl + Alt + W.Cách tạo lối tắt bàn phím trong cửa sổ gọi chức năng trong ứng dụng của tôi?
Trả lời
Một giải pháp sẽ được sử dụng interop và sử dụng API Win32 RegisterHotKey. Dưới đây là một ví dụ nhanh chóng và bẩn tôi chỉ cần đặt lại với nhau vì vậy nó không được thử nghiệm tốt và tôi không chắc chắn rằng không có tác dụng phụ không được giải thích, nhưng nó sẽ làm việc.
Đầu tiên đây là một đơn giản HotKeyManager
này sẽ chăm sóc của các interop cơ bản, cung cấp một cửa sổ ẩn để xử lý các thông điệp của Windows bản địa (WM_HOTKEY) được dịch sang một sự kiện .NET HotKeyPressed
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class HotKeyManager
{
public static event EventHandler<HotKeyEventArgs> HotKeyPressed;
public static int RegisterHotKey(Keys key, KeyModifiers modifiers)
{
int id = System.Threading.Interlocked.Increment(ref _id);
RegisterHotKey(_wnd.Handle, id, (uint)modifiers, (uint)key);
return id;
}
public static bool UnregisterHotKey(int id)
{
return UnregisterHotKey(_wnd.Handle, id);
}
protected static void OnHotKeyPressed(HotKeyEventArgs e)
{
if (HotKeyManager.HotKeyPressed != null)
{
HotKeyManager.HotKeyPressed(null, e);
}
}
private static MessageWindow _wnd = new MessageWindow();
private class MessageWindow : Form
{
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_HOTKEY)
{
HotKeyEventArgs e = new HotKeyEventArgs(m.LParam);
HotKeyManager.OnHotKeyPressed(e);
}
base.WndProc(ref m);
}
private const int WM_HOTKEY = 0x312;
}
[DllImport("user32")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
[DllImport("user32")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
private static int _id = 0;
}
public class HotKeyEventArgs : EventArgs
{
public readonly Keys Key;
public readonly KeyModifiers Modifiers;
public HotKeyEventArgs(Keys key, KeyModifiers modifiers)
{
this.Key = key;
this.Modifiers = modifiers;
}
public HotKeyEventArgs(IntPtr hotKeyParam)
{
uint param = (uint)hotKeyParam.ToInt64();
Key = (Keys)((param & 0xffff0000) >> 16);
Modifiers = (KeyModifiers)(param & 0x0000ffff);
}
}
[Flags]
public enum KeyModifiers
{
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8,
NoRepeat = 0x4000
}
Các chương trình sau một cửa sổ đơn giản tạo ứng dụng sẽ giữ biểu mẫu chính ẩn và trả lời các sự kiện quan trọng. Tôi không xử lý việc đóng ứng dụng và việc hủy đăng ký khóa nóng, bạn có thể xử lý điều đó.
using System;
using System.Windows.Forms;
namespace HotKeyManager
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
HotKeyManager.RegisterHotKey(Keys.A, KeyModifiers.Alt);
HotKeyManager.HotKeyPressed += new EventHandler<HotKeyEventArgs>(HotKeyManager_HotKeyPressed);
}
void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e)
{
MessageBox.Show("Hello");
}
protected override void SetVisibleCore(bool value)
{
// Quick and dirty to keep the main window invisible
base.SetVisibleCore(false);
}
}
}
Thêm phần này vào sự kiện KeyPress của mẫu của bạn:
if(e.KeyCode == (char)Keys.W && e.Modifiers == Keys.Control && e.Modifiers = Keys.Alt)
{
MessageBox.Show("I think this is a homework and that you should study instead of asking for an already cooked up answer on programming websites","Cheater");
}
Đó là câu trả lời sai. Bạn đã làm bài tập chưa? –
Có vẻ như tôi đã bỏ lỡ phần "ứng dụng phải ẩn". – Wildhorn
- 1. Tạo lối tắt bàn phím cho ứng dụng HTML5 của bạn?
- 2. Tắt phím tắt trợ năng trong ứng dụng .NET?
- 3. iOS 5: Làm cách nào để tắt bàn phím Emoji trong ứng dụng của tôi?
- 4. Cách thêm lối tắt bàn phím vào lệnh Team-> Add trong eclipse
- 5. Chức năng gọi trên cửa sổ mở
- 6. Android - Bàn phím không xuất hiện trong cửa sổ
- 7. Có lối tắt bàn phím cho 'Tạo sơ khai' trong VS 2010 không?
- 8. Cách dễ nhất để thêm lối tắt bàn phím chung trong Windows là gì?
- 9. Làm cách nào để đọc lối tắt bàn phím tùy chỉnh từ người dùng trong WPF?
- 10. Làm cách nào để gán lối tắt bàn phím cho macro VBA trong Outlook 2007?
- 11. Liên kết lối tắt bàn phím với lệnh trong kiểu xem trong WPF
- 12. Tạo lối tắt mới trong notepad ++
- 13. cygwin ssh phím tắt từ cửa sổ máy tính để bàn
- 14. Bất kỳ cách nào để tắt lời khuyên về lối tắt bàn phím Emacs?
- 15. Cách gán lối tắt bàn phím cho cấu hình chạy trong IntelliJ?
- 16. Cách tạo lối tắt ứng dụng web trên máy tính của người dùng theo chương trình?
- 17. Chức năng đóng cửa sổ trong Tkinter
- 18. Có lối tắt bàn phím để chuyển đến số dòng trong NetBeans không?
- 19. Cách tạo lối tắt cửa sổ để mở một dự án cụ thể?
- 20. Cách tạo lối tắt cho tab trong Console2?
- 21. Cửa sổ trình cài đặt có nên tạo biểu tượng lối tắt trên màn hình không?
- 22. Chức năng UITextField không có bàn phím
- 23. Có lối tắt nào để chuyển giữa các cửa sổ trong Xcode không?
- 24. Cách tạo trợ giúp F1 ở dạng cửa sổ bằng cách sử dụng C#
- 25. Phím tắt ứng dụng rộng - Java Swing
- 26. Bất kỳ triển khai tốt nào của lối tắt bàn phím kiểu Fogbugz?
- 27. Gán đoạn mã cho lối tắt bàn phím trong Visual Studio
- 28. Làm cách nào để biên dịch mã của tôi trong Eclipse bằng cách sử dụng phím tắt bàn phím
- 29. Trích xuất bố cục bàn phím từ cửa sổ
- 30. Sử dụng bàn phím "cửa sổ" bên ngoài trong Mac OS X
Bạn cần thêm thông tin về những gì bạn đang cố gắng hoàn thành. Công nghệ (winforms, wpf, vv). Ngoài ra câu hỏi của bạn dường như ngụ ý rằng nó phải là nhiệm vụ nền cố gắng để móc bàn phím, nhưng nó không phải là rõ ràng. –
Có, tôi muốn nó hoạt động trên nền. Và Winforms –