2011-06-20 76 views
5

我正在嘗試爲我的WinForm應用程序製作一個鍵盤觸發器,用於調用Windows鍵+#(#=數字鍵)快捷鍵,該快捷鍵在第n個插槽中啓動應用程序的新實例任務欄。SendKeys.Send和Windows鍵

例如,我想運行Photoshop,它位於我的任務欄的第一個插槽中。

WinKey+1 

我聽說過CTRL + ESC的替代方案,但下面的代碼不起作用。

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

其他選擇?我是否需要爲此運行批處理文件?

謝謝! :)

回答

11

CTRL+ESC不模擬WIN鍵,它只是調用開始菜單。

的P/Invoke的一點總是讓每個人都高興:

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); 
    } 
} 

你這樣調用它:

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

測試,它的工作原理。玩的開心!

+0

謝謝!您在示例中使用了WinKey + 4。要將其更改爲WinKey + 1,只需將Keys.D4更改爲Keys.D1即可。 再次感謝! :) – demijnzia

相關問題