Моделирование Нажатия клавиши c#

Я хочу моделировать нажатие клавиши F5 в своей c# программе, Когда IE открыт, я хочу смочь, обновляют мой веб-сайт автоматически, и я не знаю, где запустить.

спасибо,

Dani.

39
задан Jake1164 28 August 2012 в 11:39
поделиться

5 ответов

Вот пример ...

static class Program
{
    [DllImport("user32.dll")]
    public static extern int SetForegroundWindow(IntPtr hWnd);

    [STAThread]
    static void Main()
    {
        while(true)
        {
            Process [] processes = Process.GetProcessesByName("iexplore");

            foreach(Process proc in processes)
            {
                SetForegroundWindow(proc.MainWindowHandle);
                SendKeys.SendWait("{F5}");
            }

            Thread.Sleep(5000);
        }
    }
}

лучший ... менее раздражающий ...

static class Program
{
    const UInt32 WM_KEYDOWN = 0x0100;
    const int VK_F5 = 0x74;

    [DllImport("user32.dll")]
    static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);

    [STAThread]
    static void Main()
    {
        while(true)
        {
            Process [] processes = Process.GetProcessesByName("iexplore");

            foreach(Process proc in processes)
                PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_F5, 0);

            Thread.Sleep(5000);
        }
    }
}
59
ответ дан 27 November 2019 в 02:23
поделиться

Вместо принудительного нажатия клавиши F5, когда вы просто пытаетесь заставить страницу сделать postback, вы можете вызвать postback на основе JS-события (даже mousemove или timer_tick, если вы хотите, чтобы оно срабатывало постоянно). Используйте код на http://weblogs.asp.net/mnolton/archive/2003/06/04/8260.aspx в качестве ссылки.

2
ответ дан 27 November 2019 в 02:23
поделиться

Вы можете использовать Win32 API FindWindow или FindWindowEx , чтобы найти дескриптор окна открытого браузера, а затем просто вызвать SendMessage с WM_KEYDOWN . Обычно проще всего передать заголовок окна в FindWindowEx , и он найдет соответствующий дескриптор окна за вас.

Если вы запускаете процесс браузера самостоятельно с помощью объекта Process process , вы можете использовать process.MainWindowHandle вместо вызова FindWindowEx .

Spy ++ - очень полезный инструмент, когда вы хотите начать работать с другими окнами. Это в основном позволяет вам изучить иерархию элементов пользовательского интерфейса другой программы. Вы также можете отслеживать все сообщения, которые попадают в контролируемое вами окно. У меня есть дополнительная информация в этой ветке .

Нажатие клавиши F5 имеет следующий код виртуальной клавиши:

const int VK_F5 = 0x74;

Сигнатура p / invoke для FindWindowEx в C #:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

Вы можете p / вызывать (вводить) Win32 API SendMessage примерно так:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

Итак, напомним, вы вызываете FindWindowEx непосредственно из вашего кода C # после того, как код выше находится где-то внутри вашего класса. FindWindowEx вернет дескриптор окна. Затем, когда у вас есть дескриптор окна, вы можете отправить любое нажатие клавиши в окно или вызвать множество других вызовов Win32 API на дескрипторе окна. Или даже найдите дочернее окно, используя другой вызов FindWindowEx . Например, вы можете выбрать элемент управления редактированием браузера, а затем изменить его текст.

Если все остальное пойдет не так, и вы думаете, что отправляете правильную клавишу в окно, вы можете использовать spy ++ , чтобы увидеть, какие сообщения отправляются в окно, когда вы вручную устанавливаете фокус на браузер и вручную нажмите F5 .

9
ответ дан 27 November 2019 в 02:23
поделиться

Самый простой способ отправить (имитировать) нажатия клавиш в любое окно - использовать метод SendKeys.Send .NET Framework.

Ознакомьтесь с этой очень интуитивно понятной статьей MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx


Особенно для вашего случая, если окно вашего браузера в фокусе отправка F5 будет включать следующую строку кода:

SendKeys.Send("{F5}");
6
ответ дан 27 November 2019 в 02:23
поделиться

Другой альтернативой имитации нажатия клавиши F5 может быть просто размещение элемента управления WebBrowser в приложении Window Forms. Вы используете метод WebBrowser.Navigate для загрузки вашей веб-страницы, а затем используете стандартный Timer и на каждом тике таймера вы просто повторно переходите к url, который перезагружает страницу.

4
ответ дан 27 November 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: