1.Windows Api

什么是Windows Api 额、、、就是Windows上的Api 那什么又是Api?这就不过多解释了 自己百度吧

如果你用C++做过Windows程序 那对于Api肯定不会陌生了

才接触到C#不久的时候就感叹C#的强大 不得不说确实封装了很多东西进去 在写一般的程序的时候几乎不用调用任何其他的东西 就用.Net提供的类库就能完成 在那之前我用过VB6在没有接触到.Net前 我一直觉得VB6是个很风骚的东西 简单方便 即便VB6很简单方便 但是很多时候 还是不得不借助WinApi来完成一些程序 比如要让窗体置顶显示的时候需要调用SetWindowPos函数 需要获取鼠标在屏幕上的坐标的时候需要调用GetCursorPos函数 然而在C#中已经封装进去直接 this.TopMost = true 就能让窗体置顶显示 Control.MousePosition 就能获取鼠标的屏幕坐标 真是很方便

那么WinApi究竟是个什么东西 其实说白了 就是Windows提供出来的一些函数供开发者调用 而Windows自身也需要去调用那些函数才能正常的运作

这么来举例子吧 假设作为一个操作系统而言 那么他的主要功能就是处理用户的文件 比如用户要新建一个文件 修改或者删除这个文件 那么用户就输入一个命令 然后去删除或者添加一个文件 而添加或者删除某个文件的时候 操作系统必然会有一个函数去处理 而用户输入的命令就好比是函数的参数 比如用户输入:

-del 'c:\123.txt' 回车
然后系统检测到你输入的是del命令表示是要删除一个文件 而后面的就是你要删除的文件 那么系统可能就会去调用在开发系统的时候写好的一个函数 假设是这样的 DeleteFile("C:\123.txt") 那么这个函数就会去删除这个文件 而至于这个文件具体怎么被删除的 得去问开发操作系统的人是怎么写的那个函数 而对于一个程序猿来说 就是负责去调用这些操作系统所提供出来的函数 然后将它们组合成一个有意义的程序 只是大部分时候 这些函数可能已经被封装到语言中去了 比如在C#中需要删除一个文件我们只需要:
System.IO.File.Delete("C:\\123.txt");
这样就可以删除这个文件了 在.Net的类库中 确实做了很多东西的封装 但就不代表封装了所有你想要的一切 有时候我们也不得不自己去调用Windows上的一些函数来完成某一项有特殊需求的程序 比如现在写个程序 列出当前桌面上所有窗体的名字 又或者现在要写一个程序 但是我不喜欢四四方方的窗体 我希望我的窗体是圆形的  这个时候就需要去调用Windows提供出来的函数了 比如现在想要知道桌面上有那些窗体 对于我们的程序而言他是不会知道的 但是Windows是知道的 因为我们的程序都是运行在Windows中的 你说他知道不知道?所以Windows也提供了一些函数可以让你知道现在桌面有那些窗体

到了这里 估计你也大概知道了怎么回事 其实说白了 就是调用函数而已 但是重点是 哪里去调用这些函数 通常情况下 常用的就三个

  1. user32.dll 这个是用的最多的 里面有许多用户层面上的函数比如经常用的MessageBox(其实C#中的MessageBox.Show)也是调用的MessageBox函数 不信你自己去反编译C#中MessageBox类的代码在n多Show方法中都会调用一个私有的ShowCore方法 而里面则调用的是SafeNativeMethods.MessageBox方法 SafeNativeMethods 是一个Internal关键字修饰的一个类 里面是大量的Win32Api这里就不多说了 自己去反编译看
  2. gdi32.dll 看名字就直达了gdi 里面有许多绘图相关的函数如DrawText(C#里面的Graphics.DrawXXX 估计也是调用的这些函数 这个我就没有去看了 估计应该是)
  3. kernel32.dll 看名字就知道了 很风骚的一个东西 里面涉及到了很多内核相关的函数 比如你要写外挂 修改内存的时候 就会用到里面的函数

这三个是最常用的 这三个文件就在Windows的系统目录下C:\windows\system32\这个里面:

其中user32是最常用的

那么 现在的问题是要怎么用里面的函数 或者说我怎么知道里面有什么函数 在或者 我怎么知道当我需要某项功能的时候去调用那个函数 这个在下一篇再说 这里就暂时先介绍一下Windows Api

在后面的几篇文章中 主要列举一些常用的Api的使用 Windows提供的函数很多 光user32里面就有几千个函数 所以什么时候需要用什么函数 得自己去查 当然也有一些手册比如[新编Windows Api参考大全]


这个是中文版的 不过我很是不喜欢 因为那些括号逗号什么的全是中文的符号 有时候想复制到代码里面还得手动改 说的是大全 其实这个里面没有多少函数可以查 不过一些很常见的里面还是有的 或者直接msdn或者百度 不过一般情况下 你所查找到的函数签名都是C++的语法格式 因为这些函数也本应该就是C++写的 如果你不懂的话 我也只能说习惯就好 看多了就知道是什么了 下载连接我也不上了 百度一大堆

一般这里面找不到的话 就直接百度吧 百度百科搜索函数名基本都找得到的 或者去msdn 不过有个比较不错的地方 http://www.pinvoke.net 这是一个不错的地方 很多都可以在这里查到 而且你也不用纠结你不会C++的语法 因为查出来的结果 基本都会给你显示在C#中的声明方式...

不过我建议如果真的会经常使用到 还是安装一个离线版本的MSDN

里面东西比较全 按照图片里面标题栏里面的名字百度一下估计就能找到下载地址 东西还是挺大的 - -!、、不要被英文给吓到了 其实英语还是挺简单的啊 二十六个字母我全都会


添加时间:2014-04-01 04:01:08 编辑时间:2016-11-09 23:35:45 阅读:998 
C#Windows编程 C#Win32
还没有人留言 要不你来抢一个沙发?
  • 编写评论

      我觉得区分大小写是一个码农的基本素质
[访问统计] 今天:71 总数:151774 提示:未成年人 请在大人陪同下浏览本站内容 还有:世界上最帅的码农 -> 石头 RSS:http://st233.com/rss Powered by -> Crystal_lz