正在閱讀:讓你的控制臺程序也支持自動補齊讓你的控制臺程序也支持自動補齊

2004-03-29 10:06 出處:CSDN 作者:xstring 責任編輯:linjixiong
  對Windows 2000, Windows XP, Windows Server 2003操作系統(tǒng)下的“命令提示符程序 (cmd.exe)”了解稍多的人都會知道“命令提示符”有幾個很好用的功能。一、支持命令歷史記錄,可以用上下鍵來切換以前輸入的命令;二、支持快捷鍵功能(F1~F9)[具體每個鍵的功能請讀者自己試吧];三、支持目錄/文件名的自動補齊,這樣可以快速輸入目錄/文件名。

  這些功能對于用戶來講是非常友好的,可以讓用戶更方便的輸入和編輯命令。我也相信任何一個寫控制臺程序的人都希望在自己的程序當中能夠實現(xiàn)這樣的功能。

  那么如何讓自己的程序有如上的功能呢?

  對于上面提到前兩個功能,操作系統(tǒng)本身已經(jīng)提供了,你只需要簡單的調用ReadConsole這個API就可以了。這個API會跟據(jù)你輸入時的按鍵來執(zhí)行這些功能。
 
  對于第三個功能,MSDN中未曾提及,ReadConsole API的說明中任何一點都和此功能無關。實際上自動補齊功能要用到ReadConsole的一個公開的功能,而且只有Unicode版本的ReadConsoleW提供了該功能,ANSI版本的ReadConsoleA并不支持。

  我們先看看ReadConsole這個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這個參數(shù)必須為NULL值,當然MSDN中是這么提的,但對于ReadConsoleW來講就不是了,因為自動補齊這個功能要靠ReadConsoleW的lpReserved參數(shù)了。

  該參數(shù)不為NULL時,可以指向一個如下的結構體

  struct read_console_param

  {

  DWORD cbSize;

  DWORD dwInitLen;

  DWORD dwWakeMask;

  DWORD dwUnknown;
  };

  其中每個成員變量的意義如下




察看評論詳細內容 我要發(fā)表評論
作者筆名簡短內容 發(fā)表時間
:

鍵盤也能翻頁,試試“← →”鍵

相關文章

302 Found

302 Found


Powered by Tengine
tengine