Отправка ключей в процесс, запущенный моим приложением, не работает - PullRequest
0 голосов
/ 15 октября 2019

Я создал приложение Windows Form, используя C #, и у меня есть приложение, которое я хочу запустить. Я успешно запускаю приложение как администратор, и следующее, что я хочу сделать, это отправить приложению несколько клавиш, в частности Alt и клавиши со стрелками и ввести. Я использую функцию FindWindow, чтобы найти окно, используя его имя. Затем я устанавливаю фокус на свое приложение, используя функцию SetForeground, а затем, наконец, отправляю ему ключи.

Чтобы проверить, верен ли мой код, я пытаюсь отправить ключи в блокнот с заголовком «Без названия - Блокнот». "и это работает. Но если я заменю это названием приложения, оно не будет работать. Я использовал инструмент «spy ++», предоставляемый Visual Studio. Я запускаю свое приложение. Скопируйте его имя класса и заголовок окна, вставьте его в функцию FindWindow, но оно все равно не будет работать.

   [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
      public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

   [DllImport("USER32.DLL")]
      public static extern bool SetForegroundWindow(IntPtr hWnd);



Process myProcess = new Process();
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.FileName = finalString; 
myProcess.StartInfo.CreateNoWindow = true; 
myProcess.StartInfo.Verb = "runas"; 
myProcess.StartInfo.Arguments = "--AutoInject --EmulateController"; 
myProcess.Start(); String Pid = "" + myProcess.Id;

/* The variables found using spy++

Window Caption = [DEBUG] PS4 Macro - v0.5.2 (BETA)
Class Name = WindowsForms10.Window.8.app.0.31c915c_r6_ad1

*/

IntPtr AppHandle = FindWindow(null, "[DEBUG] PS4 Macro - v0.5.2 (BETA)"); 
if (AppHandle == IntPtr.Zero) 
{ 
    MessageBox.Show("Something's wrong I can feel it");
    return;
} 
    SetForegroundWindow(AppHandle);
    SendKeys.SendWait("^(o)");

После запуска приложения приложение запускается, но клавиша ctrl + o не достигает его. Он должен получить команду ctrl + o. Также обратите внимание: при запуске приложения строка меню моей формы не становится белой, т. Е. Возможно, она не теряет фокус. Строки меню моей формы и запущенного приложения окрашены в черный цвет.

1 Ответ

0 голосов
/ 15 октября 2019

Я думаю, вам нужно использовать

AllowSetForegroundWindow(AppHandle);
SetForegroundWindow(AppHandle);

Включает указанный процесс для установки окна переднего плана с помощью функции SetForegroundWindow .

...