Возможно ли посылать нажатие кнопки в не активное окно виртуальной машины - 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();
}
}
}
}