如何在进程列表中找到一个程序并置顶

zhoumins 2009-04-15 03:07:37
c#,winform中,
如何在进程列表中,通过程序名找到一个正在运行的程序,并将他放置最前端。
...全文
442 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoumins 2009-04-16
  • 打赏
  • 举报
回复
static class Program
{
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
System.Diagnostics.Process current = System.Diagnostics.Process.GetCurrentProcess();
System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcessesByName(current.ProcessName); //找到名称相同的进程
foreach (System.Diagnostics.Process p in processList)
{
if (p.Id != current.Id)//获取第1个同名但非本进程的
{
IntPtr _FormIntPtr = p.MainWindowHandle;
SetForegroundWindow(_FormIntPtr); //激活窗体
return;
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
谢谢各位
上面的方法能够实现,但有一个问题:
如果被激活窗体,原来是最小化的,不能实现将其置于最前面。如何解决,谢谢。
wartim 2009-04-16
  • 打赏
  • 举报
回复
怎么都不仔细看的,等着要源代码啊

4 楼wdy9927()回复于 2006-11-09 15:22:40 得分 20//是说这2个么?


[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
//以上的方法声明为私有,对其进一步包装,
/// <summary>
/// 功能:HandleRunningInstance静态方法为获取应用程序句柄,设置应用程序为前台运行,并返回bool值。
/// 实现:确保窗口没有被最小化或最大化。
/// 设置为前台显示。
/// </summary>
/// <param name="instance">准备设置成前台运行的程序</param>
/// <returns></returns>
private bool HandleRunningInstance(Process instance)
{
//确保窗口没有被最小化或最大化
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL);
//设置为foreground window
return SetForegroundWindow(instance.MainWindowHandle);
}

wartim 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhoumins 的回复:]
static class Program
{
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
System.Dia…
[/Quote]

我给你贴的地址里的下面有一个人的帖子不已经回答过了最小化怎么办了么,晕死
LemIST 2009-04-16
  • 打赏
  • 举报
回复
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);


private void button1_Click(object sender, EventArgs e)
{

System.Diagnostics.Process[] _Process = System.Diagnostics.Process.GetProcessesByName("notepad"); //找到记事本的进程

if (_Process.Length != 0)
{
IntPtr _FormIntPtr = _Process[0].MainWindowHandle; //获取第1个记事本的窗体
ShowWindowAsync(_FormIntPtr, /*WS_SHOWNORMAL*/ 1);
SetForegroundWindow(_FormIntPtr);

}

}
LemIST 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zgke 的回复:]
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

private void button1_Click(object sender, EventArgs e)
{

System.Diagnostics.Process[] _Process = System.Diagnostics.Process.GetProcessesByName("notepad"); //找到记事本的进程

if (_Process.Length != 0)
{

[/Quote]
同意
zgke 2009-04-15
  • 打赏
  • 举报
回复
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

private void button1_Click(object sender, EventArgs e)
{

System.Diagnostics.Process[] _Process = System.Diagnostics.Process.GetProcessesByName("notepad"); //找到记事本的进程

if (_Process.Length != 0)
{
IntPtr _FormIntPtr = _Process[0].MainWindowHandle; //获取第1个记事本的窗体
SetForegroundWindow(_FormIntPtr); //激活窗体
}

}

111,080

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧