我在实现一个类似cmd的程序,程序内置一些命令,通过tab键自动补全命令.但是控制台没有自己的窗口过程函数,无法处理按键消息,setwindowshook也对控制台程序无效.虽然普通的getchar可以判断是否是tab,但是命令是以行为单位的,还有backspace退格等问题,所以请教大家有没有好的方法
学习是最好的投资!
GNU Readline 函式庫 - 使用 GNU Readline 程式設計
以前想過這個問題:用getchar可以。 ch=getchar(),每次輸入就判斷下ch的值。 如果backspace轉義字元'b',直接輸出就可以覆蓋了。 如果是TAB鍵的補全T,實作將你要補全的存在數組裡,然後去匹配。具體形式有 1、在當前遊標的下一行輸出一個可匹配的字符,設定要匹配就輸入Enter鍵之類的,否則就不管他,這裡需要獲取並保存當前遊標位置,然後跳到下一行,顯示完提示字串後也要刪除。 blabla。 。 2、按TAB鍵直接輸出符合的字串,要儲存原來的點,如果使用者按'esc'就傳回原來的字串,記錄符合數目,輸出'b'就可以。如果繼續按TAB則輸出目前,輸出匹配的下一個。
有幾個函數提供參考:getch() // conio.h 輸入的字元不會顯示在螢幕上,類似linux輸入密碼的。 ssprintf() 修改字元取得控制台遊標位置等等。 。 。 。
我以前收藏的文章,"如何先cmd輸入密碼顯示*號碼 "http://www.cnblogs.com/jiangkun86/archive/2011/09/19/2181910.html
GNU Readline 函式庫 - 使用 GNU Readline 程式設計
以前想過這個問題:
用getchar可以。 ch=getchar(),每次輸入就判斷下ch的值。
如果backspace轉義字元'b',直接輸出就可以覆蓋了。
如果是TAB鍵的補全T,實作將你要補全的存在數組裡,然後去匹配。具體形式有
1、在當前遊標的下一行輸出一個可匹配的字符,設定要匹配就輸入Enter鍵之類的,否則就不管他,這裡需要獲取並保存當前遊標位置,然後跳到下一行,顯示完提示字串後也要刪除。 blabla。 。
2、按TAB鍵直接輸出符合的字串,要儲存原來的點,如果使用者按'esc'就傳回原來的字串,記錄符合數目,輸出'b'就可以。如果繼續按TAB則輸出目前,輸出匹配的下一個。
有幾個函數提供參考:
getch() // conio.h
輸入的字元不會顯示在螢幕上,類似linux輸入密碼的。
ssprintf()
修改字元
取得控制台遊標位置等等。 。 。 。
我以前收藏的文章,"如何先cmd輸入密碼顯示*號碼 "
http://www.cnblogs.com/jiangkun86/archive/2011/09/19/2181910.html