Per inviare il tasto F4 per un altro processo si dovrà attivare quel processo
http://bytes.com/groups/net-c/230693-activate-other-process suggerisce:
- Get istanza di classe processo restituito dal Process.Start
- Query Process.MainWindowHandle
- Chiama la funzione API Win32 non gestita "ShowWindow" o "SwitchToThisWindow"
Si può quindi essere in grado di utilizzare System.Windows.Forms.SendKeys.Send ("{} F4") come Reed ha suggerito di inviare le sequenze di tasti a questo processo
EDIT:
L'esempio di codice di seguito viene eseguito blocco note e invia "ABC" ad esso:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace TextSendKeys
{
class Program
{
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void Main(string[] args)
{
Process notepad = new Process();
notepad.StartInfo.FileName = @"C:\Windows\Notepad.exe";
notepad.Start();
// Need to wait for notepad to start
notepad.WaitForInputIdle();
IntPtr p = notepad.MainWindowHandle;
ShowWindow(p, 1);
SendKeys.SendWait("ABC");
}
}
}
fonte
2009-05-05 16:26:39
Puoi essere più esplicito su come posso impostare un altro processo attivo? Voglio dire potresti pubblicare un esempio di codice? –
Puoi evitare la sospensione usando notepad.WaitForInputIdle() - In questo modo funzionerà su macchine diverse dal tuo :-) – Juanma
grazie, ho pensato che ci sarebbe stato un modo migliore, ho aggiornato la mia risposta :) –