1 / 20

Visual Basic 程式設計

Visual Basic 程式設計. 講師:戴志華 hana@ arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所. 第十八章 呼叫 Windows API. Windows API. 一堆以C語言寫成的函式庫 , 功能強大 , 應有盡有 Windows 作業系統的一部份 透過 API 與 O.S 溝通. 應用程式. Application Programming Interface. O.S. Hardware. Where is Windows API. 在作業系統的動態連結程式庫 (*.DLL) EX:

sebastien
Download Presentation

Visual Basic 程式設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual Basic 程式設計 講師:戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所

  2. 第十八章 呼叫Windows API

  3. Windows API • 一堆以C語言寫成的函式庫, 功能強大, 應有盡有 • Windows作業系統的一部份 • 透過API與O.S 溝通

  4. 應用程式 Application Programming Interface O.S Hardware

  5. Where is Windows API • 在作業系統的動態連結程式庫 (*.DLL) • EX: Gdi32.dll  圖形周邊設備介面 API Netapi32.dll 32位元網路 API Winmm.dll Windows多媒體 API

  6. 宣告 API 函式 • Declare Function VB函式 Lib “DLL名” [Alias “API函式名”] (參數列) As 傳回值型態 • Declare Sub VB函式 Lib “DLL名” [Alias “API函式名”] (參數列)

  7. 宣告 API 函式(cont’d) • Declare Function HideCaret Lib “user32” Alias “HideCaret” (ByVal hwnd as Long) As Long Dim x as Integer x=HideCaret(text1.hwnd)

  8. 宣告 API 函式(cont’d) • 使用API檢視員 • 檔案/載入文字檔, 選取WIN32API.TXT • (加快)將文字檔轉換成資料庫格式 • API 類型宣告(Declares) 型態(Types) 常數(Constants)

  9. 範例一:取消關閉視窗功能 • GetSystemMenu • DeleteMenu

  10. 範例一:取消關閉視窗功能(cont’d) • Public Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (ByVal hwnd As Long, ByVal bRevert As Long) As Long • Public Declare Function DeleteMenu Lib "user32" Alias "DeleteMenu" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

  11. 範例一:取消關閉視窗功能(cont’d) • Private Const MF_BYCOMMAND = &H0& • Public Const MF_BYPOSITION = &H400& Private Const SC_MAXIMIZE = &HF030 Private Const SC_RESTORE = &HF120Private Const SC_SIZE = &HF000Private Const SC_MOVE = &HF010Private Const SC_MINIMIZE = &HF020Private Const SC_CLOSE = &HF060

  12. 範例一:取消關閉視窗功能(cont’d) • Dim hMenu As Long, Success As Long hMenu = GetSystemMenu(Me.hWnd, 0) '禁止還原按鈕Success = DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND) '禁止改變大小Success = DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND) '禁止最大化Success = DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND) '禁止最小化Success = DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND) '禁止關閉Success = DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) '禁止移動Success = DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND) 

  13. 範例二:圖形介面功能表 • 利用API檢視員加入GetMenu, GetSubMenu, GetMenuItemId, SetMenuItemBitMaps, MF_BITMAP, and MF_BYPOSITION

  14. 範例二:圖形介面功能表(cont’d) • Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long • Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long • Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long • Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long • Private Const MF_BITMAP = &H4& • Private Const MF_BYPOSITION = &H400&

  15. 範例二:圖形介面功能表(cont’d) • Dim hMenu, hSubMenu, MenuId As Long • Dim Pic(3) As Picture • Private Sub Form_Load() • Set Pic(0) = LoadPicture(App.Path & "\01.bmp") • Set Pic(1) = LoadPicture(App.Path & "\02.bmp") • hMenu = GetMenu(Me.hwnd) • hSubMenu = GetSubMenu(hMenu, 0) • SetMenuItemBitmaps hSubMenu, 2, MF_BYPOSITION, Pic(0).Handle, 0 • SetMenuItemBitmaps hSubMenu, 3, MF_BYPOSITION, Pic(0).Handle, Pic(1).Handle • End Sub

  16. 範例二:圖形介面功能表 • Private Sub mm3_Click() • mm3.Checked = True • End Sub

  17. 範例三:得知已開機時間 • GetTickCount • Private Declare Function GetTickCount Lib "kernel32" () As Long • Private Sub Command1_Click() • MymSec = GetTickCount() • MyDay = MymSec \ 86400000 • MyHour = MymSec \ 3600000 Mod 24 • MyMin = MymSec \ 60000 Mod 60 • MySec = MymSec \ 1000 Mod 60 • MsgBox "已經開機:" & MyDay & "天 " & MyHour & "小時 " & MyMin & "分 " & MySec & "秒" • End Sub

  18. 範例四:清除資源回收桶 • SHEmptyRecycleBinA • Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hWnd As Long, ByVal pszRootPath As String, ByVal flags As Long) As Long • SHEmptyRecycleBin 0, vbNullstring, 0 • SHEmptyRecycleBin 0, "E:\", 0

  19. 範例四:清除資源回收桶(cont’d) • Flags • 1:不要清除的對話框 • 2:不顯示刪除進行對畫框 • 4:不發出資源回收統刪除事件的聲音。

More Related