2013-02-15 3 views
0

Я хочу написать текст в текущем выбранном приложении, но его почтовый мусор и вызвать странные вещи.Написание текста в другое окно

using System; 
using System.Windows.Forms; 
using System.Collections.Generic; 
using System.Threading; 
using System.Linq; 
using System.Runtime.InteropServices; 

namespace i_allbwn 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      Thread.Sleep(500); 
      ActionWithChance.brif_allbwn(); 

      Console.ReadKey(); 
     } 
    } 
    class ActionWithChance 
    { 
     [DllImport("user32.dll", SetLastError = true)] 
     static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 

     public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag 
     public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag 

     public static void brif_allbwn() 
     { 
      argraffu(new String[] { 
        "line1", 
        "line2", 
        "line3", 

      } 
        ); 
     } 

     public static void allbwn(Byte[] Name) 
     { 
      for (int i = 0; i < Name.Length; i++) 
      { 
       Console.WriteLine("Writing " + (Char)Name[i]); 
       keybd_event((Byte)Name[i], 0, KEYEVENTF_EXTENDEDKEY, 0); 
       Thread.Sleep(10); 
       keybd_event((Byte)Name[i], 0, KEYEVENTF_KEYUP, 0); 
      } 
     } 
     public static void argraffu(String[] text) 
     { 
      foreach (String s in text) 
      { 
       allbwn(ToByteArray(s)); 
       keybd_event((Byte)'\r', 0, KEYEVENTF_EXTENDEDKEY, 0); 
       Thread.Sleep(10); 
       keybd_event((Byte)'\r', 0, KEYEVENTF_KEYUP, 0); 
      } 
     } 

     public static Byte[] ToByteArray(String StringToConvert) 
     { 

      Char[] CharArray = StringToConvert.ToCharArray(); 

      Byte[] ByteArray = new Byte[CharArray.Length]; 

      for (int i = 0; i < CharArray.Length; i++) 
      { 

       ByteArray[i] = Convert.ToByte(CharArray[i]); 

      } 

      return ByteArray; 

     } 

    } 
} 
+0

Что это за приложение другого приложения? Как настроить фокус клавиатуры на другое приложение? И, наконец, почему этот сон на старте? –

+0

другое приложение не применимо, поскольку оно может быть любым, что принимает ввод текста. нажав на приложение, спящий режим предназначен только для целей тестирования, так что он не сразу вводит тестовый текст и не заканчивается до того, как я нажму на другое приложение –

+0

, используя SendKeys, http://msdn.microsoft.com/en-us/library/ system.windows.forms.sendkeys.aspx –

ответ

0

Мои функции для делать это, как это:

public const Int32 WM_CHAR = 0x0102; 

    public void SendKeys(string message) 
    { 
     foreach (char c in message) 
     { 
      int charValue = c; 
      IntPtr val = new IntPtr((Int32)c); 
      SendMessage(WindowHandle, WM_CHAR, val, new IntPtr(0)); 
     } 
    } 

В основном то, что я делаю, получаю хэндл приложения, например:

Process proc = Process.GetProcessesByName("Notepad")[0]; 

Затем получают ручку с proc.MainModule.Handle()

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