CloseHandle() gibt eine Ausnahme: Externe Komponente hat eine Ausnahme geworfen
Ich bin auf der Suche nach einem Weg, um ein Fenster zu schließen, die durch die Klasse name. Da die Process-Klasse nicht über so etwas wie GetProcessByClassName, suchte ich nach einem Weg dies zu tun ist mithilfe der Win32-API. Ich habe geschrieben das folgenden code:
public partial class Form1 : Form
{
[DllImport("user32", CharSet = CharSet.Unicode)]
public static extern
IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("kernel32", CharSet = CharSet.Auto,SetLastError = true)]
public static extern
bool CloseHandle(IntPtr handle);
private void button1_Click(object sender, EventArgs e)
{
IntPtr handle = FindWindow("Notepad", null);
if (handle != IntPtr.Zero)
{
bool hresult = CloseHandle(handle);
}
else
{
MessageBox.Show("app is not running..");
}
}
}
Allerdings, wenn ich tun, CloseHandle(), es gibt die folgende Fehlermeldung:
SEHEExeption war unhandle:Externe Komponente hat eine Ausnahme geworfen.
Habe ich keine Idee, wie dieses Problem zu beheben.
- was wollen Sie erreichen? btw gibt FindWindow Fenster-handle (HWND), das ist nicht ein kernel-Objekt, damit es nicht geschlossen werden kann mit CloseHandle()
- mögliche Duplikate von Warum kann ich nicht das Fenster schließen Griff in meinen code?
- Ein hWnd ist kein Griff können Sie schließen, mit
CloseHandle()
. PostWM_CLOSE
- Nachricht statt. - mögliche Duplikate von Wie automatisiert Reaktion auf die msgbox
- Vielen Dank für alles!!! überprüfen Sie heraus meine Antwort 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie brauchen, um in der Nähe der Griff geöffnet von FindWindow.
Jedoch, je nach Ihren Bedürfnissen, können Sie sich besser aus mit dem .Net framework-äquivalent, GetProcessesByName:
Fand ich die Lösung endlich. Vielen Dank für @competent_tech und @Alexm,@Deanna,@Hans passant, dass hat mir sehr geholfen mit deinem Kommentar!