Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用。

主要使用的格式就是:

using System.Runtime.InteropServices;

namespace TestWinAPI1{    class Program    {        static void Main(string[] args)        {              Beep(100, 100);        }

        [DllImport("kernel32", CharSet = CharSet.Ansi)]        public static extern bool Beep(int frequery, int duration);     }}

其中的Beep就是Win API的调用,使用[DllImport("kernel32")]属性进行调用。

这个函数在MSDN中的原本定义是:

C++ BOOL WINAPI Beep(  __in  DWORD dwFreq,  __in  DWORD dwDuration);

我们想要调用BeepAPI,就必须:

1.将DWORD对应为C#中的int,相应的参数个数和位置设置正确

2.调用的函数名和WinAPI中的函数名一致

这样,我们在C#中就可以使用Win API对Windows进行操作。

这里几个资源是使用WindowsAPI不可或缺的:

MSDN:http://msdn.microsoft.com/en-us/library/ee663300(VS.85).aspx

推荐的入门教程:http://www.docin.com/p-4510006.html

使用WINAPI的难点:

1.C++中的各个数据类型如何对应到C#中?

使用C#中的那个数据类型对应那个C++的数据类型没有唯一的规定,但是应该站在内存使用的角度,选择内存占用大小一致。

当C++中存在指针的时候,我们可以使用ref来传递指针

2.如果C++中定义了数据结构如何操作?

我们也应该在C#中定义与之存储结构一致的数据结构

以下是用WinAPI 模拟鼠标定位和单机左键的操作:

代码

简要描述:

使用了mouse_event,GetCursorPos,SetCursorPos三个API

mouse_event((uint)MouseEventFlags.LEFTDOWN|(uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);

代表了单击左键的动作

int setRight = SetCursorPos(27, 881); 中的27,881是屏幕上的绝对位置

转载于:https://www.cnblogs.com/chenliyang/p/6552812.html

如何使用C#操作WinAPI相关推荐

  1. C# 使用WinApi操作剪切板Clipboard

    前言: 最近正好写一个程序,需要操作剪切板 功能很简单,只需要从剪切板内读取字符串,然后清空剪切板,然后再把字符串导入剪切板 我想当然的使用我最拿手的C#来完成这项工作,原因无他,因为.Net框架封装 ...

  2. 关于大型网站技术演进的思考

    关于大型网站技术演进的思考(一)--存储的瓶颈(1) 前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出 ...

  3. python winapi_python---win32gui、win32con、win32api:winAPI操作

    importsysfrom PyQt5.QtWidgets importQApplication, QWidgetfrom lianxi importUi_Formfrom PyQt5.QtCore ...

  4. c# 模拟window 操作鼠标|winapi

    View Code [DllImport("user32.dll", EntryPoint = "mouse_event", SetLastError = tr ...

  5. DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁

    之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因.是否还记得,我们分析了半天汇编才知道在线程中的死锁位置.如果对于缺乏调试经验的同学来说,可能发现这个位置有点麻烦.那么本文就介 ...

  6. DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子

    有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题.首先我们看一段比较经典的"DllMain中死锁"代码.(转载请指明出于breaksof ...

  7. 使用Windows的SHFileOperation外壳函数实现文件操作

    在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝.删除.移动等,该函数使用起来非常简单,它只有一个指向SHFI ...

  8. 菜鸟报告——多线程操作实例

    本学期首次课老师给的题目,刚开始我很懵,后来查阅网上资源才大概做出来了. 以下是详情,请各位大神多多指教!!! 题目:基于windows/visulstudio x64 实现多线程编程 要求: 1.每 ...

  9. 多线程信号量PV操作初探

    直接上源码吧: 在主线程中创建一个信号量mutex(注意参数,当前值和最大值都设为1),开启总计PRODUCER_COUNT份producer线程,不停地对该信号量mutex进行PV操作:再开启COM ...

最新文章

  1. 从语言学到深度学习NLP,一文概述自然语言处理
  2. 20165204 第十周课下作业补做
  3. vc 递归删除非空文件夹
  4. 如何快速直接从Web of Science下载文献,保存到Endnote
  5. 影场与属性访问器界面
  6. Python ——告白小程序,添加微信号(快来设置你的freestyle吧)
  7. 图计算-Pregel-Hama
  8. spring boot中使用ehcache
  9. java 参数理解,JAVA参数传递值传递的理解。
  10. 【资源下载】PCtoLCD2002 下载 资源分享 OLED取模软件
  11. python:实现培根密码算法(附完整源码)
  12. word中的方括号怎么删_word中怎么快速删除所有的括号及内容
  13. 人工智能导论(数据挖掘)
  14. STM32CubeMX的使用教程
  15. 老闪创业那些事儿(外传)——流程下的工具人
  16. 笔记本连网DNS服务器未响应,笔记本连接不到internet,显示DNS服务器未响应,该怎么办?win7系统。...
  17. Python绘制论文曲线图
  18. 专有网VPC---使用
  19. 电信“我的e家”手机无线上网
  20. 三星s4 android8,三星公布Android 8.0更新手机名单 Galaxy S7起步

热门文章

  1. untubu安装mysql_简单操作阿里云untubu服务器并且配置LAMP环境
  2. markdown一边写一边预览_MarkDown使用笔记
  3. ie的lan设置无法保存_Bios 无法识别 M2硬盘
  4. 使用Java FXGL构建太空游侠游戏
  5. 在Ubuntu 18.04中更改时区
  6. left+right /2_在C / C ++中使用Left Shift和Right Shift运算符
  7. scala方法中的变量_Scala变量,变量范围,字段变量,方法参数示例
  8. 1、Android-活动(下)
  9. html 标题栏小图标 ,锚点,视频插入,音乐插入
  10. 沈志勇-百度大数据引擎与分析预测