c# - 如何在 WPF 程序中不使用外部库(例如 InputSimulator)来模拟按键?
问题描述
我有一个 WPF 程序的扩展,我需要为它模拟一系列按键。WinForms 不能作为参考。我无法显示代码,但无论如何我的代码都与此无关。我只需要在最基本的级别模拟按键,以便程序认为用户正在输入。此外,不能使用外部库,因为扩展名是添加到数百个系统的单个 .DLL 文件,因此无法使用整个库。谢谢 - 伊桑
解决方案
您可以通过使用一种称为Platform Invoke(简称 P/Invoke)的技术来实现这一点。这允许更高级别的代码与运行它的平台使用的较低级别的代码交互。
在这种情况下,“高级代码”是您的 C# 代码,“平台”是 Windows 操作系统,“低级代码”是作为操作系统一部分的本机库。这些本机库包括执行发送键盘和鼠标输入等操作的代码,并且由于这些库是 Windows 本身的一部分,因此您不必将它们与您的程序打包在一起。
您要 p/invoke 的方法称为SendInput
. 它用于向活动程序发送键盘和鼠标消息,就像它们是由物理键盘或鼠标发送一样。查看pinvoke.net上的此页面以获取说明和有关如何实现该方法的示例。该站点是满足您所有 p/invoke 需求的良好通用资源。
推荐阅读
- java - 如何在 Java spring mvc 项目中从 FTP 服务器获取 pdf 文件作为 base64 编码格式?
- python - Python unrar 模块在读取 .rar 文件时抛出 MemoryError
- python-3.x - 在从表中抓取数据时将自定义字符串添加到字符串列表
- javascript - 如何在 React 组件的功能中使用 React 组件之外的 const 值
- c++ - CShellManager 初始化失败
- makefile - 使用 Makefile 将目标文件编译到发布和调试文件夹中
- firebase - firebase t.INTERNAL.registerService 不是部署时的函数(使用 vue)
- python - 为什么从 MATLAB 调用此 python 脚本时无法正常工作?
- flutter - Flutter的列表视图构建器中的“长列表”是什么意思
- php - 为什么 PHP fetch 不显示任何内容?