Принудительно отправить Ctrl + C в активное окно - PullRequest
0 голосов
/ 29 марта 2012

У меня есть следующий код вверху класса в проекте C # .NET:

[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint virtualKey);

Ниже приведен метод, который я пытаюсь использовать в другом месте:

private void CopyHighlighted()
{
   uint KEYEVENTF_KEYUP = 2;
   byte VK_CONTROL = 0x11;
   SetForegroundWindow(GetForegroundWindow());
   keybd_event(VK_CONTROL, 0, 0, 0);
   keybd_event(0x43, 0, 0, 0); 
   keybd_event(0x43, 0, KEYEVENTF_KEYUP, 0);
   keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}

Этот код работал ранее. Но теперь, когда я выделяю какой-то текст в окне и вызываю его, буфер обмена остается пустым. Кто-нибудь видел такое поведение раньше?

...