附著到乙個控制台
乙個程序可以使用
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...