मुझे एहसास हुआ AutoIT कार्यक्षमता है कि मैं जरूरत है, इसलिए है source फ़ाइल sendKeys.cpp को देखा और इस कार्य के लिए निम्नलिखित सी ++ कोड स्निपेट मिला है, यह काफी आसान सी # में अनुवाद करने के लिए किया जाएगा:
scan = MapVirtualKey(vk, 0);
// Build the generic lparam to be used for WM_KEYDOWN/WM_KEYUP/WM_CHAR
lparam = 0x00000001 | (LPARAM)(scan << 16); // Scan code, repeat=1
if (bForceExtended == true || IsVKExtended(vk) == true)
lparam = lparam | 0x01000000; // Extended code if required
if ((m_nKeyMod & ALTMOD) && !(m_nKeyMod & CTRLMOD)) // Alt without Ctrl
PostMessage(m_hWnd, WM_SYSKEYDOWN, vk, lparam | 0x20000000); // Key down, AltDown=1
else
PostMessage(m_hWnd, WM_KEYDOWN, vk, lparam); // Key down
स्कैन कोड gener हो सकता है साथ MapVirtualKey
सी # अनुवाद पैदा:
public static void sendKey(IntPtr hwnd, VKeys keyCode, bool extended)
{
uint scanCode = MapVirtualKey((uint)keyCode, 0);
uint lParam;
//KEY DOWN
lParam = (0x00000001 | (scanCode << 16));
if (extended)
{
lParam |= 0x01000000;
}
PostMessage(hwnd, (UInt32)WMessages.WM_KEYDOWN, (IntPtr)keyCode, (IntPtr)lParam);
//KEY UP
lParam |= 0xC0000000; // set previous key and transition states (bits 30 and 31)
PostMessage(hwnd, WMessages.WM_KEYUP, (uint)keyCode, lParam);
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern uint MapVirtualKey(uint uCode, uint uMapType);
जुड़ा हुआ पोस्ट राज्यों के रूप में, कीस्ट्रोक्स भेजने के लिए SendMessage का उपयोग नहीं करते हैं, बजाय SendInput का उपयोग करें। http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx –
@RussC: धन्यवाद, लेकिन इसे SendMessage के साथ किया जाना चाहिए क्योंकि मैं एक विंडो को कुंजी भेजना चाहता हूं सक्रिय एक से। वास्तव में मुझे यह जानने की जरूरत है कि इस एलपीएआर को कैसे बनाया जाए। – Drahcir
मैंने नीचे अपना जवाब अपडेट कर दिया है। क्या आप स्पष्टीकरण दे सकते हैं कि आप SendMessage पर WM_KEYDOWN संदेश भेज रहे हैं? –