2011-06-07 68 views
1

如何使用Windows消息保持ALT鍵?使用Windows消息保持Alt鍵

是否有WM_KEYHOLD或類似的東西?

這是屏幕截圖的代碼,但我猜想一些東西是想念。我認爲我使用的關鍵代碼是不好的,對於0x70,它發送F1。併爲0x46它發送anoyying窗口聲音。

const uint WM_SYSKEYDOWN = 260; 
    const uint VK_MENU = 18;//virtual key code of Alt key 
    const uint VK_SNAPSHOT = 44;//virtual key code of Snapshot key 

    [DllImport("User32.Dll")] 
    public static extern long PostMessage(IntPtr hWnd, UInt32 wMsg, long wParam, long lParam); 

    [DllImport("user32.dll")] 
    public static extern IntPtr FindWindow(String sClassName, String sAppName); 

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] 
    public static extern IntPtr GetForegroundWindow(); 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     IntPtr hwnd = GetForegroundWindow(); 
     //PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, 1); 
     PostMessage(hwnd, WM_SYSKEYDOWN, VK_SNAPSHOT, 1); 
    } 
+0

這是隻爲你的應用程序,或者你想發送到整個系統? – 2011-06-07 15:46:46

回答

0

由DanielB鏈接的Docs引用lParam的第29位定義ALT狀態,您嘗試過嗎?

位29 - 上下文代碼。如果在鍵被按下時ALT鍵處於關閉狀態,則該值爲1;如果WM_SYSKEYDOWN消息發佈到活動窗口,因爲沒有窗口具有鍵盤焦點,所以它爲0。

+0

嘗試29,與1相同只是這樣做的anoyying窗戶的聲音,就像當你嘗試鍵入一個消息框 – user779444 2011-06-07 16:17:06

+0

忘記它,這是關鍵代碼的東西。我不知道什麼是正確的。我試圖把0x70,它發送F1。我試圖把0x46,這聽起來。 – user779444 2011-06-07 16:20:44

+0

@ user779444:位29實際上是0x10000000。大多數低位數字將簡單地告訴目標程序您重複按下了按鈕(最高爲0xFFFF) – Guvante 2011-06-07 16:35:13

0

在我的理解,應該足以讓WM_SYSKEYDOWN/WM_KEYDOWN。請參閱Docs

+0

嗯看起來不錯,但例子(在我的答案不起作用) – user779444 2011-06-07 16:00:24

+0

文檔中的例子甚至不工作 – user779444 2011-06-07 16:10:16

+0

你必須發送一個WM_KEYUP VK_SNAPSHOT我認爲。你想製作多個快照嗎?順便說一句。如果你想要一個窗口的屏幕截圖看看[託管Windows API](http://mwinapi.sourceforge.net/)和'ManagedWinapi.Windows.SystemWindow.Image' – DanielB 2011-06-07 16:17:49