C#中调用user32.dll库的keybd_Event函数,操作键盘

keybd_event()的函数原型是:

void keybd_event(

byte bVk,          //虚拟键码

byte bScan,       //该键的硬件扫描码

dword dwFlags   //函数操作的各个方面的一个标志位集

dword dwExtraInfo  //与击键相关的附加的32位值

);

其中第三个参数有三种取值:

· 0:按下

· 1:扩展键

· 2:弹起

keybd_event(0x41, 0x1e, 0x0000, 0);   // 按下 a
keybd_event(0x41, 0x1e, 0x0002, 0);   // 弹起 a
keybd_event(0x42, 0x30, 0x0000, 0);   // 按下 b
keybd_event(0x42, 0x30, 0x0002, 0);   // 弹起 b
keybd_event(0x43, 0x2e, 0x0000, 0);   // 按下 c
keybd_event(0x43, 0x2e, 0x0002, 0);   // 弹起 c
keybd_event(0x43, 0x2e, 0x0000, 0);   // 按下 c
keybd_event(0x43, 0x2e, 0x0002, 0);   // 弹起 c

  

时间: 2024-10-26 20:35:25

C#中调用user32.dll库的keybd_Event函数,操作键盘的相关文章

C#调用user32.dll Win32的API函数

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace WindowsAPI { class CSharp_Win32Api { #region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以

Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Application 有何妙用: 5. MJ0011 关于 Native Application 的文章整理: 6. 互联网上其他关于 Native Application 的文章整理: 7. 小结: 1. 引子: 其实在好久以前就看了 MJ0011 翻译的那个<Native 应用程序详细>系列的文

JNI_Android项目中调用.so动态库

JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 参考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者介绍了如何使用Java代码调用DLL动态库中的C/C++方法,似乎已经是很久以前的做法了,遇到的错误笔者还未找到解决方案,但动态库着实是找到的,只是无法调用相应的方法.本篇博客来介绍一下如何在Android项目当中使用NDK生成.so动态链接库,并在程序中使用. 1. 在Eclipse中创建项目:T

SOE 中调用第三方dll

一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简单的步骤.官方的步骤,参考连接如下:点击我 但是在实际测试的过程中发现并不如官方的步骤如此简单.其中涉及一个非常重要的东西,就是强签名. 二.强签名密钥 在新建soe模板工程后,可以在工程目录下看到一个名为myKey.snk 文件.snk一言以蔽之,为了防止自己的应用程序被篡改,就是给自己的应用程序

在.net中调用Delphi dll的Pchar转换

Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是Delphi2007以前的版本编译的,则Pchar是Ansi类型:如果Delphi dll是Delphi2009以后的版本编译的,则Pchar是Unicode类型.请看以下实例. Ansi类型: [DllImport("my.dll")] [return: MarshalAs(Unmanage

使用ctypes在Python中调用C++动态库

使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #include <iostream> using namespace std; extern "C" { void greet() { cout << "hello python" << endl; } } 将上述的C++程序编译成动态链

boost在lambda表达式中调用占位符参数的成员函数的方法

boost中提供了lambda表达式的用法,但是lambda表达式的功能还不是很强大,在其中只能对lambda的占位符参数_1等使用最基本的操作符,如+-*/,可是很多时候如果传入的占位符参数是一个对象指针的话,我们可能想要调用这个类的成员函数. 我在开发中遇到了这个问题,需要在stl的算法中传入一个函数来调用对象的比较函数,因为感觉这样太麻烦,还需要重新定义一个函数,所以想起了lambda表达式,c++11的lambda表达式我倒是没试过,可是受项目开发环境所限,只能选择boost.但是我用的

Oracle数据库中调用Java类开发存储过程、函数的方法

Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL,除此之外,还可以用时下最流行的编程语言Java来做开发.随着对oracle的了解越来越多,越来越禁不住oracle的诱惑,oracle技术真的是一门很有趣的学问.之前,我在博客中总结了挺多有关SQL.PL/SQL的,但是对于oracle数据库中Java类的调用却没有总结,也是因为之前不太会,这会儿总

利用vs2010制作C语言 dll文件,并在其它程序中调用该dll文件

一.为什么需要dll 代码复用是提高软件开发 效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架, 如ATL.MFC等,它们都以源代码的形式发布.由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”.“白盒复用”的缺点 比较多,总结起来有4点. 暴露了源代码: 容易与程序员的“普通”代码发生命名冲突: 多份拷贝,造成存储浪费: 更新功能模块比较困难. 实际上,以上4点概括起来就是