c# 通过窗口名字关闭窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 通过窗口名字关闭窗口相关的知识,希望对你有一定的参考价值。

怎么实现呢?不好意思,新手不怎么熟悉。
窗口的名称是一个字符,而不是如一楼那样,那个名称已经是一个form型的对象了。

可以调用几个系统方法来实现: EnumWindows, GetWindowText, GetWindowTextLength, SendMessage 。

EnumWindows 方法用来枚举所有的窗口,并对每个窗口回调一个指定的方法。然后在这个回调方法中调用 GetWindowTextLength 和 GetWindowText 来获取窗口标题。将这个标题和要找的比较,如果一致,就用 SendMessage 发送一个 WM_CLOSE 的消息将其关闭。

这里有个问题,就是 EnumWindows 方法是枚举当前系统中所有的窗口(不是当前进程的也会被选出来。当其他进程的标题也是要找的话,就有问题了)(如果没记错的话)!所有楼主可以看看还有没有其他的 API。这个找 MSDN 比较好找的说

具体实现:

[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

[DllImport("user32.dll")]
private static extern int GetWindowTextLength(IntPtr hWnd);

private delegate bool EnumWindowProcDelegate(IntPtr hwnd, int lParam);

[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowProcDelegate proc, int lParam);

[DllImport("user32.dll"]
public static extern IntPtr SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);

private void foo()

EnumWindows(new EnumWindowProcDelegate(enum_proc), 0);

private bool enum_proc(IntPtr hwnd, int lParam)

int length;
length = GetWindowTextLength(hwnd) + 1;

StringBuilder buffer = new StringBuilder(length);
GetWindowText(hwnd, buffer, length);

if (buffer.ToString() == "MyForm1")

SendMessage(hwnd, 16, 0, 0);
return false;


return true;


===================================
当然另外还有不像这么复杂的方法:
1. 你从 System.Windows.Forms.Form 类继承一个自己的类。比如叫 MyBaseForm
2. 这个 MyBaseForm 基本上和 Form 完全一样,它的作用只是将标题保存到一个全局的地方,比如 MyBaseForm.__registeredForms 里面
3. 然后这个 Win-Form 里面的所有窗口都从这个 MyBaseForm 继承
4. 这样要查找的时候,直接到那个 MyBaseForm.__registeredForms 里面找就行了,呵呵
参考技术A 我关闭的时候,是按窗体的名称

例如: frmMain.Close();

c#关闭窗口怎么强制退出所有运行的线程

将线程的isbauckground设置为true
当住线程关闭时(也就是推出程序时),其他线程将自动关闭
参考技术A 调用线程的KILL方法即可。
thread.kill();
参考技术B thread.kill().
如果可以最好在线程中加入同步信号,根据信号判断决定是否退出,这样比较安全。
参考技术C Thread.kill();
退出时运行这个方法.就结束掉所有的线程了.

以上是关于c# 通过窗口名字关闭窗口的主要内容,如果未能解决你的问题,请参考以下文章

C#关闭一个窗口的同时打开另一个窗口

c#关闭窗口怎么强制退出所有运行的线程

C#如何关闭一个窗口的同时打开另一个窗口

C#里面,子窗口关闭以后,刷新一个父窗口的控件的属性,怎么办

c#里面如何显示下一个窗体而关闭当前窗体?

c#程序中,关闭窗口返回参数FormClosingEventArgs e的问题