С# с помощью функции Sendkey для отправки ключа в другое приложение - программирование
Подтвердить что ты не робот

С# с помощью функции Sendkey для отправки ключа в другое приложение

Я хочу отправить конкретный ключ (например, k) в другую программу с именем notepad, а ниже - код, который я использовал:

void sendkey ()
{
    [DllImport ("User32.dll")]
    static extern int SetForegroundWindow(IntPtr point);

    Process p = Process.GetProcessesByName("notepad")[0];
    IntPtr pointer = p.Handle;
    SetForegroundWindow(pointer);
    SendKeys.Send("k");
}

Но код не работает, что не так с кодом?

Отредактировано: Возможно ли, что я отправлю "K" в блокнот без блокнота, чтобы быть активным окном? (например, активное окно = "Google chrome", блокнот находится в backgound, что означает отправку ключа в фоновое приложение)

4b9b3361

Ответ 1

Если блокнот уже запущен, вы должны написать:

// import the function in your class
[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);

//...

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
if( p != null)
{
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    SendKeys.SendWait("k");
}

GetProcessesByName возвращает массив процессов, поэтому вы должны получить первый (или найти тот, который вам нужен).

Если вы хотите запустить notepad и отправить ключ, напишите:

Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");

Единственная ситуация, когда код может не работать, - это когда notepad запускается как Администратор, а ваше приложение не работает.