思不磕网-你身边的文案专家

思不磕网-你身边的文案专家

软件如何调用系统键盘

59

一、使用 `osk.exe` 调用系统软键盘

通过进程启动

使用 `System.Diagnostics.Process` 类启动 `osk.exe` 来打开系统软键盘。需检查进程是否已运行,避免重复启动或崩溃。

```csharp

using System.Diagnostics;

Process kbpr = new Process();

kbpr.StartInfo.FileName = "osk.exe";

kbpr.StartInfo.UseShellExecute = false;

kbpr.StartInfo.RedirectStandardInput = true;

kbpr.StartInfo.RedirectStandardOutput = true;

kbpr.StartInfo.CreateNoWindow = true;

kbpr.Start();

// 发送按键

kbpr.StandardInput.WriteLine("a"); // 输入字符 'a'

kbpr.StandardInput.Flush();

// 关闭软键盘

if (!kbpr.HasExited)

{

kbpr.Kill();

}

```

注意事项

- 该方法仅适用于Windows系统,且需管理员权限运行。

- 需处理异常情况,如进程不存在或已被关闭。

二、使用 Windows API 函数 `SendInput`

通过调用 `SendInput` 可模拟按键输入,适用于需要精确控制输入的场景。

```csharp

using System;

using System.Runtime.InteropServices;

class Program

{

[DllImport("user32.dll")]

static extern bool SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

[StructLayout(LayoutKind.Sequential)]

struct INPUT

{

public uint type;

public MOUSEINPUT mi;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]

public INPUT[] iiInputs;

public uint cbSize;

}

[StructLayout(LayoutKind.Sequential)]

struct MOUSEINPUT

{

public uint mouseData;

public int dx;

public int dy;

public uint mouseState;

public uint dwFlags;

public IntPtr time;

public IntPtr dwExtraInfo;

}

static void Main()

{

// 模拟按下 'a' 键

INPUT[] inputs = new INPUT

{

new INPUT

{

type = 1, // INPUT_KEYBOARD

iiInputs = new INPUT

{

new INPUT

{

mouseData = 0,

dx = 0,

dy = 0,

mouseState = 0,

dwFlags = 0,

time = 0,

dwExtraInfo = 0

}

},

cbSize = Marshal.SizeOf(typeof(INPUT))

}

};

SendInput(1, inputs, Marshal.SizeOf(typeof(INPUT)));

// 模拟释放 'a' 键

inputs.iiInputs.mouseState = 0x0002; // KEYEVENTF_KEYUP

SendInput(1, inputs, Marshal.SizeOf(typeof(INPUT)));

}

}

```

优点:

跨平台(Windows、Linux、macOS),无需额外权限。

三、使用第三方库

WinCC自带软键盘

在工业控制领域,WinCC 提供了 `TouchInputPC.exe` 可执行程序,支持通过参数控制是否显示数字小键盘或全键盘。

```bash

C:\Program Files (x86)\Common Files\Siemens\PTTouchInput 64位系统\TouchInputPC.exe -NoInfo -NumPadOn

```

适用于需要与WinCC系统集成的场景。

其他库

- AutoHotkey:

脚本语言,可模拟按键输入,适合自动化测试。

- Rust的`robotgo`库:支持Windows、macOS和Linux,功能强大但需编译运行。

四、注意事项

权限问题:调用系统级工具(如 `osk.exe`)通常需管理员权限。

兼容性:`osk.exe` 在Windows 10及以上版本中表现稳定,但其他方法需根据目标系统调整。

安全性:通过 `SendInput` 模拟输入需谨慎使用,避免被系统拦截或安全软件误判。

根据具体需求选择合适的方法,若需跨平台且控制精细,推荐使用 `SendInput` 或第三方库;若需简单调用且局限于Windows,`osk.exe` 是便捷的选择。