public class sendKeys {
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr, lParam);
public static void sendKeystroke(ushort k)
{
const uint WM_KEYDOWN = 0x0100;
const uint WM_SYSCOMMAND = 0x018;
const uint SC_CLOSE = 0x053;
IntPtr WindowToFind = FindWindow(null, "processname");
IntPtr result3 = SendMessage(WindowToFind, WM_KEYDOWN, ((IntPtr)k), (IntPtr)0);
}
}
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646280%28v=vs.85%29.aspx 我可以在上面的页面中看到,lParam 参数应该包含我想要的所有参数发送,以比特为单位。例如,如果我想为 ScanCode 发送一个“0x2D”值,我应该怎么做?
MSDN 页面告诉您lParam每个参数要使用哪些位。您需要做的就是进行一些位移来组装lParam:
uint repeatCount = 0;
uint scanCode = 0x2D;
uint extended = 0;
uint context = 0;
uint previousState = 0;
uint transition = 0;
// combine the parameters above according to the bit
// fields described in the MSDN page for WM_KEYDOWN
uint lParam = repeatCount
| (scanCode << 16)
| (extended << 24)
| (context << 29)
| (previousState << 30)
| (transition << 31);
Run Code Online (Sandbox Code Playgroud)