Как предположил Стивен Ли Паркер, действительно возможно послать нажатие клавиши в определенное окно.То есть, учитывая, что у вас есть дескриптор окна вашего браузера.
Кроме того, ваш браузер выбора должен поддерживать горячую клавишу для закрытия отдельных вкладок, но большую часть времени работает Ctrl + W.* С помощью:
using System.Runtime.InteropServices;
и
[DllImportAttribute("user32.dll", EntryPoint = "SetForegroundWindow")]
[return: MarshalAsAttribute(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow([InAttribute()] IntPtr hWnd);
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
byte W = 0x57; //the keycode for the W key
public static void Send(byte KeyCode, bool Ctrl, bool Alt, bool Shift, bool Win)
{
byte Keycode = (byte)KeyCode;
uint KEYEVENTF_KEYUP = 2;
byte VK_CONTROL = 0x11;
byte VK_MENU = 0x12;
byte VK_LSHIFT = 0xA0;
byte VK_LWIN = 0x5B;
if (Ctrl)
keybd_event(VK_CONTROL, 0, 0, 0);
if (Alt)
keybd_event(VK_MENU, 0, 0, 0);
if (Shift)
keybd_event(VK_LSHIFT, 0, 0, 0);
if (Win)
keybd_event(VK_LWIN, 0, 0, 0);
//true keycode
keybd_event(Keycode, 0, 0, 0); //down
keybd_event(Keycode, 0, KEYEVENTF_KEYUP, 0); //up
if (Ctrl)
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
if (Alt)
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
if (Shift)
keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0);
if (Win)
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
}
Вы можете фактически отправить любой код клавиатуры на клавиатуре в текущее активное окно.Поскольку вы действительно легко можете установить окно переднего плана с помощью Win32, это должно работать в большинстве приложений.
Вы также можете видеть, что этот код сначала «нажимает» на любые выбранные клавиши-модификаторы, а затем нажимает клавишу с указанным кодом.вниз, прежде чем отпустить все, что делает возможным отправку CTRL + W, например.
void CloseTab()
{
SetForegroundWindow(_browserWindow.Handle);
Send(W, true, false, false, false); //Ctrl+W
}
Удачи!,
(Также это мой первый ответ, поэтому я действительно надеюсь, что смогучтобы помочь некоторым из вас)