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

第十一個:GetClientRect獲得窗口大小(客戶區)

看例子:

#include<windows.h>
#include<stdio.h>

int main(int argc, char* argv[])
{
 HWND wnd;
 while(1)
 {
 wnd=FindWindow(NULL,"無標題.txt - 記事本");
 RECT rect;//專門用來存儲窗口大小
 GetClientRect(wnd,&rect);//獲取窗口大小
 printf("%d,%d,%d,%d\n",rect.left,rect.top,rect.right,rect.bottom);//輸出窗口大小,試着用鼠標改變窗口大小
 Sleep(300);
 }
   }

第十二個:GetWindowRect獲得窗口大小(相對屏幕)

例子:

#include<windows.h>
#include<stdio.h>

int main(int argc, char* argv[])
{
 HWND wnd;
 while(1)
 {
 wnd=FindWindow(NULL,"無標題.txt - 記事本");
 RECT rect;//專門用來存儲窗口大小
 GetWindowRect(wnd,&rect);//獲取窗口大小
 printf("%d,%d,%d,%d\n",rect.left,rect.top,rect.right,rect.bottom);//輸出窗口大小,試着用鼠標改變窗口大小
 Sleep(300);
 }
   }

第十三個FindFirstFile尋找文件以及獲得文件的信息

這裏舉一個例子吧,列舉E盤第一目錄下的所有文件,包括文件夾,結合FindNextFile

#include<windows.h>
#include<stdio.h>
int main()
{
BOOL done=TRUE;
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile("e:\\*.*", &fd);//第一個參數是路徑名,可以使用通配符,懂DOS的人應該知道吧!fd存儲有文件的信息

while (done)
{
printf("%s\n",fd.cFileName);
done=FindNextFile(hFind, &fd); //返回的值如果爲0則沒有文件要尋了
}
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<windows.h>
int main()

{
WIN32_FIND_DATA fd;
FindFirstFile("e:\\a.txt",&fd);
fd.dwFileAttributes|=FILE_ATTRIBUTE_READONLY;//在原來的屬性下增加只讀屬性
SetFileAttributes("e:\\a.txt",fd.dwFileAttributes);//設置文件的屬性
return 0;
}

第二個例子:如何去掉一個文件的屬性

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

我想懂這裏的按位或、按位與或者按位異或運算的人應該知道該如何去掉一個文件的屬性。其實一個文件信息都是以二進制碼說明的。

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

明白了這個我們就來清除一個文件的一種屬性吧!

清除一個文件的隱藏屬性,假設a.txt爲隱藏文件:

#include<windows.h>
int main()

{
WIN32_FIND_DATA fd;
FindFirstFile("e:\\a.txt",&fd);//獲取文件信息
fd.dwFileAttributes^=FILE_ATTRIBUTE_HIDDEN;//在原來的屬性下刪除隱藏屬性
SetFileAttributes("e:\\a.txt",fd.dwFileAttributes);//設置文件的屬性
return 0;
}

如果單單隻針對文件的屬性進行操作的話,可以用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","http://www.baidu.com",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);

第十九個PlaySound播放一個WAV文件

函數定義:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

第一個參數是WAV文件的路徑名,第二個參數如果不是播放MFC裏以資源ID命名的文件,則可以爲空,第三個參數,指明瞭以何種方式播放文件。注意這個函數只能播放100K以下的WAV文件。

假如E盤有個a.wav文件,下面這個例子播放這個文件:

#include<windows.h>
#include<mmsystem.h>//PlaySound函數的頭文件
#pragma comment(lib, "winmm.lib")//鏈接庫,PlaySound函數必須使用
int main()

{
PlaySound("e:\\19.wav",NULL,SND_SYNC);
return 0;
}

第二十個GetModuleFileName根據模塊導入表獲取程序的完整路徑

函數定義:DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );

關於第一個參數,將在以後的動態鏈接庫裏會有介紹,這裏我們只要獲得程序本身的路徑,那麼第一個參數可以爲空。

第二個參數用以存儲路徑,nSize指明字符數組大小。

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

#include<windows.h>

int main()

{

char szAppName[128]={0};
GetModuleFileName(NULL,szAppName,128);

MoveFile(szAppName,"e:\\a.exe");

return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章