Возможно ли посылать нажатие кнопки в не активное окно виртуальной машины - C#
Формулировка задачи:
Подскажите пожалуйста возможно ли посылать нажатие кнопки в не активное окно виртуальной машины?
Решение задачи: «Возможно ли посылать нажатие кнопки в не активное окно виртуальной машины»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Runtime.InteropServices; namespace ConsoleApplication3 { class Program { [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); [DllImport("user32.dll", SetLastError = true)] public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, uint lParam); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hwnd, UInt32 wMsg, IntPtr wParam, Char lParam); [DllImport("User32.dll")] static extern int SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] static extern byte VkKeyScan(char ch); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern uint MapVirtualKey(uint uCode, uint uMapType); public static void sendKey(IntPtr hwnd, IntPtr keyCode, bool extended) { uint scanCode = MapVirtualKey((uint)keyCode, 0); uint lParam; lParam = (0x00000001 | (scanCode << 16)); if (extended) { lParam = lParam | 0x01000000; } //PostMessage(hwnd, 0x0100, keyCode, lParam); //PostMessage(hwnd, 0x0101, keyCode, (IntPtr)lParam); } static void Main(string[] args) { while (true) { IntPtr hWindow = FindWindow(null, "VP - Windows Virtual PC"); //IntPtr hWindow = (IntPtr)0x000B03E0; if (hWindow != IntPtr.Zero) { //SetForegroundWindow(hWindow); Console.WriteLine("Нашли окно 1"); hWindow = FindWindowEx(hWindow, IntPtr.Zero, "#32770", null); if (hWindow != IntPtr.Zero) { Console.WriteLine("Нашли окно 2"); hWindow = FindWindowEx(hWindow, IntPtr.Zero, "ATL:000007FEF099AEA0", null); if (hWindow != IntPtr.Zero) { Console.WriteLine("Нашли окно 3"); hWindow = FindWindowEx(hWindow, IntPtr.Zero, "UIMainClass", null); if (hWindow != IntPtr.Zero) { Console.WriteLine("Нашли окно 4"); hWindow = FindWindowEx(hWindow, IntPtr.Zero, "UIContainerClass", null); if (hWindow != IntPtr.Zero) { Console.WriteLine("Нашли окно 5"); hWindow = FindWindowEx(hWindow, IntPtr.Zero, "IHWindowClass", "Input Capture Window"); if (hWindow != IntPtr.Zero) { Console.WriteLine("Нашли окно 6"); Console.WriteLine(hWindow); //sendKey(hWindow, (IntPtr)0x51, false); PostMessage(hWindow, 0x0007, 0, 0); PostMessage(hWindow, 0x100, 0x51, 0x00100001); PostMessage(hWindow, 0x101, 0x51, 0xC0100001); } else { Console.WriteLine("Не нашли окно 6"); } } else { Console.WriteLine("Не нашли окно 5"); } } else { Console.WriteLine("Не нашли окно 4"); } } else { Console.WriteLine("Не нашли окно 3"); } } else { Console.WriteLine("Не нашли окно 2"); } } else { Console.WriteLine("Не нашли окно 1"); } Console.ReadKey(); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д