0

标题说明了一切,我有这个代码:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

const UInt32 WM_CLOSE = 0x0010;

这是我添加的内容Form1_Load

IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Untitled - Notepad");
            if (windowPtr == IntPtr.Zero)
            {
                MessageBox.Show("Window not found");
                return;
            }

            SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);

所以我将上面的代码添加到Form1_Load函数中,它确实有效,当我打开我的程序时它会关闭记事本,但我的问题是,如何让函数重复,比如在打开时关闭记事本,而不仅仅是 on Form1_Load

4

1 回答 1

-2

您必须自己枚举窗口:EnumWindows并在返回过程中检查标题是否与您想要的相同(顺便说一下,硬编码“无标题”可能不是最好的方法)。或者,使用 自己遍历窗口图GetWindow,从第一个桌面子项开始并从那里迭代兄弟姐妹。

此外,您不需要 的IntPtr版本FindWindow,您可以将null其作为string参数传递并完成相同的操作。

于 2015-05-01T12:35:37.317 回答