正在閱讀:讓你的控制臺(tái)程序也支持自動(dòng)補(bǔ)齊讓你的控制臺(tái)程序也支持自動(dòng)補(bǔ)齊

2004-03-29 10:06 出處:CSDN 作者:xstring 責(zé)任編輯:linjixiong
  對(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è)成員變量的意義如下




察看評(píng)論詳細(xì)內(nèi)容 我要發(fā)表評(píng)論
作者筆名簡(jiǎn)短內(nèi)容 發(fā)表時(shí)間
:

鍵盤也能翻頁(yè),試試“← →”鍵

相關(guān)文章

302 Found

302 Found


Powered by Tengine
tengine