Je démarre un processus à partir d'une application Windows. Lorsque j'appuie sur un bouton, je veux simuler l'appui sur la touche F4 dans ce processus. Comment puis je faire ça? [Modification ultérieure] Je ne veux pas simuler l'appui sur la touche F4 dans mon formulaire, mais dans le processus j'ai commencé.Comment puis-je envoyer la clé F4 à un processus en C#?
Répondre
Pour envoyer la touche F4 à un autre processus, vous devrez activer ce processus
http://bytes.com/groups/net-c/230693-activate-other-process suggère:
- Get instance de classe de processus retourné par Process.Start
- Recherche Process.MainWindowHandle
- Appelez la fonction API Win32 non managée "ShowWindow" ou "SwitchToThisWindow"
Vous pouvez alors être en mesure d'utiliser System.Windows.Forms.SendKeys.Send (« {F4} ») que Reed a suggéré d'envoyer les frappes à ce processus
EDIT:
L'exemple de code ci-dessous fonctionne bloc-notes et envoie "ABC" à elle:
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");
}
}
}
Vous pouvez utiliser System.Windows.Forms.SendKeys.Send("{F4}");
Merci pour vos réponses rapides. Je veux envoyer la clé F4 au processus commencé par mon formulaire, pas à ma forme. –
Ceci est correct. À partir d'une note de la page MSDN liée ci-dessus: Étant donné qu'il n'existe aucune méthode gérée pour activer une autre application, vous pouvez utiliser cette classe dans l'application actuelle ou utiliser des méthodes Windows natives, telles que FindWindow et SetForegroundWindow, pour forcer le focus sur d'autres applications. Vous devez donc activer la fenêtre, puis SendKeys le F4. –
... les sauts de ligne apparents dans les commentaires sont effacés. La dernière ligne ci-dessus (So ...) est la mienne. –
Vous pouvez vous concentrer la fenêtre (SetForegroundWindow WINAPI), puis utilisez windows Forms SendKeys pour envoyer F4.
Vous pouvez changer le focus par programmation ** seulement ** si l'autre programme le permet. La plupart des programmes ne le permettent pas. –
ShowWindow comme dans l'exemple principal n'a pas fonctionné pour moi; seulement SetForegroundWindow a fait. – dudeNumber4
Pouvez-vous être plus explicite sur la façon dont je peux activer un autre processus? Je veux dire pourriez-vous poster un échantillon de code? –
Vous pouvez éviter le sommeil en utilisant notepad.WaitForInputIdle() - De cette façon, il va fonctionner dans d'autres machines que votre :-) – Juanma
merci, pensé qu'il y aurait une meilleure façon, mis à jour ma réponse :) –