1. 程式人生 > >c語言windows.h標頭檔案詳解

c語言windows.h標頭檔案詳解

如果c語言庫裡沒有某個標頭檔案 只需要將下好的標頭檔案放入下面的路徑即可

windows.h標頭檔案包含的函式及其用法

1.GetAsyncKeyState()()//通過函式來判斷按鍵按下的狀態

主要用法是VK_鍵的名稱

例如 GetAsyncKeyState(VK_SHIFT)

         GetAsyncKeyState(VK_LSHIFT)         

         GetAsyncKeyState(VK_RSHIFT)

         MENU代表的是這是alt鍵

1)if(GetAsyncKeyState(VK_LSHIFT))

這樣寫是不對的。

GetAsyncKeyState的返回值表示兩個內容,一個是最高位bit的值,代表這個鍵是否被按下,一個是最低位bit的值,代表在上次呼叫

GetAsyncKeyState後,這個鍵是否被按下。

應該是

if(GetAsyncKeyState(VK_LSHIFT)&&ox8000)

(2)SHORT GetKeyState(int nVirtKey);

SHORT GetAsyncKeyState(int vKey);

BOOL GetKeyboardState(PBYTE lpKeyState);

三個取key status的函式的最大區別是:

第一個:是從windows訊息佇列中取得鍵盤訊息,返回key status.

第二個:是直接偵測鍵盤的硬體中斷,返回key status.

第三個:是當從windows訊息佇列中移除鍵盤訊息時,才才返回key status.

2.system("pause");//程式暫停,顯示按下任意鍵繼續

3.Sleep(1000);//延遲1000毫秒,切記S大寫

4.system("cls");//清屏函式

5.pos類似於conio中的gotoxy

例項 

#include<stdio.h>
#include<windows.h>
void Pos(int x, int y)//設定游標位置,從哪裡開始輸出
{
    COORD pos;//表示一個字元在控制檯螢幕上的座標,左上角(0,0)
    HANDLE h0utput;
    pos. X = x;
    pos. Y = y;
    h0utput = GetStdhandle(STD_OUTPUT_HANDLE);//GetStdhandle用於從一個特定的標準裝置(標準輸入、標準輸出或標準錯誤)中取得一個控制代碼(用來標識不同裝置的數值)。可以巢狀使用。
    SetConsoleCursorPosition(h0uput, pos);
}

6.控制代碼的理解

所謂控制代碼實際上是一個數據,是一個Long (整長型)的資料。 


控制代碼是WONDOWS用來標識被應用程式所建立或使用的物件的唯一整數,WINDOWS使用各種各樣的控制代碼標識諸如應用程式例項,視窗,控制,點陣圖,GDI物件等等。WINDOWS控制代碼有點象C語言中的檔案控制代碼。 


從上面的定義中的我們可以看到,控制代碼是一個識別符號,是拿來標識物件或者專案的,它就象我們的姓名一樣,每個人都會有一個,不同的人的姓名不一樣,但是,也可能有一個名字和你一樣的人。從資料型別上來看它只是一個16位的無符號整數。應用程式幾乎總是通過饔靡桓鯳INDOWS函式來獲得一個控制代碼,之後其他的WINDOWS函式就可以使用該控制代碼,以引用相應的物件。 


如果想更透徹一點地認識控制代碼,我可以告訴大家,控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體地址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首地址,那麼就可以隨時用這個地址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,Windows是一個以虛擬記憶體為基礎的作業系統。在這種系統環境下,Windows記憶體管理器經常在記憶體中來回移動物件,依此來滿足各種應用程式的記憶體需要。物件被移動意味著它的地址變化了。如果地址總是如此變化,我們該到哪裡去找該物件呢? 


為了解決這個問題,Windows作業系統為各應用程式騰出一些記憶體儲地址,用來專門登記各應用物件在記憶體中的地址變化,而這個地址(儲存單元的位置)本身是不變的。Windows記憶體管理器在移動物件在記憶體中的位置後,把物件新的地址告知這個控制代碼地址來儲存。這樣我們只需記住這個控制代碼地址就可以間接地知道物件具體在記憶體中的哪個位置。這個地址是在物件裝載(Load)時由系統分配給的,當系統解除安裝時(Unload)又釋放給系統。 




控制代碼地址(穩定)→記載著物件在記憶體中的地址————→物件在記憶體中的地址(不穩定)→實際物件 




本質:WINDOWS程式中並不是用實體地址來標識一個記憶體塊,檔案,任務或動態裝入模組的,相反的,WINDOWS API給這些專案分配確定的控制代碼,並將控制代碼返回給應用程式,然後通過控制代碼來進行操作。 




但是必須注意的是程式每次從新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成是一個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電影院售給我們的門票總是不同的一個座位是一樣的道理。