2012-01-22 2 views
0

Здравствуйте, я делаю программу, которая заметит, когда будет нажата конкретная клавиша, и напишите конкретную букву, в которой человек пишет. Но у меня есть проблема, это то, что я не хочу, чтобы у меня была программа, как «сделанная одна». вместо этого я хочу, чтобы вызвать и выписать spesifick письмо или текст, в котором пользователь пишет, как пользователь нажимает кнопку ...C# Обратите внимание, что при нажатии клавиши

Я надеюсь, вы понимаете, и спасибо за помощь

вот код я получаю до сих пор:

 static void Main(string[] args) 
    { 

     while (true) 
     { 
      ConsoleKeyInfo cki; 
      cki = Console.ReadKey(); 
      Console.WriteLine(cki.Key.ToString()); 

      if (cki.Key.ToString() == "A" && (cki.Modifiers & ConsoleModifiers.Control) != 0) 
      { 
       System.Threading.Thread.Sleep(400); 
       TSendKeys.SendWait("ø"); 
      } 
     } 
    } 
+0

Все это вы хотите видеть только в консоли, не так ли? –

+0

Вы хотите, чтобы все ввод клавиатуры обрабатывался вашим приложением? –

+0

Не «отмеченный один», вы хотите, чтобы эта программа запускалась в фоновом режиме, захватывать нажатия клавиш в другом активном приложении, например, кейлоггером? Посмотрите, поможет ли вам следующая ссылка: [Keylogger in VB.NET] (http://revolt.hyperhub.info/blog.php?action=read&item=15). –

ответ

0

Но у меня есть проблема, это то, что я не хочу быть необходимости иметь программу как «цветовые один». вместо этого я хочу, чтобы вызвать и написать из spesifick в письме или текст, в котором пользователь пишет как пользователь нажимает клавишу ...

Читая это, я думаю, что вы говорите о Windows Hooks. Это означает, что пользователь печатает что-то в другом приложении, допустим, Word, но вы можете поймать этот ключ (даже если он не был нажат в вашем приложении). Если это то, что вы на самом деле хотите, this Статья CodeProject - это то, что вам нужно.

0

Вы, вероятно, придется использовать крюк, this article объясняет, как это подробно описано

0

Один подход заключается в эмулировать поведение Console.ReadLine, в то время как при чтении актуальности и вывода каждого символа отдельно. При чтении специальных последовательностей, таких как CTRL + A, поведение может быть перехвачено и введен символ. Ниже приведена базовая реализация.

private static string EmulateReadLine() 
{ 
    StringBuilder sb = new StringBuilder(); 
    int pos = 0; 
    Action<int> SetPosition = (i) => 
     { 
      i = Math.Max(0, Math.Min(sb.Length, i)); 
      pos = i; 
      Console.CursorLeft = i; 
     }; 
    Action<char, int> SetLastCharacter = (c, offset) => 
     { 
      Console.CursorLeft = sb.Length + offset; 
      Console.Write(c); 
      Console.CursorLeft = pos; 
     }; 
    ConsoleKeyInfo key; 
    while ((key = Console.ReadKey(true)).Key != ConsoleKey.Enter) 
    { 
     int length = sb.Length; 
     if (key.Key == ConsoleKey.LeftArrow) 
     { 
      SetPosition(pos - 1); 
     } 
     else if (key.Key == ConsoleKey.RightArrow) 
     { 
      SetPosition(pos + 1); 
     } 
     else if (key.Key == ConsoleKey.Backspace) 
     { 
      if (pos == 0) continue; 
      sb.Remove(pos - 1, 1); 
      SetPosition(pos - 1); 
     } 
     else if (key.Key == ConsoleKey.Delete) 
     { 
      if (pos == sb.Length) continue; 
      sb.Remove(pos, 1); 
     } 
     else if (key.Key == ConsoleKey.Home) 
      SetPosition(0); 
     else if (key.Key == ConsoleKey.End) 
      SetPosition(int.MaxValue); 
     else if (key.Key == ConsoleKey.Escape) 
     { 
      SetPosition(0); 
      sb.Clear(); 
     } 
     // CUSTOM LOGIC FOR CTRL+A 
     else if (key.Key == ConsoleKey.A && 
      (key.Modifiers & ConsoleModifiers.Control) != 0) 
     { 
      string stringtoinsert = "^"; 
      sb.Insert(pos, stringtoinsert); 
      SetPosition(pos + stringtoinsert.Length); 
     } 
     else if (key.KeyChar != '\u0000') // keys that input text 
     { 
      sb.Insert(pos, key.KeyChar); 
      SetPosition(pos + 1); 
     } 

     // replace entire line with value of current input string 
     Console.CursorLeft = 0; 
     Console.Write(sb.ToString()); 
     Console.Write(new string(' ', Math.Max(0, length - sb.Length))); 
     Console.CursorLeft = pos; 
    } 

    Console.WriteLine(); 
    return sb.ToString(); 
} 

Для привода:

static void Main(string[] args) 
{ 
    string input = EmulateReadLine(); 
    Console.WriteLine("Entered {0}", input); 
} 

При входе в линию, нажав CTRL + A вставит "^" характер. Клавиши со стрелками, Escape, Home и End должны функционировать, как обычно, для Console.ReadLine. (Чтобы упростить код, пользовательская логика ввода жестко связана.)

Смежные вопросы