2010-09-28 63 views
3

所以,這裏有一個奇怪的問題:當按下控制檯左上角的「C:\」按鈕時,我有沒有辦法讓禁用菜單?在控制檯應用程序中禁用粘貼

我正在製作一款遊戲,爲了好玩,但如果玩家能夠將單詞粘貼到命令行中,它將帶走很多樂趣。

我還沒有發現任何有關它的主題,所以我想知道是否有人有關於如何完成這項工作的想法,或至少是解決方法。

在此先感謝!

編輯:一個簡單的reg-ex用於任何^角色的工作?或者控制檯不使用^ C和^ V?

回答

2

a)使用GetConsoleWindow得到窗口句柄;使用子類化和掛鉤來過濾鼠標和鍵盤事件。儘管這種方法可能有很多隱藏的障礙,因爲Windows控制檯實現細節。

b)使用時序分析。測量擊鍵之間的時間間隔,如果此間隔不合理,請忽略輸入。您可能需要嘗試找出效果最好的標準。也許最好測量輸入字的輸入時間,而不是字符間間隔。

請注意,將文本粘貼到Windows控制檯是通過鍵盤輸入模擬實現的,即將某些東西粘貼到控制檯時,控制檯應用程序會觀察一系列按鍵/按鍵事件。

+0

這聽起來像個好主意,雖然我對整個控制檯應用程序有點新鮮。所以我認爲目前對我來說有點困難,但我會在稍後嘗試進行時序分析。謝謝 – Nick 2010-09-28 11:31:54

+1

不要忘記,你也可以使用下面的鍵盤快捷方式粘貼(英文Windows版本):Alt + Space,E,P. – 2010-09-28 11:51:36

+0

@ 0xA3 - 你是對的。即如果使用鉤子方法,則必須過濾鍵盤事件以及鼠標事件。我會修改答案,謝謝! – atzz 2010-09-28 12:30:24

2

我不確定控制檯是否支持通過鍵盤組合粘貼,您可以通過菜單粘貼或者右鍵單擊控制檯(這取決於控制檯是如何設置的)。

我建議更好的解決方案是創建一個winforms應用程序,而不是在控制檯應用程序中控制輸入/輸出。

否則,一種解決方法可能是每隔100ms左右調用Clipboard.Clear以確保他們永遠不會有時間複製和粘貼任何東西,直到您將其清除爲止,但這當然可能會讓您感到不安和/或混淆用戶如果他們有你的應用程序在後臺運行,並試圖在其他軟件中做一些工作。