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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы