Voglio simulare F5 premere il tasto nel mio programma C#, Quando IE è aperto, desidero aggiornare automaticamente il mio sito Web e non so da dove iniziare.Simulation Key Press C#
grazie,
Dani.
Voglio simulare F5 premere il tasto nel mio programma C#, Quando IE è aperto, desidero aggiornare automaticamente il mio sito Web e non so da dove iniziare.Simulation Key Press C#
grazie,
Dani.
Ecco un esempio ...
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 migliore ... meno anoying ...
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);
}
}
}
Questo (specialmente quello "migliore") mi ha aiutato, +1. Vedere la mia risposta [qui] (http://stackoverflow.com/a/16255097/385995) per vedere un esempio più complesso che coinvolge anche i tasti modificatori. –
È possibile utilizzare l'API Win32 FindWindow
o FindWindowEx per trovare l'handle della finestra del browser aperta e poi basta chiamare SendMessage con WM_KEYDOWN. In genere è più semplice passare la didascalia della finestra a FindWindowEx
e trovare l'handle della finestra associato.
Se si avvia il processo del browser tramite un oggetto Process process
, è possibile utilizzare process.MainWindowHandle
anziché chiamare FindWindowEx
.
Spy ++ è uno strumento molto utile quando si desidera iniziare a lavorare con altre finestre. Fondamentalmente ti permette di imparare la gerarchia di un altro programma di elementi dell'interfaccia utente. Puoi anche monitorare tutti i messaggi che entrano nella finestra che stai monitorando. Ho più informazioni in this thread.
Il F5 battitura ha questo codice tasto virtuale:
const int VK_F5 = 0x74;
Il P/Invoke firma per FindWindowEx
in C# è:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
Puoi P/Invoke (portare in) API Win32 SendMessage
come questo:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
Quindi, per ricapitolare, si chiamano FindWindowEx
direttamente dal tuo codice C# dopo aver inserito il codice sopra da qualche parte all'interno della tua classe. FindWindowEx
restituirà un handle di finestra. Quindi, una volta ottenuto l'handle della finestra, è possibile inviare qualsiasi tasto della tastiera alla finestra oppure chiamare molte altre chiamate API Win32 sull'handle della finestra. O anche trovare una finestra figlio utilizzando un'altra chiamata a FindWindowEx
. Ad esempio è possibile selezionare il controllo di modifica del browser anche e quindi modificare il suo testo.
Se tutto il resto va male e si pensa che si sta inviando la chiave giusta per la finestra, è possibile utilizzare spy++
per vedere quali messaggi vengono inviati alla finestra quando si imposta manualmente attenzione al browser e si preme manualmente F5
.
Puoi essere più dettagliato per favore, io davvero non so come usare l'API Win32. – Dani
Il collegamento al thread SO è praticamente perfetto. Ma forse questo snippet potrebbe aiutare - http://snippets.dzone.com/posts/show/4070 – Reddog
@Dani: ho aggiunto più informazioni, ma puoi cercare il codice di ricerca Google con lang: C# per esempi più dettagliati. http://www.google.com/codesearch?q=lang:c%23+FindWindowEx&hl=it&btnG=Search+Code –
Un'altra alternativa alla simulazione di una pressione tasto F5 è quella di ospitare semplicemente il controllo WebBrowser nell'applicazione Window Forms. Si utilizza il metodo WebBrowser.Navigate per caricare la pagina Web e quindi utilizzare uno standard Timer e su ciascun segno di spunta del timer si reindirizza all'URL che ricaricherà la pagina.
La sua soluzione molto semplice. grazie – Dani
Invece di costringere un F5 pressione di un tasto quando si sta solo cercando di ottenere la pagina per postback, è possibile chiamare un postback basato su un evento JS (anche MouseMove o timer_tick se si desidera che al fuoco tutto il tempo). Utilizzare il codice allo http://weblogs.asp.net/mnolton/archive/2003/06/04/8260.aspx come riferimento.
Il modo più semplice per inviare (simulare) KeyStrokes a qualsiasi finestra consiste nell'utilizzare il metodo SendKeys.Send di .NET Framework.
Acquista questo molto intuitivo articolo di MSDN http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
In particolare per il vostro caso, se la finestra del browser è a fuoco, l'invio di F5 sarebbe solo comportano la seguente riga di codice:
SendKeys.Send("{F5}");
SendKeys non è definito –
Semplice uno, aggiungi prima 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);
Codice insid E Main/Metodo:
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:
Aggiungi InputSimulator come riferimento. Per scaricare Click here
Per trovare il nome della finestra &, utilizzare WinSpy ++. Per scaricare Click here
Si tratta di un'applicazione Web o di un'applicazione desktop? – ckramer
Un'app desktop standard. – Dani
In tal caso, penso che il signor Bondy abbia colpito il chiodo sulla testa. – ckramer