我试图使用PostMessage()函数发送大写字母或符号(!@#等)。
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
我试着同时发送shift和我想发送的大写字母,但似乎不起作用。
public const uint WM_KEYUP = 0x0101;
public const uint WM_KEYDOWN = 0x100;
void function()
{
Keys key = Keys.A;
Keys shift = Keys.ShiftKey;
PostMessage(process.MainWindowHandle, WM_KEYDOWN, (IntPtr)shift, IntPtr.Zero);
PostMessage(process.MainWindowHandle, WM_KEYDOWN, (IntPtr)key, IntPtr.Zero);
PostMessage(process.MainWindowHandle, WM_KEYUP, (IntPtr)shift, IntPtr.Zero);
PostMessage(process.MainWindowHandle, WM_KEYUP, (IntPtr)key, IntPtr.Zero);
}
试试这个而不是使用WM_KEYDOWN和WM_KEYUP。
public const uint WM_CHAR = 0x0102;
...
PostMessage(process.MainWindowHandle, WM_CHAR, (IntPtr)'A', IntPtr.Zero);
完整的解决方案。创建一个C# Console App (我的是.NET Framework 4.7.2)
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace PostMessageTest
{
class Program
{
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
public const uint WM_CHAR = 0x0102;
public static void function()
{
IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
Console.WriteLine("Sending Keys...");
PostMessage(handle, WM_CHAR, (IntPtr)'A', IntPtr.Zero); // 0x41
}
static void Main(string[] args)
{
function();
Console.Read();
}
}
}