對(duì)Windows 2000, Windows XP, Windows Server 2003操作系統(tǒng)下的“命令提示符程序 (cmd.exe)”了解稍多的人都會(huì)知道“命令提示符”有幾個(gè)很好用的功能。一、支持命令歷史記錄,可以用上下鍵來(lái)切換以前輸入的命令;二、支持快捷鍵功能(F1~F9)[具體每個(gè)鍵的功能請(qǐng)讀者自己試吧];三、支持目錄/文件名的自動(dòng)補(bǔ)齊,這樣可以快速輸入目錄/文件名。 這些功能對(duì)于用戶來(lái)講是非常友好的,可以讓用戶更方便的輸入和編輯命令。我也相信任何一個(gè)寫控制臺(tái)程序的人都希望在自己的程序當(dāng)中能夠?qū)崿F(xiàn)這樣的功能。 那么如何讓自己的程序有如上的功能呢? 對(duì)于上面提到前兩個(gè)功能,操作系統(tǒng)本身已經(jīng)提供了,你只需要簡(jiǎn)單的調(diào)用ReadConsole這個(gè)API就可以了。這個(gè)API會(huì)跟據(jù)你輸入時(shí)的按鍵來(lái)執(zhí)行這些功能。 對(duì)于第三個(gè)功能,MSDN中未曾提及,ReadConsole API的說(shuō)明中任何一點(diǎn)都和此功能無(wú)關(guān)。實(shí)際上自動(dòng)補(bǔ)齊功能要用到ReadConsole的一個(gè)公開的功能,而且只有Unicode版本的ReadConsoleW提供了該功能,ANSI版本的ReadConsoleA并不支持。 我們先看看ReadConsole這個(gè)API的原型(from MSDN) BOOL ReadConsole( HANDLE hConsoleInput, // handle to console input buffer LPVOID lpBuffer, // data buffer DWORD nNumberOfCharsToRead, // number of characters to read LPDWORD lpNumberOfCharsRead, // number of characters read LPVOID lpReserved // reserved ); 在MSDN中提到參數(shù)lpReserved這個(gè)參數(shù)必須為NULL值,當(dāng)然MSDN中是這么提的,但對(duì)于ReadConsoleW來(lái)講就不是了,因?yàn)樽詣?dòng)補(bǔ)齊這個(gè)功能要靠ReadConsoleW的lpReserved參數(shù)了。 該參數(shù)不為NULL時(shí),可以指向一個(gè)如下的結(jié)構(gòu)體 struct read_console_param { DWORD cbSize; DWORD dwInitLen; DWORD dwWakeMask; DWORD dwUnknown; }; 其中每個(gè)成員變量的意義如下 |
正在閱讀:讓你的控制臺(tái)程序也支持自動(dòng)補(bǔ)齊讓你的控制臺(tái)程序也支持自動(dòng)補(bǔ)齊
2004-03-29 10:06
出處:CSDN
作者:xstring
責(zé)任編輯:linjixiong
鍵盤也能翻頁(yè),試試“← →”鍵
相關(guān)文章
302 Found
Powered by Tengine