易語言 Windows API 入門詳解


易語言 Windows API 入門詳解

序言

看到論壇上有很多新手朋友對API都不懂怎么使用,做為一個Windows 編程愛好者,如果不會用Windows系統提供給我們的編程接口,那將是一件非常遺憾的事,鑒於此,本文作者以自身體會為基礎,
結合易語言實例,深入淺出的講解API在易語言中的使用,希望對新手朋友有所幫助;

什么叫API?

API全稱為Application Programming interface,直譯的話可叫它“應用程序接口”。它是Windows開放給程序員的編程接口,使得在用戶級別下可以對操作系統進行控制,也就是一般的應用程序都需要調用API來完成某些功能,API說到底就是一系列的函數,我們可以把它理解為程序的子程序或
子過程,只不過它是系統本身提供給用戶在進行高級編程中供其程序使用的開放函數。

API能做什么?它起什么作用?

我們編寫的程序通過調用它來達到操作系統的目地,它是系統提供給我們的編程接口,一個很經典的
例子就是我們要通過調用API函數ExitWindowsEx來關閉系統,它還為各編程語言間的融會貫通架起了橋
梁。

我怎樣才知道我要的功能可以用某個API實現?

當你要實現的功能與系統的功能有關時都盡量假設可以用API辦到,首先你要知道一些常用的API的功
能,下面有提供一個API的文檔,你可以瀏覽地看一下,以后程序要實現某功能你可以在里面找,另外,互聯
網上是一個無限的知識庫,你可以問必應(www.bing.com),問Google,另外微軟還提供了一個知識庫叫"MSDN",你也可以查看。

易語言調用 Windows API 教程

要全面了解和使用API,我們先應該了解下動態鏈接庫(DLL)的調用機制,因為API其實就是封裝在DLL中的一系列函數,
了解DLL調用機制的最好辦法就是我們自己利用易語言編寫個DLL然后我們再自己的程序中調用。
說做就做,不知道你有沒有用過易寫過DLL,沒有也沒關系,我們來練習一下:打開易語言,
新建"動態鏈接庫",我們單擊右鍵新建一個子程序,起名叫"MyAPI"改好名字后,在名字編輯框里"回車"3下,這樣就完成添加了3個空白參數,參數名和類型等可以按自己的實際需要填寫,
最后說明,如果你要外面的程序可以調用,一定要把"公開"勾上,下面是我的示例代碼:

.版本 2
.子程序 MyAPI, 整數型, 公開
.參數 提示信息, 文本型
.參數 按鈕類型, 整數型
.參數 窗口標題, 文本型
返回 (信息框 (提示信息, 按鈕類型, 窗口標題))

這樣,帶參數調用這個子程序后,程序就會根據傳過來的參數調用易語言自帶的信息框函數,並返回結果給調用方
OK,我們把它編譯出來存為"Mydll.dll",我們再新建一個窗口程序,先保存在"Mydll.dll"的同目錄,然
后點擊左欄的"DLL命令"在右欄的空白處單擊右鍵,選擇第一項"新DLL命令"來新建一個DLL命令,在這個
新DLL命令的"DLL命令名"里寫入一個便於理解的名字,這里就叫"MyMSGBox",在"返回值類型"里寫入之前在DLL里定義的類型"整數型",在"DLL庫文件名"里寫入我們的DLL名字"Mydll.dll"在"DLL庫中對應命令名"中寫入我們在DLL中公開的子程序名"MyAPI",然后"回車"3下,添加3個參數,名稱不一定要相同,但類型一定要和我們在DLL里的子程序"MyAPI"
按照順序一一對應(注:DLL中的函數是區分英文大小寫的),如下面的代碼:

.DLL命令 MyMSGBox, 整數型, "Mydll.dll", "MyAPI"
.參數 提示信息, 文本型
.參數 按鈕類型, 整數型
.參數 窗口標題, 文本型

OK,我們回到窗口界面,雙擊窗口,來到"_啟動窗口_創建完畢"事件,在其下面寫入如下代碼:
.如果真 (MyMSGBox (“調用DLL成功!要退出程序嗎?”, #是否鈕, “信息”) = #是鈕)
結束 ()
.如果真結束
寫好后,F5運行,是不是出現了一個信息框啊!點"是"后還會退出程序!
恩,搞懂了這些,理解API也就不難了! API實際上就是一些在DLL中公開的子程序,我們只要事先知道這
些子程序的名子及它的參數和它所在的DLL名稱,象上面一樣我們先在"DLL命令"那里聲明后,就可以在易
程序中像調用子程序那樣調用了,我們一般查到的API資料都是些VB聲明,就像下面的GetWindowText函數:
GetWindowText
VB聲明

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch
As Long) As Long

說明
取得一個窗體的標題(caption)文字,或者一個控件的內容(在vb里使用:使用vb窗體或控件的caption或text屬性)
返回值
Long,復制到lpString的字串長度;不包括空中止字符。會設置GetLastError
參數表
參數 類型及說明
hwnd Long,欲獲取文字的那個窗口的句柄
lpString String,預定義的一個緩沖區,至少有cch+1個字符大小;隨同窗口文字載入
cch Long,lpString緩沖區的長度
注解
不能用它從另一個應用程序的編輯控件中獲取文字
其中較重要的就是下面這句:

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

其中Lib后面的"user32"就是易中的"DLL庫文件名",Alias后面的"GetWindowTextA"就是"DLL庫中對應命
令名",括號里的就是它的參數每個參數間用","號隔開,其中AS后面的就是參數類型,前面的是參數的名
稱(簡單的描述),括號外的As后面的就是返回值類型,這里的"Long"的中文意思就是"整數
型","String"是"文本型",所以這個API在易中就是這樣聲明的:

.DLL命令 取得窗口標題, 整數型, "user32.dll", "GetWindowTextA"
.參數 窗口句柄, 整數型
.參數 緩沖區, 文本型
.參數 緩沖區的長度, 整數型

問: 窗口句柄我知道,可那個緩沖區和緩沖區的長度是怎么回事啊?
答: 據我自己的理解應該是這樣,不知道對不對,也希望高手指教!
這個問題跟內存傳遞數據的方式不無關系,不知道你有沒有注意到DLL命令參數那還有個"傳址"的選
項,我們把鼠標移上去會出現一個提示,大意是說:如果參數的數據類型是文本,字節集,數組,用戶自定以
類型,庫定以類型等不管是否選擇此項都將直接傳遞地址過去而不是數據!也就是說DLL和調用程序間不
能直接傳遞文本型的數據,只能傳遞文本型的數據在內存中的地址,而窗口標題是個文本型數據;
API不能直接把結果返回給我們,而是直接把結果寫到我們提供的參數變量"緩沖區"的地址,在內存
中的數據都是些字節型的數據,而文本數據是以1字節的{0}為結束標志,API要寫入或保留這個標志,先
要知道這個緩沖區的長度,所以就有了個"緩沖區的長度"的參數!並且,不只是這個API函數用這個方法,
很多類似的API都是用的這個方法,像GetClassName(取窗口類名)等.
搞清楚了這樣,我們就知道在易中該怎么調用了,如下面的代碼:

.子程序 API取得窗口標題, 文本型
.參數 窗口句柄, 整數型
.局部變量 緩存, 文本型
緩存 = 取空白文本 (1000)   '我們要先在內存中分配足夠多的空間
取得窗口標題 (窗口句柄, 緩存, 取文本長度 (緩存) )  'API調用是寫入窗口標題到緩存的地址
返回 (緩存)

然后
窗口名稱=API取得窗口標題(窗口句柄)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM