mocodeproject Ответов: 2

Как отправить комбинацию клавиш shift+win+left с помощью клавиш sendkeys в C#?


Я пытался отправить сфокусированное окно на второй монитор с помощью комбинации клавиш Shift+Win+LEFT с помощью клавиш sendkeys в c#, но по какой-то причине окно не перемещается на второй монитор. Это работает, когда я физически нажимаю на эти клавиши на клавиатуре, но не прагматично. Обратите внимание, что я уже знаю, как вывести желаемое окно на передний план, и теперь оно работает нормально, я хочу отправить это желаемое окно на второй монитор, используя комбинацию клавиш с помощью c# Shift+Win+LEFT я не хочу использовать SetWindowPos(proceso.MainWindowHandle, 0, монитор.Слева, монитор.Сверху, монитор.Ширина, монитор.Высота, 0);

вот мои попытки, которые я пробовал Заранее благодарю вас за вашу помощь, кстати, я все еще ищу и пытаюсь.

Что я уже пробовал:

испытание 1:
private void btnSendToSecondDisplay_Click(object sender, EventArgs e)
{
  bringToFront("Task Manager");//This lets the "task manager" window to be in the foreground and has the focus set to it
  SendKeys.Send(Keys.ShiftKey.ToString());
  SendKeys.Send(Keys.LWin.ToString());
  SendKeys.Send("{LEFT}");
}


след 2:
private void btnSendToSecondDisplay_Click(object sender, EventArgs e)
{
  bringToFront("Task Manager");//This lets the "task manager" window to be in the foreground and has the focus set to it
  SendKeys.Send("+"+Keys.LWin.ToString()+"{LEFT}");
}


испытание 3:
private void btnSendToSecondDisplay_Click(object sender, EventArgs e)
{
  bringToFront("Task Manager");//This lets the "task manager" window to be in the foreground and has the focus set to it
  SendKeys.Send("{SHIFTDOWN}");
  SendKeys.Send("{APPSKEY}");
  SendKeys.Send("{LEFT}");
}


испытание 4:
private void btnSendToSecondDisplay_Click(object sender, EventArgs e)
{
  bringToFront("Task Manager");//This lets the "task manager" window to be in the foreground and has the focus set to it
  SendKeys.Send("{SHIFTDOWN}{APPSKEY}{LEFT}");
}


испытание 5:
private void btnSendToSecondDisplay_Click(object sender, EventArgs e)
{
  bringToFront("Task Manager");//This lets the "task manager" window to be in the foreground and has the focus set to it
  SendKeys.Send("+(^{ESC}){LEFT}");
}

2 Ответов

Рейтинг:
1

phil.o

Так этот пост может помочь: Отправка ключа Windows с помощью SendKeys[^]
Кто-то предположил, что клавиша Windows совпадает с комбинацией клавиш Ctrl+Esc.
Так может быть, что это будет делать трюк:

SendKeys.Send("+(^{ESC}{LEFT})");

Это незначительно отличается от вашего пятого испытания, но это то, что я понял из Отправить ключи.Метод Отправки (Строка)[^] о синтаксисе комбинаций клавиш.
Если это не сработает, то вы могли бы взглянуть на InputSimulator (Codeplex)[^] как предложено в посте.
Я не могу проверить это на своем настоящем компьютере, извините за это. Надеюсь, что это поможет вам двигаться в правильном направлении.
Любезно.


mocodeproject

Спасибо за ваш ответ, я действительно пробовал

SendKeys.Send("+(^{ESC}{LEFT})");
но все равно не повезло, я думаю, что операционная система не переводит
^{ESC}
чтобы быть таким же, как при фактическом нажатии клавиши windows start на клавиатуре, потому что когда я физически нажимаю на эти клавиши на физической клавиатуре, окно, сфокусированное на переднем плане, не перемещается на дополнительный монитор. Я собираюсь попробовать ... http://inputsimulator.codeplex.com/ ссылка и посмотреть, если имитированные ключи исправить эту проблему или нет.

Рейтинг:
1

mocodeproject

Спасибо за ваш ответ, я действительно пробовал

SendKeys.Send("+(^{ESC}{LEFT})");
но все равно не повезло, я думаю, что операционная система не переводит
^{ESC}
чтобы быть таким же, как при фактическом нажатии клавиши windows start на клавиатуре, потому что когда я физически нажимаю на эти клавиши на физической клавиатуре, окно, сфокусированное на переднем плане, не перемещается на дополнительный монитор. Я собираюсь попробовать ... http://inputsimulator.codeplex.com/ ссылка и посмотреть, если имитированные ключи исправить эту проблему или нет.