控制台 對視窗控制代碼的操作

2022-07-14 17:12:09 字數 2216 閱讀 5224

視窗控制代碼的含義:在windows中,控制代碼是乙個系統內部資料結構的引用。例如當你操作乙個視窗,或說是乙個delphi窗體時,系統會給你乙個該視窗的控制代碼,系統會通知你:你正在操作142號視窗,就此你的應用程式就能要求系統對142號視窗進行操作——移動視窗、改變視窗大小、把視窗最小化等等。實際上許多windows api函式把控制代碼作為它的第乙個引數,如gdi(圖形裝置介面)控制代碼、選單控制代碼、例項控制代碼、位圖控制代碼等,不僅僅侷限於視窗函式。換句話說,控制代碼是一種內部**,通過它能引用受系統控制的特殊元素,如視窗、位圖、圖示、記憶體塊、游標、字型、選單等。

視窗控制代碼是什麼:在windows中,控制代碼是和物件一一對應的32位無符號整數值。物件可以對映到唯一的控制代碼,控制代碼也可以對映到唯一的物件。

為什麼我們需要控制代碼:更準確地說,是windows需要控制代碼。windows需要向程式設計師提供必要的程式設計介面,在這些介面中,允許程式設計師訪問、建立和銷毀物件。但是,出於封裝地考慮,windows並不想向程式設計師返回指標。指標包含了太多的資訊。首先指標給出了物件儲存的確切位置;其次,要操作乙個指標,程式設計師必須知道指標所指物件的內部結構特徵,也即,windows必須向程式設計師暴露相應的資料結構,而這些資料結構也許是作業系統想向程式設計師隱藏的。如果說com技術向使用者隱藏了資料,只暴露了介面並只允許按介面定義的方法運算元據的話,控制代碼這種方式則允許你按自己的方式直接運算元據,但windows又不向你直接暴露資料。直接運算元據是程式設計師需要的,不暴露資料是windows所需要的,控制代碼封裝方式實現了各取所需

控制代碼如何與物件對映:封裝背後,必須有乙個地方可以實現解碼,以實現控制代碼和物件的相互轉換。在windows中,存在兩種對映方式:a. 全等對映。也即,控制代碼本身就是乙個指標。對映在這裡只是型別轉換而已。這種情況有,程序例項控制代碼或模組控制代碼,以及資源控制代碼等等。b. 基於**的對映。這是物件指標與控制代碼之間最普通的對映機制。作業系統建立**,並儲存所有要考慮的物件。需要建立新物件時,要先在**中找到空入口,然後把表示物件的資料添入其中。當物件被刪除時,它的資料成員和其在表中的入口被釋放。

視窗控制代碼的實際操作:我們可以設定控制台窗體的大小,下面是核心**

1 [dllimport("

user32.dll

", entrypoint = "

findwindow

")] //

找到窗體

2private

static

extern intptr findwindow(string lpclassname, string

lpwindowname);

3 [dllimport("

user32.dll

", entrypoint = "

findwindowex

")] //

找子窗體

4private

static

extern intptr findwindowex(intptr hwndparent, intptr hwndchildafter, string lpszclass, string

lpszwindow);

5 [dllimport("

user32.dll

", entrypoint = "

sendmessage

")] //

用於傳送資訊給窗體

6private

static

extern

int sendmessage(intptr hwnd, int msg, intptr wparam, string

lparam);

7 [dllimport("

user32.dll

", entrypoint = "

showwindow

")] //

窗體展示的設定

8private

static

extern

bool showwindow(intptr hwnd, int type);

1

public

static

void

setform()

2

控制台程式函式主入口進行方法的呼叫

1

static

void main(string

args)

2

得到控制台視窗的控制代碼

呼叫 getconsoletitle 來儲存當前的控制台視窗標題。呼叫 setconsoletitle 來將控制台標題更改為乙個唯一的標題。呼叫 sleep 40 以確保已更新視窗標題。呼叫 findwindow null,uniquetitle 以獲取 hwnd,此呼叫將返回 hwnd,如果操作失...

得到控制台視窗的控制代碼

呼叫 getconsoletitle 來儲存當前的控制台視窗標題。呼叫 setconsoletitle 來將控制台標題更改為乙個唯一的標題。呼叫 sleep 40 以確保已更新視窗標題。呼叫 findwindow null,uniquetitle 以獲取 hwnd,此呼叫將返回 hwnd,如果操作失...

獲取控制台視窗的控制代碼(hWnd)

謝謝合作 測試環境 vc 6.0 視窗,都有其唯一的控制代碼 hwnd 得到了視窗控制代碼,能夠做很多事情。控制台程式,若能在視窗效果上下文章,那麼這個第三方工具將會很成功。網上給出的常用方法 hwnd hw findwindow consolewindowclass null 這不失為乙個好方法,...