VC API常用函式簡單例子大全二

2021-06-07 21:03:38 字數 4583 閱讀 5798

第十乙個:getclientrect獲得視窗大小(客戶區)

看例子:

#include

#include

int main(int argc, char* argv)

}第十二個:getwindowrect獲得視窗大小(相對螢幕)

例子:#include

#include

int main(int argc, char* argv)

}第十三個findfirstfile尋找檔案以及獲得檔案的資訊

這裡舉乙個例子吧,列舉e盤第一目錄下的所有檔案,包括資料夾,結合findnextfile

#include

#include

int main()

return 0;

}當然也可以直接找乙個檔案,不使用萬用字元,但這樣有什麼意義呢?,如findfirstfile("e:\\aaa.txt",&fd);其實這個可以獲取乙個檔案的資訊,如檔案是不是隱藏的,或者有沒有唯讀屬性等。

當然通過控制萬用字元,也可以尋找特定型別的檔案,比如我只要找文字檔案,那麼就是這個語句findfirstfile("e:\\*.txt",&fd);就行了,關鍵看你自己靈活運用。

前面說過fd裡儲存有檔案的資訊,那怎麼根據fd裡面的成員判斷這個檔案的屬性,檔案是否隱藏,是不是資料夾。

fd裡的dwfileattributes儲存有檔案的資訊,如判斷是否為資料夾,只要把這個變數和file_attribute_directory進行按位與運算,如果不為0的話,表明為文夾件,如if(fd.dwfileattributes&file_attribute_directory) printf("%s是資料夾\n",fd.cfilename);

其它判斷也是一樣,現在給出檔案的屬性(常用幾個):file_attribute_hidden(隱藏)

file_attribute_readonly(唯讀)file_attribute_system(系統)

第十四個findnextfile尋找檔案

參照findfirstfile函式的例子!

第十五個movefile移動檔案

如把乙個盤裡的文字移到另乙個盤裡去:movefile("e:\\a.txt","d:\\abc.txt");即可,意思把e盤下的a.txt移到d盤下去,並改名為abc.txt

第十六個getclassname根據視窗控制代碼獲得視窗類名

函式定義:int getclassname(hwnd hwnd, lptstr ipclassname, int nmaxcount);

這種函式不需要再解釋了吧,前面有太多類似的例子。

第十七個setfileattributes設定檔案屬性

函式定義:bool setfileattributes( lpctstrlpfilename, dworddwfileattributes);

這個函式的第二個引數dwfileattributes和前面講過的win32_find_data結構裡的dwfileattributes成員相對應。假設e盤第一目錄下有乙個文字檔案a.txt的正常檔案,我要把它設為唯讀和隱藏那要如何做呢?在前面介紹過win32_find_data結構裡dwfileattributes成員的幾個常用屬性,根據這個我們知道隱藏是file_attribute_hidden,唯讀是file_attribute_readonly。

那麼把e盤下文字檔案的屬性設為隱藏和唯讀的語句就是:

setfileattributes("e:\\a.txt",file_attribute_hidden|file_attribute_readonly);

(說明:這個函式同樣也能設定資料夾屬性)

雖然這個語句可以達到要求,但不建議用,因為會覆蓋掉檔案的原來屬性,也就是說如果這個檔案之前有系統屬性(系統檔案)的話,那麼這個語句一旦執行後,檔案就只有隱藏和唯讀屬性了。

比如乙個檔案原先就有隱藏屬性,依舊以a.txt為例子,那麼我把它設為唯讀,是不是這個語句就可以呢?

setfileattributes("e:\\a.txt",file_attribute_readonly);這樣的話,雖然檔案有唯讀屬性了,但隱藏屬性卻沒有了。

那要如何在不覆蓋掉原來的屬性下,把檔案設為唯讀呢,其實說了這麼多的廢話,總結起來就一句話:如何增加乙個檔案的屬性!

前提是要獲得這個檔案的原有屬性:獲得檔案的屬性,在findfirstfile函式講過。好吧!直接看例子:

假設e盤的a.txt檔案屬性為隱藏,給它增加唯讀屬性:

#include

int main()

第二個例子:如何去掉乙個檔案的屬性

(補習一下,懂的人直接跳過)

我想懂這裡的按位或、按位與或者按位異或運算的人應該知道該如何去掉乙個檔案的屬性。其實乙個檔案資訊都是以二進位製碼說明的。

比如乙個八位二進位製碼:10000010,這裡的每一位是不是只有0和1取值,不是0,就是1,正好可以表示乙個檔案屬性的有無,如這個檔案是隱藏的嗎?只有是和不是,這樣我們規定把這八位二進位製碼的第一位用於確定檔案是否具有隱藏屬性,如果為1那便是隱藏,無則沒有,以此類推第二位就代表檔案的唯讀,第三位系統。。。但要如何判斷呢,或者把某一位的值改變呢,用按位運算就可以,00000010,我要把第2位的值設為0,其它位上的值保持不變,用按位異或運算即可,與00000010進行按位異或運算,但這裡並不是與它本身進行運算,不管任何八位二進位制數的值是多少只要與00000010進行按位異或運算,那第二位都會變成0,而其它的位保持不變。這樣為了方便,我們就把00000010進行巨集定義,方便記憶,這個二進位制數的十進位制為2。巨集定義#define file_attribute_readonly 2

明白了這個我們就來清除乙個檔案的一種屬性吧!

清除乙個檔案的隱藏屬性,假設a.txt為隱藏檔案:

#include

int main()

如果單單只針對檔案的屬性進行操作的話,可以用getfileattributes函式獲取檔案的屬性,該函式只乙個引數,那就是檔案的路徑,函式返回乙個dword值,包含檔案屬性資訊。

第十八個shellexecute執行乙個程式

函式定義:shellexecute(hwnd hwnd, lpcstr lpoperation, lpcstr lpfile, lpcstr lpparameters, lpcstr lpdirectory, int nshowcmd);

第乙個引數hwnd是父視窗的控制代碼,可以為null,第二個引數lpoperation表示行為,第三個引數lpfile是程式的路徑名,第四個引數lpparameters是給所開啟程式的引數,可以為null,第五個引數lpdirectory可以為null,第六個引數nshowcmd跟showwindow函式的第二個引數一樣,作用也一樣,如果開啟的程式有視窗的話,這個引數就指明了視窗如何顯示.

例如開啟乙個記事本:

shellexecute(null,"open","notepad.exe",null,null,sw_shownormal);

而且這個函式還可以指定程式開啟乙個屬於程式本身型別的檔案,假如e盤有乙個a.txt檔案;我呼叫函式執行記事本程式並開啟這個文字檔案.

shellexecute(null,"open","notepad.exe","e:\\a.txt",null,sw_shownormal);

這裡由於記事本程式屬於系統本身自帶的程式,所以沒有絕對路徑.

這個函式還可以開啟乙個**:

shellexecute(null,"open","",null,null,sw_shownormal);

shellexecute(null,"open","c:",null,null,sw_shownormal);

還可以根據檔案字尾名選擇相應的程式開啟乙個檔案:

shellexecute(null,"open","e:\\a.bmp",null,null,sw_shownormal);

類似的函式還有winexec,只有兩個引數,它的最後乙個引數跟shellexecute函式的最後乙個引數一樣.

而第乙個引數則是程式路徑名.舉個例子:winexec("notepad.exe",sw_shownormal);

這個函式也可以給程式傳遞乙個檔名供要執行的程式開啟,那要如何加進去呢,這裡又沒有第三個引數,

方法把路徑名加在notpepad.exe的後面,要以空格來分開如:

winexec("notepad.exe e:\\a.txt",sw_shownormal);

函式定義:bool playsound(lpcstr pszsound, hmodule hmod,dword fdwsound);

#include

#include//playsound函式的標頭檔案

#pragma comment(lib, "winmm.lib")//鏈結庫,playsound函式必須使用

int main()

第二十個getmodulefilename根據模組匯入表獲取程式的完整路徑

函式定義:dword getmodulefilename( hmodule hmodule, lptstr lpfilename, dword nsize );

關於第乙個引數,將在以後的動態鏈結庫裡會有介紹,這裡我們只要獲得程式本身的路徑,那麼第乙個引數可以為空。

第二個引數用以儲存路徑,nsize指明字元陣列大小。

這個舉個例子,執行後,把自身程式移動到e盤下,並改名為a.exe;

#include

int main()

VC API常用函式簡單例子大全一

第乙個 findwindow 根據視窗類名或視窗標題名來獲得視窗的控制代碼,該函式返回視窗的控制代碼,這個函式的定義是這樣的hwnd winapi findwindow lpcstr lpclassname lpcstr lpwindowname 第乙個引數填視窗的類名,第二個填視窗的標題名,其實是...

VC API常用函式簡單例子大全九

第八十乙個writefile根據檔案控制代碼,寫入一段資料到檔案中 include include int main 第八十二個setfilepointer移動乙個檔案指標的位置 移動乙個檔案指標的位置有什麼用呢,作用是讀取乙個檔案裡指定位置的資料,比如我只要讀取檔案中第四個位元組到第七個位元組這一...

C API常用函式簡單例子大全四

第三十個 createtoolhelp32snapshot 給當前程序拍乙個照 記住這種格式就行了,返回的控制代碼,儲存有程序資訊,可以用 process32firs 函式找出來。第三十乙個process32first 根據createtoolhelp32snapshot函式返回的控制代碼獲取程序資...