Я хочу симулировать нажатие клавиши F5 в моей программе С#. Когда IE открыт, я хочу обновить свой сайт автоматически, и я не знаю, с чего начать.
спасибо,
Дани.
Я хочу симулировать нажатие клавиши F5 в моей программе С#. Когда IE открыт, я хочу обновить свой сайт автоматически, и я не знаю, с чего начать.
спасибо,
Дани.
Вот пример...
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);
}
}
}
Вы можете использовать Win32 API FindWindow
или FindWindowEx, чтобы найти дескриптор окна открытого браузера, а затем просто вызвать SendMessage с WM_KEYDOWN. Как правило, проще всего передать заголовок окна FindWindowEx
и найти для него соответствующий дескриптор окна.
Если вы начинаете процесс браузера самостоятельно с помощью объекта Process process
, тогда вы можете использовать process.MainWindowHandle
вместо вызова FindWindowEx
.
Spy ++ - очень полезный инструмент, когда вы хотите начать работать с другими окнами. Это в основном позволяет вам изучить еще одну иерархию программных элементов пользовательского интерфейса. Вы также можете отслеживать все сообщения, которые попадают в контролируемое окно. У меня есть дополнительная информация в этой теме.
Ключ F5 имеет этот виртуальный key code:
const int VK_F5 = 0x74;
Подпись p/invoke для FindWindowEx
в С#:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
Вы можете p/invoke (ввести) Win32 API SendMessage
следующим образом:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
Итак, чтобы напомнить, вы вызываете FindWindowEx
непосредственно из своего кода на С# после того, как код выше находится внутри вашего класса. FindWindowEx
вернет дескриптор окна. Затем, когда у вас есть дескриптор окна, вы можете отправить любое нажатие клавиши (ов) в окно или вызвать многие другие вызовы API Win32 в дескрипторе окна. Или даже найдите дочернее окно, используя другой вызов FindWindowEx
. Например, вы можете выбрать элемент управления редактирования браузера, а затем изменить его текст.
Если все остальное пойдет не так, и вы думаете, что отправляете правильную клавишу в окно, вы можете использовать spy++
, чтобы увидеть, какие сообщения отправляются в окно, когда вы вручную устанавливаете фокус на браузер и вручную нажмите F5
.
Другой альтернативой симуляции нажатия клавиши F5 является простое управление WebBrowser в приложении Window Forms. Вы используете метод WebBrowser.Navigate для загрузки своей веб-страницы, а затем используйте стандартный Timer и на каждом тике таймера вы просто переходите к URL-адресу, который перезагрузит страницу.
Простой, добавьте перед Main
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
Код внутри Main/Method:
string className = "IEFrame";
string windowName = "New Tab - Windows Internet Explorer";
IntPtr IE = FindWindow(className, windowName);
if (IE == IntPtr.Zero)
{
return;
}
SetForegroundWindow(IE);
InputSimulator.SimulateKeyPress(VirtualKeyCode.F5);
Примечание:
Добавьте InputSimulator в качестве ссылки. Чтобы загрузить Нажмите здесь
Чтобы найти имя класса и окна, используйте WinSpy ++. Чтобы загрузить Нажмите здесь
Вместо того, чтобы принудительно нажать F5, когда вы просто пытаетесь вернуть страницу для обратной передачи, вы можете вызвать обратную передачу на основе события JS (даже mousemove или timer_tick, если вы хотите, чтобы он срабатывал все время). Используйте код http://weblogs.asp.net/mnolton/archive/2003/06/04/8260.aspx в качестве ссылки.
Самый простой способ отправить (имитировать) KeyStrokes в любое окно - использовать метод SendKeys.Send.NET Framework.
Оформить эту самую интуитивную статью MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
В частности, для вашего случая, если ваше окно браузера находится в фокусе, отправка F5 будет включать только следующую строку кода:
SendKeys.Send("{F5}");