Simulación de teclas Presione c #

Quiero simular la tecla F5 en mi progtwig c #. Cuando IE está abierto, quiero poder actualizar mi sitio web automáticamente y no sé por dónde empezar.

Gracias,

Dani.

Aquí hay un ejemplo …

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); } } } 

uno mejor … menos molesto …

 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); } } } 

Puede usar FindWindow API Win32 o FindWindowEx para encontrar el manejador de ventana del navegador abierto y luego simplemente llamar a SendMessage con WM_KEYDOWN . Normalmente, es más fácil simplemente pasar el título de la ventana a FindWindowEx y hacer que encuentre el identificador de ventana asociado para usted.

Si está iniciando el proceso del explorador usted mismo a través de un objeto de Process process , puede usar process.MainWindowHandle lugar de llamar a FindWindowEx .

Spy ++ es una herramienta muy útil cuando quieres comenzar a trabajar con otras ventanas. Básicamente, le permite aprender la jerarquía de elementos de la IU de otro progtwig. También puede controlar todos los mensajes que entran en la ventana que está monitoreando. Tengo más información en este hilo .

La tecla F5 tiene este código de tecla virtual:

 const int VK_F5 = 0x74; 

La firma de p / FindWindowEx para FindWindowEx en C # es:

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

Puede p / invocar (traer) la API de Win32 SendMessage así:

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

Entonces, para recapitular, llama a FindWindowEx directamente desde su código C # después de tener el código anterior en algún lugar dentro de su clase. FindWindowEx devolverá un identificador de ventana. Luego, una vez que tenga el identificador de ventana, puede enviar cualquier combinación de teclas a la ventana, o llamar a muchas otras llamadas API de Win32 en el identificador de ventana. O incluso encuentre una ventana secundaria usando otra llamada a FindWindowEx . Por ejemplo, puede seleccionar el control de edición del navegador incluso y luego cambiar su texto.

Si todo lo demás falla y cree que está enviando la clave correcta a la ventana, puede usar spy++ para ver qué mensajes se envían a la ventana cuando establece manualmente el foco en el navegador y manualmente presiona F5 .

Simple, agregar antes de 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); 

Código dentro de 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); 

Nota:

  1. Agregue InputSimulator como referencia. Para descargar Haga clic aquí

  2. Para encontrar el nombre de Class & Window, use WinSpy ++. Para descargar Haga clic aquí

Otra alternativa para simular una pulsación de tecla F5 sería simplemente alojar el control WebBrowser en la aplicación Window Forms. Utiliza el método WebBrowser.Navigate para cargar tu página web y luego usa un temporizador estándar y en cada tic del temporizador simplemente vuelves a navegar a la url que recargará la página.

La forma más sencilla de enviar (simular) KeyStrokes a cualquier ventana es utilizar el método SendKeys.Send de .NET Framework.

Consulte este artículo intuitivo de MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx


Particularmente para su caso, si la ventana de su navegador está enfocada, enviar F5 implicaría simplemente la siguiente línea de código:

 SendKeys.Send("{F5}"); 

En lugar de forzar una pulsación de tecla F5 cuando solo intenta hacer que la página se devuelva, puede llamar a una devolución de datos basada en un evento JS (incluso mousemove o timer_tick si desea que se active todo el tiempo). Use el código en http://weblogs.asp.net/mnolton/archive/2003/06/04/8260.aspx como referencia.

Fácil, corto y sin necesidad de foco en la ventana:

También aquí una útil lista de códigos de teclas virtuales

  [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam); private void button1_Click(object sender, EventArgs e) { const int WM_SYSKEYDOWN = 0x0104; const int VK_F5 = 0x74; IntPtr WindowToFind = FindWindow(null, "Google - Mozilla Firefox"); PostMessage(WindowToFind, WM_SYSKEYDOWN, VK_F5, 0); }