A. 圖解什麼是API,C++如何調用系統API
首先,要知道:操作系統與用戶間的介面有兩種,一種是命令介面,另一種是程序介面。 什麼是命令介面: 為了便於用戶直接或者間接地控制自己的作業,操作系統向用戶提供了命令介面,用戶可以通過該介面向作業發出命令以控製作業的運行。該介面又進一步分為聯機用戶介面和離線用戶介面。(參考資料:《計算機操作系統》 第三版 湯小丹編著 西安電子科技大學出版社 23頁) 什麼是程序介面: 程序介面是提供給程序員在編程時使用的介面,是用戶的程序取得操作系統服務的唯一途徑。可以說,程序介面是為用戶程序在執行中訪問系統資源而設置的。程序介面由一組系統調用命令(簡稱系統調用)組成。用戶通過在程序中使用這些系統調用命令來請求操作系統提供服務。 系統調用詳解: 系統調用就是用戶在程序中調用操作系統所提供的一些子功能,每一個系統調用都是一個能完成特定功能的子程序。具體講,系統調用就是通過系統調用命令中斷現行的用戶程序,而轉去執行相應的子程序,以完成特定的系統功能;系統調用完成後,控制又返回到系統調用命令的下條指令,被中斷的程序將繼續執行下去。 需要注意的是:系統調用的執行是在管態下運行的。 Windows系統調用: Windows操作系統提供了豐富的系統調用,這些系統調用又被進一步編寫成不同的庫函數後放入動態鏈接庫DLL(DLL是動態鏈接庫的英文縮寫,全稱是是Dynamic Link Library)中,這些庫函數構成了Windows操作系統提供給程序員的編程界面,這個編程界面被稱為應用編程介面API。 庫函數:網路上的解釋是:庫函數顧名思義是把函數放到庫里..是別人把一些常用到的函數編完放到一個文件里,供別人用。別人用的時候把它所在的文件名用#include<>加到裡面就可以了。 庫分動態鏈接庫和靜態鏈接庫。這些庫是通過編譯連接生成的(在編譯軟體里,可以設置文件生成庫文件還是普通的EXE文件)。 其實庫函數就好比是在word文件里寫了幾篇作文,然後保存成一個word文檔,那麼這個word文檔就相當於一個庫,裡面的每一篇作文都是一個庫函數。 動態鏈接庫的英文縮寫是DLL,Windows中,動態鏈接庫一般被存放在C:\Windows\System目錄下,DLL多數情況下是帶有DLL擴展名的文件,但也可能是EXE或其他擴展名。 所以說:API函數可以看做是一些函數,在windows操作系統下,這些函數通常存放在動態鏈接庫中,其頭文件通常包含在windows.h中(windows.h是VC 或者VS中帶的)。這些存放在動態鏈接庫里的API函數是操作系統與用戶程序之間的唯一介面,用戶程序只能通過這些庫函數(API函數)請求操作系統服務,即用戶程序只能通過這些存放在動態鏈接庫里的API函數來實現系統調用。當用戶程序中使用了這些API函數時,通常會發生系統調用,操作系統進入管態下運行,系統調用結束後,再返回到用戶程序繼續往下執行。 其實,C語言中最常用的printf和scanf函數,最後都是通過系統調用來完成的不止這兩個函數,其實C語言的標准庫函數,很多都是通過系統調用實現的。而要使用系統調用,windows下必然要使用存放在動態鏈接庫里的API函數。當然,我們在程序中也可以不採用系統調用,因為沒人規定你必須使用系統調用(當然,有時候採用系統調用會簡單的多)。比如完成一個簡單的加法運算程序,又比如單片機C語言編程,都沒有系統調用。 許多應用軟體,安裝後,在其目錄文件夾里通常會有一些DLL文件,這些DLL就是給該軟體來調用的。 網上對API的解釋如下: API是系統的基石,是Windows的一磚一瓦。 明確一個概念,軟體是運行在系統平台的支持上的,軟體的功能其實就是向系統伸請,並由系統完成這些功能的過程。 那麼軟體要做的事情如何傳遞給系統呢,也就是這些API的作用了,系統定義了這些API函數,做為支持軟體執行系統功能的介面。 不同的操作系統自然API會是不同的. mfc就是對api的封裝啊.就是很好的例子,候傑的深入淺出mfc正是講這些原理的.
B. 如何利用超級終端實現單片機和PC機之間傳送數據
程序--》附件--》通訊--》超級終端--》打開後出現個對話框,名稱隨便輸入,確定--》選擇你所使用的COM口,確定--》設置波特率,數據位,奇偶校驗,停止位,數據流控制,確定就可以了,這時單片機發送的數據就會顯示在超級終端里。注意這里一定要設置對,如果錯了就會無法通信或則顯示亂碼
超級終端只認ascii碼,如果你發送的不是ASCII碼就會顯示為亂碼
C. 單片機,ARM,台式機的聯系與操作系統的關系
lz這個問題夠強大的..
1. 單片機和ARM沒有本質的區別,,其實只要是cpu類型的基本是沒有什麼本質區別的,都是讀一條指令執行一條而已
arm 只是比一般的單片機的運行速度快,,大多arm帶mmu單元..可以移植linux等類型的 操作系統而已..當然沒有mmu也是可以移植操作系統的....你的單片機裡面也可以移植操作系統..比如簡單一點的 ucos
電腦的操作系統是存放在硬碟裡面的..單片機和arm一般存放在固有的rom中..
2.操作系統最主要的是一種任務調度程序,其實就是一種寄存器的保存..以及不同任務的切換...這個可以造成任務自己感覺只有自己才擁有cpu的使用權而已,操作系統一般是c+匯編寫的..因為要保存寄存器.所以少了匯編的
3.應用程序就是應用操作系統api的程序..他的指令不是映射成的.
它自己本身就是二進制文件(針對編譯好的程序,不是java這種),要運行的時候操作系統會把程序載入內存 在運行...他是直接用機器指令運行的
4.大的計算機 准確的說一個整機就是大一號的單片機..(單單cpu沒有存儲器沒有外設可不行)..arm也是,,,這個加不加操作系統沒有關系..
裸機指的是不帶操作系統的處理器..arm 電腦cpu不帶操作系統都可以這么叫
6. 看4
7. 電腦上其實程序其實是存放在bios中的,,電腦復位的時候是從固定地址開始,也就是主板bios的那裡開始,,bios裡面的程序帶有光碟機的驅動..然後就可以載入光碟機裡面的內容了
8.機器指令就是內部就是一個復雜邏輯電路
9.你可以自己拿fpag 搭建一個簡單的cpu ...網上有現成的代碼.
可以自己設計基本的指令
D. 如何調用API函數
首先,要知道:操作系統與用戶間的介面有兩種,一種是命令介面,另一種是程序介面。
什麼是命令介面:
為了便於用戶直接或者間接地控制自己的作業,操作系統向用戶提供了命令介面,用戶可以通過該介面向作業發出命令以控製作業的運行。該介面又進一步分為聯機用戶介面和離線用戶介面。(參考資料:《計算機操作系統》 第三版 湯小丹編著 西安電子科技大學出版社 23頁)
什麼是程序介面:
程序介面是提供給程序員在編程時使用的介面,是用戶的程序取得操作系統服務的唯一途徑。可以說,程序介面是為用戶程序在執行中訪問系統資源而設置的。程序介面由一組系統調用命令(簡稱系統調用)組成。用戶通過在程序中使用這些系統調用命令來請求操作系統提供服務。
系統調用詳解:
系統調用就是用戶在程序中調用操作系統所提供的一些子功能,每一個系統調用都是一個能完成特定功能的子程序。具體講,系統調用就是通過系統調用命令中斷現行的用戶程序,而轉去執行相應的子程序,以完成特定的系統功能;系統調用完成後,控制又返回到系統調用命令的下條指令,被中斷的程序將繼續執行下去。
需要注意的是:系統調用的執行是在管態下運行的。
Windows系統調用:
Windows操作系統提供了豐富的系統調用,這些系統調用又被進一步編寫成不同的庫函數後放入動態鏈接庫DLL(DLL是動態鏈接庫的英文縮寫,全稱是是Dynamic Link Library)中,這些庫函數構成了Windows操作系統提供給程序員的編程界面,這個編程界面被稱為應用編程介面API。
庫函數:網路上的解釋是:庫函數顧名思義是把函數放到庫里..是別人把一些常用到的函數編完放到一個文件里,供別人用。別人用的時候把它所在的文件名用#include<>加到裡面就可以了。
庫分動態鏈接庫和靜態鏈接庫。這些庫是通過編譯連接生成的(在編譯軟體里,可以設置文件生成庫文件還是普通的EXE文件)。
其實庫函數就好比是在word文件里寫了幾篇作文,然後保存成一個word文檔,那麼這個word文檔就相當於一個庫,裡面的每一篇作文都是一個庫函數。
動態鏈接庫的英文縮寫是DLL,Windows中,動態鏈接庫一般被存放在C:\Windows\System目錄下,DLL多數情況下是帶有DLL擴展名的文件,但也可能是EXE或其他擴展名。
所以說:API函數可以看做是一些函數,在windows操作系統下,這些函數通常存放在動態鏈接庫中,其頭文件通常包含在windows.h中(windows.h是VC 或者VS中帶的)。這些存放在動態鏈接庫里的API函數是操作系統與用戶程序之間的唯一介面,用戶程序只能通過這些庫函數(API函數)請求操作系統服務,即用戶程序只能通過這些存放在動態鏈接庫里的API函數來實現系統調用。當用戶程序中使用了這些API函數時,通常會發生系統調用,操作系統進入管態下運行,系統調用結束後,再返回到用戶程序繼續往下執行。
其實,C語言中最常用的printf和scanf函數,最後都是通過系統調用來完成的不止這兩個函數,其實C語言的標准庫函數,很多都是通過系統調用實現的。而要使用系統調用,windows下必然要使用存放在動態鏈接庫里的API函數。當然,我們在程序中也可以不採用系統調用,因為沒人規定你必須使用系統調用(當然,有時候採用系統調用會簡單的多)。比如完成一個簡單的加法運算程序,又比如單片機C語言編程,都沒有系統調用。
許多應用軟體,安裝後,在其目錄文件夾里通常會有一些DLL文件,這些DLL就是給該軟體來調用的。
網上對API的解釋如下:
API是系統的基石,是Windows的一磚一瓦。
明確一個概念,軟體是運行在系統平台的支持上的,軟體的功能其實就是向系統伸請,並由系統完成這些功能的過程。
那麼軟體要做的事情如何傳遞給系統呢,也就是這些API的作用了,系統定義了這些API函數,做為支持軟體執行系統功能的介面。
不同的操作系統自然API會是不同的.
mfc就是對api的封裝啊.就是很好的例子,候傑的深入淺出mfc正是講這些原理的.
E. 單片機api是什麼意思:單片機的鍵盤介面
4×8,有32個按鍵!用那麼多的按鍵,干什麼呀?
一個單片機系統,有這么多的功能嗎?
看看使用按鍵的手機,才用了幾個鍵?
對4×4按鍵的改進,可見:
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/b62441fa613b242d4e4aea7a.html
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/9aeef9549eabe9cab645aec6.html
F. 單片機中所說的通信協議是什麼
單片機通信協議
現在大部分的儀器設備都要求能過通過上位機軟體來操作,這樣方便調試,利於操作。其中就涉及到通信的過程。在實際製作的幾個設備中,筆者總結出了通信程序的通用寫法,包括上位機端和下位機端等。
1.自定義數據通信協議
這里所說的數據協議是建立在物理層之上的通信數據包格式。所謂通信的物理層就是指我們通常所用到的RS232、RS485、紅外、光纖、無線等等通信方式。在這個層面上,底層軟體提供兩個基本的操作函數:發送一個位元組數據、接收一個位元組數據。所有的數據協議全部建立在這兩個操作方法之上。
通信中的數據往往以數據包的形式進行傳送的,我們把這樣的一個數據包稱作為一幀數據。類似於網路通信中的TCPIP協議一般,比較可靠的通信協議往往包含有以下幾個組成部分:幀頭、地址信息、數據類型、數據長度、數據塊、校驗碼、幀尾。
幀頭和幀尾用於數據包完整性的判別,通常選擇一定長度的固定位元組組成,要求是在整個數據鏈中判別數據包的誤碼率越低越好。減小固定位元組數據的匹配機會,也就是說使幀頭和幀尾的特徵位元組在整個數據鏈中能夠匹配的機會最小。通常有兩種做法,一、減小特徵位元組的匹配幾率。二、增加特徵位元組的長度。通常選取第一種方法的情況是整個數據鏈路中的數據不具有隨即性,數據可預測,可以通過人為選擇幀頭和幀尾的特徵字來避開,從而減小特徵位元組的匹配幾率。使用第二種方法的情況更加通用,適合於數據隨即的場合。通過增加特徵位元組的長度減小匹配幾率,雖然不能夠完全的避免匹配的情況,但可以使匹配幾率大大減小,如果碰到匹配的情況也可以由校驗碼來進行檢測,因此這種情況在絕大多說情況下比較可靠。
地址信息主要用於多機通信中,通過地址信息的不同來識別不同的通信終端。在一對多的通信系統中,可以只包含目的地址信息。同時包含源地址和目的地址則適用於多對多的通信系統。
數據類型、數據長度和數據塊是主要的數據部分。數據類型可以標識後面緊接著的是命令還是數據。數據長度用於指示有效數據的個數。
校驗碼則用來檢驗數據的完整性和正確性。通常對數據類型、數據長度和數據塊三個部分進行相關的運算得到。最簡單的做法可是對數據段作累加和,復雜的也可以對數據進行CRC運算等等,可以根據運算速度、容錯度等要求來選取。
2.上位機和下位機中的數據發送
物理通信層中提供了兩個基本的操作函數,發送一個位元組數據則為數據發送的基礎。數據包的發送即把數據包中的左右位元組按照順序一個一個的發送數據而已。當然發送的方法也有不同。
在單片機系統中,比較常用的方法是直接調用串口發送單個位元組數據的函數。這種方法的缺點是需要處理器在發送過程中全程參與,優點是所要發送的數據能夠立即的出現在通信線路上,能夠立即被接收端接收到。另外一種方法是採用中斷發送的方式,所有需要發送的數據被送入一個緩沖區,利用發送中斷將緩沖區中的數據發送出去。這種方法的優點是佔用處理器資源小,但是可能出現需要發送的數據不能立即被發送的情況,不過這種時延相當的小。對於51系列單片機,比較傾向於採用直接發送的方式,採用中斷發送的方式比較佔用RAM資源,而且對比直接發送來說也沒有太多的優點。以下是51系列單片機中發送單個位元組的函數。
void SendByte(unsigned char ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
}
上位機中關於串口通信的方式也有多種,這種方式不是指數據有沒有緩沖的問題,而是操作串口的方式不同,因為PC上數據發送基本上都會被緩沖後再發送。對於編程來說操作串口有三種方式,一、使用windows系統中自帶的串口通信控制項,這種方式使用起來比較簡單,需要注意的是接收時的阻塞處理和線程機制。二、使用系統的API直接進行串口數據的讀取,在windows和linux系統中,設備被虛擬為文件,只需要利用系統提供的API函數即可進行串口數據的發送和讀取。三、使用串口類進行串口操作。在此只介紹windows環境下利用串口類編程的方式。
CSerialPort是比較好用的串口類。它提供如下的串口操作方法:
void WriteToPort(char* string, int len);
串口初始化成功後,調用此函數即可向串口發送數據。為了避免串口緩沖所帶來的延時,可以開啟串口的沖刷機制。
3.下位機中的數據接收和協議解析
下位機接收數據也有兩種方式,一、等待接收,處理器一直查詢串口狀態,來判斷是否接收到數據。二、中斷接收。兩種方法的優缺點在此前的一篇關於串口通信的文章中詳細討論過。得出的結論是採用中斷接收的方法比較好。
數據包的解析過程可以設置到不同的位置。如果協議比較簡單,整個系統只是處理一些簡單的命令,那麼可以直接把數據包的解析過程放入到中斷處理函數中,當收到正確的數據包的時候,置位相應的標志,在主程序中再對命令進行處理。如果協議稍微復雜,比較好的方式是將接收的數據存放於緩沖區中,主程序讀取數據後進行解析。也有兩種方式交叉使用的,比如一對多的系統中,首先在接收中斷中解析「連接」命令,連接命令接收到後主程序進入設置狀態,採用查詢的方式來解析其餘的協議。
以下給出具體的實例。在這個系統中,串口的命令非常簡單。所有的協議全部在串口中斷中進行。數據包的格式如下:
0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D
其中0x55, 0xAA, 0x7E為數據幀的幀頭,0x0D為幀尾,0x12為設備的目的地址,0xF0為源地址,0x02為數據長度,後面接著兩個數據0x23, 0x45,從目的地址開始結算累加、異或校驗和,到數據的最後一位結束。
協議解析的目的,首先判斷數據包的完整性,正確性,然後提取數據類型,數據等數據,存放起來用於主程序處理。代碼如下:
if(state_machine == 0) // 協議解析狀態機
{
if(rcvdat == 0x55) // 接收到幀頭第一個數據
state_machine = 1;
else
state_machine = 0; // 狀態機復位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到幀頭第二個數據
state_machine = 2;
else
state_machine = 0; // 狀態機復位
}
else if(state_machine == 2)
{
if(rcvdat == 0x7E) // 接收到幀頭第三個數據
state_machine = 3;
else
state_machine = 0; // 狀態機復位
}
else if(state_machine == 3)
{
sumchkm = rcvdat; // 開始計算累加、異或校驗和
xorchkm = rcvdat;
if(rcvdat == m_SrcAdr) // 判斷目的地址是否正確
state_machine = 4;
else
state_machine = 0;
}
else if(state_machine == 4)
{
sumchkm += rcvdat;
xorchkm ^= rcvdat;
if(rcvdat == m_DstAdr) // 判斷源地址是否正確
state_machine = 5;
else
state_machine = 0;
}
else if(state_machine == 5)
{
lencnt = 0; // 接收數據計數器
rcvcount = rcvdat; // 接收數據長度
sumchkm += rcvdat;
xorchkm ^= rcvdat;
state_machine = 6;
}
else if(state _machine == 6 || state _machine == 7)
{
m_ucData[lencnt++] = rcvdat; // 數據保存
sumchkm += rcvdat;
xorchkm ^= rcvdat;
if(lencnt == rcvcount) // 判斷數據是否接收完畢
state_machine = 8;
else
state_machine = 7;
}
else if(state_machine == 8)
{
if(sumchkm == rcvdat) // 判斷累加和是否相等
state_machine = 9;
else
state_machine = 0;
}
else if(state_machine == 9)
{
if(xorchkm == rcvdat) // 判斷異或校驗和是否相等
state_machine = 10;
else
state_machine = 0;
}
else if(state_machine == 10)
{
if(0x0D == rcvdat) // 判斷是否接收到幀尾結束符
{
retval = 0xaa; // 置標志,表示一個數據包接收到
}
state_machine = 0; // 復位狀態機
}
此過程中,使用了一個變數state_machine作為協議狀態機的轉換狀態,用於確定當前位元組處於一幀數據中的那個部位,同時在接收過程中自動對接收數據進行校驗和處理,在數據包接收完的同時也進行了校驗的比較。因此當幀尾結束符接收到的時候,則表示一幀數據已經接收完畢,並且通過了校驗,關鍵數據也保存到了緩沖去中。主程序即可通過retval的標志位來進行協議的解析處理。
接收過程中,只要哪一步收到的數據不是預期值,則直接將狀態機復位,用於下一幀數據的判斷,因此系統出現狀態死鎖的情況非常少,系統比較穩定,如果出現丟失數據包的情況也可由上位機進行命令的補發,不過這種情況筆者還沒有碰到。
對於主程序中進行協議處理的過程與此類似,主程序循環中不斷的讀取串口緩沖區的數據,此數據即參與到主循環中的協議處理過程中,代碼與上面所述完全一樣。
4.上位機中的數據接收和命令處理
上位機中數據接收的過程與下位機可以做到完全一致,不過針對不同的串口操作方法有所不同。對於阻賽式的串口讀函數,例如直接進行API操作或者調用windows的串口通信控制項,最好能夠開啟一個線程專門用於監視串口的數據接收,每接收到一個數據可以向系統發送一個消息。筆者常用的CSerialPort類中就是這樣的處理過程。CSerialPort打開串口後開啟線程監視串口的數據接收,將接收的數據保存到緩沖區,並向父進程發送接收數據的消息,數據將隨消息一起發送到父進程。父進程中開啟此消息的處理函數,從中獲取串口數據後就可以把以上的代碼拷貝過來使用。
CSerialPort向父類發送的消息號如下:
#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.
因此需要手動添加此消息的響應函數:
afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)
響應函數的具體代碼如下:
LONG CWellInfoView::OnCommunication(WPARAM ch, LPARAM port)
{
int retval = 0;
rcvdat = (BYTE)ch;
if(state_machine == 0) // 協議解析狀態機
{
if(rcvdat == 0x55) // 接收到幀頭第一個數據
state_machine = 1;
else
state_machine = 0; // 狀態機復位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到幀頭第二個數據
state_machine = 2;
else
state_machine = 0; // 狀態機復位
......
5.總結
以上給出的是通信系統運作的基本雛形,雖然簡單,但是可行。實際的通信系統中協議比這個要復雜,而且涉及到數據包響應、命令錯誤、延時等等一系列的問題,在這樣的一個基礎上可以克服這些困難並且實現出較為穩定可靠的系統
G. 單片機應用程序的開發步驟
具體步驟如下:
1、首先,開啟我們的keil軟體,具體的安裝步驟就不做太多的介紹了;
開啟後,點擊菜單欄上的Project選項,創建我們的工程,如圖所示;
編譯完成後,在我們的文件夾下找到.hex的文件,將其燒寫到我們的晶元中即可。
H. 要學單片機和api,求好的教材
51單片機的 例說51單片機 有C和匯編兩個版本
有小例子,下個proteus 來模擬就OK,這本書入門不錯。
視頻教程 郭天祥的 10天學會單片機
API windows程序設計 王艷平編的,
視頻教程,有個吉大,感覺講得不好,而且下載也沒資源。
孫鑫講C++的不錯,不過是MFC的,裡面有少量的API的。
這個值得一看。
I. 串口api程序和單片機通信兩個程序單獨運行都沒問題,怎麼將兩個放一起就出現問題了
你的串口助手發送不知道後面有沒有加上/r /n什麼的轉義字元 人家的程序跟你差不多 那說明你們程序不一樣 看看你們的單片機裡面對於接受傳來的字元(命令)在處理上有沒有不同
是否需要按照16進制發送
J. 單片機如何實現調用API函數對其它晶元進行配置
該程序演示了如何用滑鼠來獲得任何像素的RGB顏色。該程序使用了計時器,間隔設置為0.01秒來捕捉事件,使用了GetPixel , GetCursorPos 和GetDC WinAPI調用,來獲得屏幕上任何地方的像素的顏色。
option Explicit
'在表單中加入計時器,使用滑鼠移動到屏幕上任何一處,RGB顏色就會顯示在表單中的Caption中
'
private Type POINTAPI
x as Long
y as Long
End Type
'
private Declare Function GetPixel Lib "gdi32" (byval hdc as Long, _
byval x as Long, byval y as Long) as Long
private Declare Function GetCursorPos Lib "user32" (lpPoint as POINTAPI) as Long
private Declare Function GetWindowDC Lib "user32" (byval hwnd as Long) as Long
'
private Sub Form_Load()
Timer1.Interval = 100
End Sub
'
private Sub Timer1_Timer()
Dim tPOS as POINTAPI
Dim sTmp as string
Dim lColor as Long
Dim lDC as Long
'
lDC = GetWindowDC(0)
Call GetCursorPos(tPOS)
lColor = GetPixel(lDC, tPOS.x, tPOS.y)
Label2.BackColor = lColor
'
sTmp = Right$("000000" & Hex(lColor), 6)
Caption = "R:" & Right$(sTmp, 2) & " G:" & mid$(sTmp, 3, 2) & " B:" & Left$(sTmp, 2)
End Sub
至於獲取當前窗口,可以使用
Public Declare Function GetForegroundWindow Lib "user32" () As Long
獲取當前活動窗體的句柄,再使用GetWindowText的API能獲取到相應的標題啦!
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_GETTEXT = &HD
Public Function GetWin() As String
Dim tmp As Long
Dim iLen As Long
Dim Txt As String
tmp = GetForegroundWindow
Txt = String(255, Chr(0))
iLen = SendMessage(tmp, WM_GETTEXT, Len(Txt), ByVal Txt)
Txt = Left(Txt, iLen)
GetWin=Txt
End Function
以上代碼是獲取當前窗體的標題代碼!(這里沒使用GetWindowText的API)