Unity: отправить ключ в фоновое окно - PullRequest
0 голосов
/ 25 июня 2019

Я делаю настраиваемую экранную клавиатуру с Unity, но мне сложно понять, как заставить клавиатуру отправлять клавиши в любое окно позади нее.

Я пытался использовать слегка отредактированную версию кода Луисбоба:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UnityEngine.UI;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

[SerializeField]
class SendMessages
{
    [DllImport("user32.dll")]
    public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    public static void sendKeystroke()
    {
        const uint WM_KEYDOWN = 0x0100;
        const uint WM_KEYUP = 0x0101;

        IntPtr hWnd;
        string processName = "Notepad";
        Process[] processList = Process.GetProcesses();

        foreach (Process P in processList)
        {
            if (P.ProcessName.Equals(processName))
            {
                IntPtr edit = P.MainWindowHandle;
                PostMessage(edit, WM_KEYDOWN, (IntPtr)(Keys.B), IntPtr.Zero);
            }
        }
    }

}

public class B_Button : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        if(Input.GetMouseButtonDown(0))
        {
            SendMessages.sendKeystroke();
        }
    }

}

Этот код не возвращает никаких ошибок, но когда я запускаю / собираю проект и нажимаю, в блокноте не появляется «B». Я делаю что-то не так или функция PostMessage не работает с Unity? Если это не работает, что еще я могу сделать, чтобы заставить эту программу работать?

Обновление

Я понял, что получить ручку на окне - это одна или единственная проблема. Я сделал

Process[] n = Process.GetProcessesByName("Notepad");
        foreach (Process p in n)
        {
            hWnd = p.MainWindowHandle;
            UnityEngine.Debug.Log(hWnd);
        }

в нескольких запущенных программах, и он вернул 0 для обоих дескрипторов главного окна. Я не уверен, что является причиной этого, так как приложения работают, а не скрыты, поэтому любой совет будет принят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...