c#中的定位窗口[英] Position Window in c#

问题描述

我正在尝试创建一个带有按钮的表单,单击该按钮将搜索 calc.exe,如果它正在运行,它会将 calc 窗口定位到屏幕左上角的 0,0.如果它没有运行,它会启动 calc,然后将其定位到屏幕左上角的 0,0.我正在学习 C#,所以请评论一下

推荐答案

这就像一个伪代码.您可以通过以下步骤解决.

HWND iHandle = FindWindow(null, "计算器");if (iHandle != IntPtr.Zero){SetForegroundWindow(iHandle);矩形 rect = new Rectangle();GetWindowRect(iHandle, ref rect);//按要求设置位置}其他{进程 runExe = new Process();runExe.StartInfo.FileName = "calc.exe";Process.Start("calc.exe");//按要求设置位置}

可以使用System.Diagnostics.Process.Start启动正在运行的"calc.exe"进程.这要么是一个实例方法,因此您应该有一个以前从构造函数创建的 System.Diagnostics.Process 实例,或者它是一个返回此类实例的静态方法.保留此对 Process 实例的引用以供将来使用.

您可以尝试使用 System.Diagnostics.Process.GetProcessesByName 方法查找正在运行的进程的实例.

这样,您就获得了外部运行进程的实例,无论它是之前启动的还是您启动的.使用 Process.MainWindowHandle 获取其主窗口句柄.请参阅此方法的说明:您将需要捕获指定的异常并检查返回的句柄是否不是 System.IntPtr.Zero.这将表明进程已终止或尚未准备好,或者尚未创建主窗口.如果进程没有终止,你可能需要再次调用这个属性,直到你得到一个主窗口.

请参阅:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx[^].

当您获得主窗口句柄时,使用原始 Windows API ,P/Invoked 移动窗口.
这是即用型 P/Invoked 代码:http://pinvoke.net/default.aspx/coredll/SetWindowPos.html[^].

原始 API:http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx[^];在左侧菜单中查看其他与窗口相关的 API.

另见:
http://en.wikipedia.org/wiki/P/Invoke[^],
http://msdn.microsoft.com/en-us/library/Aa712982[^].

一篇有用的 CodeProject 文章:Essential P/Invoke[^].

—SA

本文地址:https://www.itbaoku.cn/post/1395105.html