C # // SendKeys.SendWait работает только тогда, когда окно процесса свернуто - PullRequest
4 голосов
/ 21 января 2012
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
using System.Drawing;


namespace TextSendKeys
{
    class Program
    {
        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        static void Main(string[] args)
        {
            Process[] processes = Process.GetProcessesByName("game");
            Process game1 = processes[0];


            IntPtr p = game1.MainWindowHandle;

            ShowWindow(p,1);
            SendKeys.SendWait("{DOWN}");
            Thread.Sleep(1000);
            SendKeys.SendWait("{DOWN}");



        }
    }
}

Эта программа предназначена для отправки дважды кнопки ВНИЗ в окне игры. Это работает только тогда, когда мое окно свернуто (оно активирует окно и выполняет свою работу). Если мое окно активировано (не свернуто), ничего не происходит. Как это решить?

Спасибо! :)

1 Ответ

9 голосов
/ 21 января 2012

Попробуйте использовать SetForegroundWindow вызов Win32 API вместо ShowWindow, чтобы активировать окно игры. (Подпись от pinvoke.net .)

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

static void Main(string[] args)
{
    Process[] processes = Process.GetProcessesByName("game");
    Process game1 = processes[0];

    IntPtr p = game1.MainWindowHandle;

    SetForegroundWindow(p);
    SendKeys.SendWait("{DOWN}");
    Thread.Sleep(1000);
    SendKeys.SendWait("{DOWN}");
}
...