2012-07-08 56 views
2

我試圖在我的應用程序中發送正確的ALT + C。用PostMessage發送正確的ALT + C

我試着做以下幾點:

PostMessage(hWindow, WM_KEYDOWN, (IntPtr)0x0043, (IntPtr)0x0012); 
Delay(1000); 
PostMessage(hWindow, WM_KEYUP, (IntPtr)0x0043, (IntPtr)0x0012); 

PostMessage(hWindow, WM_KEYDOWN, (IntPtr)0x0043, (IntPtr)0x0001); 
Delay(1000); 
PostMessage(hWindow, WM_KEYUP, (IntPtr)0x0043, (IntPtr)0x0001); 

,但它不正確。我應該如何使用它?

+2

您無法使用PostMessage僞造鍵盤狀態,您的程序將看不到按住ALT鍵。 SendInput是必需的,它打破了只針對一個窗口的選項。通常會有一些其他消息響應ALT + C按鍵生成,通常是WM_COMMAND。假一個。 – 2012-07-08 17:05:16

+0

但是我需要把它發送給程序在後臺... – cadi2108 2012-07-08 18:08:10

+0

是的,當然,這就是每當他們問這個問題時說什麼。但是程序總是編寫和測試,期望它們在處理鍵盤輸入時處於前臺。當他們不是時,他們工作不好。有一個程序員可以幫助你修復程序,我們無法幫你找到他。 – 2012-07-08 18:58:43

回答

2

是的,可以使用PostMessage。我使用了Spy ++程序(它在Visual Studio裏面,或者你可以下載它)http://mdb-blog.blogspot.com/2010/11/microsoft-spy-or-spyxx-for-download.html)我使用Notepad.exe和Spy ++,並使用Function FindWindow來處理這個記事本。然後,我使用Spy-> LogMessages,在Tab Messages中清除了所有內容,並保留複選框鍵盤,並在輸出中檢查了原始消息參數。

然後在記事本中,我按下了alt + 1,然後我從窗口消息中記下了數值。我現在知道,在哪裏使用WM_KEYDOWN,WM_KEYUP,WM_SYSKEYUP等和值lParam,wParam。

我的功能:

public void PressKeyWithAlt(uint key, uint lParamDown, uint lParamUp) 
    { 
     PostMessage(hWindow, WM_KEYDOWN, VK_CONTROL, 0x001D0001); 
     PostMessage(hWindow, WM_KEYDOWN, VK_MENU, 0x21380001); 
     PostMessage(hWindow, WM_KEYDOWN, key, lParamDown); 
     Delay(1000); 
     PostMessage(hWindow, WM_KEYUP, key, lParamUp); 
     PostMessage(hWindow, WM_SYSKEYUP, VK_CONTROL, 0xE01D0001); 
     PostMessage(hWindow, WM_KEYUP, VK_MENU, 0xC1380001); 
    } 

和例如用於ALT + 1

PressKeyWithAlt(VK_1, 0x20020001, 0xE0020001); 

謝謝所有幫助。

+0

你好,我做了你所做的,但它不工作。這裏我的問題在stackoverflow http://stackoverflow.com/questions/25659399/altkey-not-working-with-postmessageuse32-dl​​l如果你能幫助我,我將非常感激。 – 2014-09-04 07:17:56

2

它們交錯起來,像

alt down 
c down 
delay 
c up 
alt up 
+0

但是alt的哪個鍵是正確的?因爲兩個選項0x0001和0x0012都不起作用。 – cadi2108 2012-07-08 16:33:53

1

嘗試發送WM_SYSKEYDOWNWM_SYSKEYUP消息來代替。當F10或ALT +某個鍵被按下並釋放時,它們會生成。