Я пытаюсь создать регистратор событий в C#. программа имеет текстовое поле и во время выполнения должна открыть документ блокнота, который покажет активность пользователя в текстовом поле. Пока я знаю, как сохранять файлы в текстовый файл, а также открывать их. Я также знаю, как использовать событие textChanged для 2 текстовых полей, но не с помощью приложения для редактирования текста, такого как блокнот. может кто-то помочь указать мне в правильном направлении и посоветуйте мне, как это сделать. разумеем длинный текст, надеюсь, что я это чувствую :-)Application Activity Logger
ответ
Вы можете запустить процесс с использованием Sytem.Diagnostics.Process, а затем использовать SendKey.Send, чтобы отправить текст в окно notpad. Попробуйте это:
Добавьте эти API вызовы к классу:
[DllImport("user32.dll",EntryPoint="FindWindow")]
private static extern IntPtr FindWindow(string sClass, string sWindow);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
Добавьте это в обработчик событий (textbox.TextChanged/button.Clicked):
IntPtr notepadHwnd = FindWindow("Notepad",(string)null);
if (notepadHwnd == null)
{
System.Diagnostics.Process notepad = new Process();
notepad.StartInfo.FileName = "notepad.exe";
notepad.Start();
System.Threading.Thread.Sleep(500);
notepadHwnd = FindWindow("Notepad",(string)null);
}
// get the text from the users input
string msg = textBox1.Text;
if (notepadHwnd != null)
{
SetForgroundWindow(notepadHwnd);
// Send the string to the application that has focus
// note: If you need to erase existing text (ie. on TextChanged)
// you could use SendKeys.Send("^a{BACKSPACE}"); to select all and delete
SendKeys.Send(msg);
}
Edit: Добавлено FindWindow и SetForgroundWindow. Этот код предполагает, что вы не открыли никаких других окон в блокноте
Я использовал Process.Start ("notepad.exe", "path"); для первых 3 строк вашего кода, которые оба дают мне тот же результат, что и я. он открывает новые несколько файлов блокнота каждый раз, когда я печатаю что-то в текстовом поле. в основном, 'вместо чтения ввода текстового поля, он записывает ввод и игнорирует текстовое поле. – YoungDisciple09
Я не буду следовать за вами. вы говорите, что он открывает блокнот, а затем перезаписывает текст из textbox1.Text обратно в текстовое поле1? – jbriggs
Я отредактировал свой ответ, чтобы попытаться заставить блокнот быть активным окном для работы SendKeys. – jbriggs
- 1. Application Logger
- 2. C# Application logger
- 3. Xamarin Activity vs Application
- 4. Xamarin.MAC Activity logger (клавиатура, мышь, активное окно)
- 5. AlertDialog - Activity vs Application Context
- 6. Activity escape from Android Application
- 7. Невозможно запустить Activity из класса Application - Android
- 8. Android Application Force Crash at main Activity Launch
- 9. Можно ли вызвать метод в классе Activity из класса Application?
- 10. Активный ресурс приложения BroadcastReceiver, Service и Activity Application?
- 11. Как заменить NLog Logger новым экземпляром Logger?
- 12. Как обернуть log4j logger внутри slf4j logger?
- 13. Zend Framework Logger: Zend DB Logger
- 14. Java public Logger
- 15. Activity-Paw Activity
- 16. Анимация Activity in Activity
- 17. Uninitialized постоянная Logger :: Применение
- 18. Netbeans Logger
- 19. BlackBerry logger
- 20. Activity Recognition return stale activity
- 21. Blank Activity vs Empty Activity
- 22. Android Search Activity in Single Activity
- 23. Logging Retrofit to Logback Logger
- 24. Программно настроить Jetty Logger, используя Logger с зависимостями конструктора
- 25. Rails logger formatting - insert method name call logger method
- 26. Python logger, print child logger% (name) без родительского имени
- 27. Ошибка с Zipaligned Application
- 28. onActivityResult не запускает Logger
- 29. Шаблон для Slf4j logger
- 30. SLF4J as SpringFramework Logger
Непонятно, что вы пытаетесь сделать с помощью Блокнота здесь. Вы пытаетесь ввести текст в исполняемый экземпляр Notepad? Почему бы вам просто не отобразить текст в окне приложения? – David
Я хочу, чтобы пользовательский ввод отображался в блокноте во время выполнения – YoungDisciple09
Я не уверен, что вы можете это сделать, кроме того, что, возможно, получив дескриптор окна «Блокнот» и отправив ему клавиши, используя некоторые низкоуровневые API Windows. Но это похоже на целую работу только для отображения текста. В приложении есть встроенные элементы управления, которые могут отображать текст. Вы можете просто открыть форму с помощью одного большого TextBox и легко записать в это * много *. – David