版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

API(Application Programming Interface,应用程序编程接口)函数是提供给开发人员访问某个功能或者硬件的接口。通常情况下,API是封装在动态链接库(Dll文件)内的,
通俗来说,api函数相当于是个黑匣子,外部的开发人员通过调用提供的api函数而获得某些功能,而内部的开发人员也不用担心泄漏源代码,也能更好地控制外部开发人员访问的权限。

.net开发为什么还要调用api函数?
相对于vb6及之前版本,.net框架提供给了开发者很多功能,但是仍然有相当部分系统功能只能通过调用api完成。
我的理解:从本质上来说,.net框架也是调用的api,不过提供给了开发人员更为简便的方法,开发者只需要使用.net提供的函数就可以了。

如何知道系统提供哪些API函数?
一个方法是,在vb6中提供了api函数浏览器,实际可以把这个有用的东东拷贝使用。
有所区别的是数据类型不一样。
比如:vb6下的Long(这也是api中常见的类型,指针、句柄都用它)在vb.net中是Integer。
例如:禁用窗口关闭按钮相关的Api函数:
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
翻译到vb.net中应该是:
Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hwnd As Integer, ByVal bRevert As Integer)As Integer

其次,可以在网上搜索适合vb.net的相关api声明。

如何调用api函数
vb.net下提供了两种方法:
一是按照vb6及之前的方式:
  Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hwnd As Integer, ByVal bRevert As Boolean) As Integer

二是使用DllImport方式
    <DllImport("user32", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)>
    Private Shared Function GetSystemMenu(ByVal hwnd As Integer, ByVal revert As Integer) As Integer

End Function
使用此方式时应该注意
Imports System.Runtime.InteropServices
同时,“, CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True”并非必须的。

这里以禁用窗口的关闭按钮(X)为例:

新建一个窗口,上面放两个按钮。

定义API函数部分(第二种方式被我注释掉,可以把注释部分取消注释替换第一种方式):

Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hwnd As Integer, ByVal bRevert As Integer) As Integer
 
    '<DllImport("user32", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)>
    'Private Shared Function GetSystemMenu(ByVal hwnd As Integer, ByVal revert As Integer) As Integer
 
    'End Function
 
    Private Declare Function EnableMenuItem Lib "user32.dll" (ByVal menu As Integer, ByVal ideEnableItem As Integer, ByVal enable As Integer) As Integer
 
    '<DllImport("user32", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)>
    'Private Shared Function EnableMenuItem(ByVal menu As Integer, ByVal ideEnableItem As Integer, ByVal enable As Integer) As Integer
 
    'End Function
 
 
    Private Const SC_CLOSE As Integer = &HF060
    Private Const MF_BYCOMMAND As Integer = &H0
 
    Private Const MF_ENABLED As Integer = &H0
    Private Const MF_GRAYED As Integer = &H1
    Private Const MF_DISABLED As Integer = &H2
    Private Const MF_REMOVE = &H1000
按钮部分:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim result As Integer = GetSystemMenu(Me.Handle, 0)
        Dim result2 As Integer = EnableMenuItem(result, SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED)
    End Sub
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim result As Integer = GetSystemMenu(Me.Handle, 0)
        Dim result2 As Integer = EnableMenuItem(result, SC_CLOSE, MF_BYCOMMAND Or MF_ENABLED)
    End Sub
button1使关闭按钮禁用,button2恢复关闭按钮。

按下button1时候:

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看vb.net教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

vb.net 教程 2-13 Windows API 函数相关推荐

  1. Windows API函数速查

    http://blog.csdn.net/ghevinn/article/details/8213614 Windows API函数速查 1. API之网络函数 WNetAddConnection 创 ...

  2. 在C#中调用windows API函数

    Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用Windows ...

  3. Windows API 函数大全

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数  WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建 ...

  4. Windows API函数大全(方便查找)

    Windows API函数大全 目录 Windows API函数大全 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 ...

  5. WINDOWS API函数说明

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数  WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建 ...

  6. VBS调用Windows API函数

    Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog  »  程序设计  »  VBS调用Windows API函数 « 用VBS修改Windows用户密码 在VB中创建和使用 ...

  7. Python调用Windows API函数编写录音机和音乐播放器

    功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. 参考代码: . 运行界面:

  8. Windows API 函数SendMessage与PostMessage使用方法和常见的坑

    Windows API 函数中 SendMessage 与 PostMessage 用处很大,经常被程序员们使用.对老手们来说,了如知掌,但对新手来说,可能会遇到这样那样的问题.我作为一名老手中的新手 ...

  9. python ++++pywin32 Windows API函数大全(精心总结)

    调用windows API的方式其实有两种,第一种是通过第三方模块pywin32 安装:pip list : 查看是否已经安装 pywin32   pip install pywin32 Window ...

  10. Windows API函数大全

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

最新文章

  1. 这一年,信息技术领域上演的“断舍离”
  2. 2020年学什么计算机软件,2020年大学计算机软件专业排行榜
  3. php的session实现
  4. docker d盘_windows修改docker的默认存放位置
  5. caioj 1158 欧拉函数
  6. Java-Java5.0注解解读
  7. Py之Xlrd:Xlrd的使用方法总结(获取的sheet名字/sheet索引/sheet内容/数和列数、获取整行和整列的值(列表) 、指定单元格的内容/数据类型)之详细攻略
  8. printf()详解
  9. python数组切片教程_手把手numpy教程【二】——数组与切片
  10. 设置dns_网络速度缓慢怎么办?轻松一键修改DNS设置让网速提升五倍
  11. 专家:不仅人脸识别,信息验证、生物特征都不可靠
  12. MySQL入门之插入、删除、修改表数据
  13. 微博超话签到小工具v2.0 签到管理操作
  14. java同类型同字段名称对象赋值
  15. 教你轻松创建谷歌账号、谷歌邮箱!
  16. html显示vbs变量,VBS 读取 对象某属性已连接的变量的变量名
  17. 哔哩哔哩我来了,see goodbye 马总!!!
  18. idea安装findBugs 报idea运行项目报错Cannot run program
  19. python snmp-cmds get示例
  20. 【OJ每日一练】1029 - 字母密码

热门文章

  1. 票据通的支票管理的账户管理的对应账号支票已使用该怎么重新修改票据打印模板;
  2. ios6.x 插件介绍及常用源
  3. 这个游戏引擎开源了!
  4. Excel 中VBA脚本的简单应用
  5. 计算机485通讯原理,串口通信原理详解.ppt
  6. linux简介及安装使用
  7. c盘python27文件夹可以删除嘛_c盘哪些目录可以删除
  8. 如何使用proteus仿真
  9. matlab液体湿润模拟,【水文模型】01 三水源新安江模型
  10. lammps教程:boundary命令详解