2011-06-20 84 views
5

Tôi đang cố gắng tạo một kích hoạt bàn phím cho ứng dụng WinForm của mình, gọi phím tắt Windows + # (# = một phím số) để khởi chạy phiên bản mới của ứng dụng trong khe thứ n thanh tác vụ.SendKeys.Send và Windows Key

Ví dụ, tôi muốn chạy Photoshop, nằm trong khe đầu tiên trên thanh tác vụ của tôi.

WinKey+1 

Tôi đã nghe nói về thay thế CTRL + ESC, nhưng mã bên dưới không hoạt động.

SendKeys.Send("^{ESC}1") 

Mọi phương án thay thế khác? Tôi có cần phải chạy một tập tin thực thi cho điều này?

Cảm ơn! :)

Trả lời

11

CTRL+ESC không mô phỏng phím WIN, nó chỉ gọi trình đơn bắt đầu.

Một chút P/Invoke luôn làm cho mọi người hạnh phúc:

using System.Runtime.InteropServices; 
using System.Windows.Forms; 

static class KeyboardSend 
{ 
    [DllImport("user32.dll")] 
    private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 

    private const int KEYEVENTF_EXTENDEDKEY = 1; 
    private const int KEYEVENTF_KEYUP = 2; 

    public static void KeyDown(Keys vKey) 
    { 
     keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0); 
    } 

    public static void KeyUp(Keys vKey) 
    { 
     keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); 
    } 
} 

Và bạn gọi nó theo cách này:

KeyboardSend.KeyDown(Keys.LWin); 
KeyboardSend.KeyDown(Keys.D4); 
KeyboardSend.KeyUp(Keys.LWin); 
KeyboardSend.KeyUp(Keys.D4); 

Tested, nó hoạt động. Chúc vui vẻ!

+0

Cảm ơn bạn! Bạn đã sử dụng WinKey + 4 trong ví dụ của mình. Để thay đổi nó thành WinKey + 1, chỉ cần thay đổi Keys.D4 thành Keys.D1. Cảm ơn bạn lần nữa! :) – demijnzia

Các vấn đề liên quan