認識控制台 控制台控制代碼 附著到控制台 關閉控制台

2021-04-06 22:10:50 字數 2526 閱讀 4495

附著到乙個控制台

乙個程序可以使用

attachconsole

函式來附著到乙個控制台上,乙個程序只能附著乙個控制台。

乙個控制台可以有許多程序附著到它上面,呼叫

getconsoleprocesslist

函式可以得到附著到乙個控制台的列表。

關閉乙個控制台

程序可以使用

freeconsole

函式來將其自身從乙個控制台脫離出來。如果其他程序共享這個控制台,控制台不會被銷毀,但呼叫

freeconsole

函式的程序不能在使用它了,在程序呼叫

freeconsole

之後,它可以使用

allocconsole

來建立乙個新的控制台或

attachconsole

來附著到另乙個控制台上。

控制在最後乙個附著的程序關閉的時候或呼叫

freeconsole

的時候被關閉。

控制台控制代碼

控制台程序使用控制代碼來訪問控制台的輸入和螢幕緩衝區。乙個程序可以使用

getstdhandle

、createfile

或createconsolescreenbuffer

函式來開啟這些控制代碼。

getstdhandle

函式提供乙個獲得程序相關的標準輸入(

stdin

)、標準輸出(

stdout

)和標準錯誤(

stderr

)控制代碼。在控制台建立過程中,系統建立這些控制代碼。最初的

stdin

是乙個指向控制台輸入緩衝區的控制代碼,

stdout

和stderr

是控制台活動螢幕緩衝區的控制代碼。然而,

setstdhandle

函式可以改變

stdin

、stdout

、stderr

關聯的控制代碼來重定向標準控制代碼。因為父程序的標準控制代碼可以被子程序繼承,後面呼叫

getstdhandle

函式返回的是重定向的控制代碼。

getstdhandle

返回的控制代碼可以指向其他的控制代碼不一定是控制台

i/o。例如,在建立子程序之前,父親程序使用

setstdhandle

來將stdin

設定為乙個管道控制代碼,那麼這個特性會被子程序繼承。當子程序呼叫

getstdhandle

的時候返回的是管道控制代碼。這意味著父親程序能控制子程序的標準控制代碼,

getstdhandle

返回的控制代碼有

generic_read|generic_write

訪問許可權,當然如果在

setstdhandle

的時候設定較少的訪問許可權另外說。

getstdhandle

返回的控制代碼值不是0,

1,

2,因此在

stdio.h

(stdin

,stdout

和stderr

)中預定義的流常量不能在需要乙個控制台控制代碼的函式中使用。

createfile

函式即使

stdin

和stdout

沒有被重定向的情況下,也可以讓乙個程序得到輸入緩衝區和活動螢幕緩衝區的控制代碼。為了開啟乙個控制台輸入緩衝區的控制代碼,需要在呼叫

createfile

的時候指定

conin$

值,而指定

conout$

值可以開啟乙個控制台活動螢幕緩衝區的控制代碼。

createfile

函式使你可以通過它返回的控制代碼來讀寫操作。 函式

createconsolescreenbuffer

建立乙個新的螢幕緩衝區且返回這個控制代碼,這個控制代碼可以在所有接受乙個控制輸出作為引數的函式中使用。新的螢幕緩衝區不會是活動的,只有呼叫

setconsoleactivescreenbuffer

函式的時候指定該值才會被設定為活動的。活動螢幕緩衝區的改變不會改變

getstdhandle

的值,同樣使用

setstdhandle

改變stdout

控制代碼也不會影響活動螢幕緩衝區。

createfile

和createconsolescreenbuffer

函式返回的控制代碼能在任何需要控制台輸入緩衝區或控制台螢幕緩衝區作為引數的函式中,

getstdhandle

返回的控制代碼只要沒有被重定向為其他的控制代碼都可以在控制台函式中使用,如果標準控制代碼被重定向為指向乙個檔案或管道,這些控制代碼只能被

readfile

和writefile

函式使用。

程序可以使用

duplicatehandle

函式來建立乙個控制台控制代碼的副本,可以指定不同的訪問和繼承許可權。注意,程序可以自己使用而建立乙個控制台控制代碼副本。這與其他的控制代碼型別不同(例如檔案、管道、訊號量物件),這些型別可以通過

duplicatehandle

來建立乙個有效的控制代碼,而別的程序也可以使用。

認識控制台 控制台控制代碼 附著到控制台 關閉控制台

1.附著到乙個控制台 乙個程序可以使用 attachconsole 函式來附著到乙個控制台上,乙個程序只能附著乙個控制台。乙個控制台可以有許多程序附著到它上面,呼叫 getconsoleprocesslist 函式可以得到附著到乙個控制台的列表。2.關閉乙個控制台 程序可以使用 freeconsol...

控制台輸出控制

by jingzhongrong 通過win32api提供的函式,可以對控制台程式的輸出進行控制,例如字型顏色 標題文字,以及各種屬性等等。主要使用到的函式以及宣告如下 handle getstdhandle dword nstdhandle 此函式用於獲取控制台輸出 輸入控制代碼。得到控制代碼之後...

沒有控制台視窗的控制台程式

include include pragma comment linker,subsystem windows entry maincrtstartup int main int argc,char argv 編譯後執行程式會彈出乙個訊息框,而沒有背後的控制台視窗。再看看下面的 include in...