Je veux envoyer une clé spécifique (par exemple k) à un autre programme nommé bloc-notes, et ci-dessous est le code que j'ai utilisé:
void sendkey ()
{
[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);
Process p = Process.GetProcessesByName("notepad")[0];
IntPtr pointer = p.Handle;
SetForegroundWindow(pointer);
SendKeys.Send("k");
}
Mais le code ne fonctionne pas, quel est le problème avec le code?
Modifié: est-il possible que j'envoie le "K" au bloc-notes sans bloc-notes pour être la fenêtre active? (par exemple, fenêtre active = "Google Chrome", le bloc-notes est à l'arrière-plan, ce qui signifie l'envoi d'une clé à une application d'arrière-plan)
Si le bloc-notes est déjà démarré, vous devez écrire:
// import the function in your class
[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);
//...
Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
if( p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
}
GetProcessesByName
renvoie un tableau de processus, vous devriez donc obtenir le premier (ou trouver celui que vous voulez).
Si vous voulez démarrer notepad
et envoyer la clé, vous devez écrire:
Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
La seule situation dans laquelle le code peut ne pas fonctionner est lorsque notepad
est démarré en tant qu'administrateur et que votre application ne l'est pas.