Si vous disposez déjà d'une poignée pour envoyer à.
...SomeClass...[DllImport("user32.dll",CharSet=CharSet.Auto,SetLastError=false)]staticexternIntPtrSendMessage(IntPtr hWnd,UInt32Msg,IntPtr wParam,IntPtr lParam);//I'd double check this constant, just in casestaticuint WM_CLOSE =0x10;publicvoidCloseWindow(IntPtr hWindow){SendMessage(hWindow, WM_CLOSE,IntPtr.Zero,IntPtr.Zero);}...ContinueClass...
Obtenir une poignée peut être délicat. Contrôle les classes descendantes (WinForms, essentiellement) ont de la Poignée, et vous pouvez énumérer toutes les fenêtres de niveau supérieur avec EnumWindows (qui nécessite le plus avancé de p/invoke, bien que légèrement).
J'ai essayer cette méthode, cependant, lors de l'envoyer à une application WPF, c'jeter un Système.De la réflexion.targetParameterCountException. Bien que cela fonctionne très bien avec le bloc-notes.
Supposons que vous souhaitez fermer le bloc-notes. le code suivant va le faire:
privatevoidCloseNotepad(){string proc ="NOTEPAD";Process[] processes =Process.GetProcesses();var pc =from p in processes
where p.ProcessName.ToUpper().Contains(proc)select p;foreach(var item in pc){
item.CloseMainWindow();}}
Considérations:
Si le bloc-notes a certains non enregistrées texte, il s'affiche "voulez-vous enregistrer....?" boîte de dialogue ou si le processus n'a pas d'INTERFACE utilisateur, il jette exception suivante
'item.CloseMainWindow()' threw an exception of type
'System.InvalidOperationException'base{System.SystemException}:{"No process is associated with this object."}
Si vous voulez forcer la fermeture de processus immédiatement s'il vous plaît remplacer
item.CloseMainWindow()
avec
item.Kill();
Si vous voulez aller PInvoke façon, vous pouvez utiliser la poignée de l'élément sélectionné.
item.Handle;//this will return IntPtr object containing handle of process.
besoin de lire la question, @karthik veut fermer un.n.autre application Je pense que l'ajout d' aurait aidé comme, autre petite application comme le bloc-notes où dois-je me donner le nom de l'application pour la fermer ? J'ai changé l'ensemble de la réponse pour répondre à la Exigence Specefication 🙂 où avez-u utilisé le message WM_close ?
Si vous disposez déjà d'une poignée pour envoyer à.
Obtenir une poignée peut être délicat. Contrôle les classes descendantes (WinForms, essentiellement) ont de la Poignée, et vous pouvez énumérer toutes les fenêtres de niveau supérieur avec EnumWindows (qui nécessite le plus avancé de p/invoke, bien que légèrement).
OriginalL'auteur Kevin Montrose
Supposons que vous souhaitez fermer le bloc-notes. le code suivant va le faire:
Considérations:
Si le bloc-notes a certains non enregistrées texte, il s'affiche "voulez-vous enregistrer....?" boîte de dialogue ou si le processus n'a pas d'INTERFACE utilisateur, il jette exception suivante
Si vous voulez forcer la fermeture de processus immédiatement s'il vous plaît remplacer
avec
Si vous voulez aller PInvoke façon, vous pouvez utiliser la poignée de l'élément sélectionné.
Je pense que l'ajout d' aurait aidé comme, autre petite application comme le bloc-notes
où dois-je me donner le nom de l'application pour la fermer ?
J'ai changé l'ensemble de la réponse pour répondre à la Exigence Specefication 🙂
où avez-u utilisé le message WM_close ?
OriginalL'auteur TheVillageIdiot