日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

vb.net 教程 2-13 Windows API 函数

發布時間:2023/12/10 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vb.net 教程 2-13 Windows API 函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版權聲明:本文為博主原創文章,轉載請在顯著位置標明本文出處以及作者網名,未經作者允許不得用于商業目的。

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 函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。