如何将选定的应用程序 window 从列表框置于最前面
How to bring a selected application window from a listbox to front
我有一份 windows 表格申请。在列表框中,我显示了所有打开的 windows 的标题。我已经做到了这一点。现在我想双击列表框中的标题.. 这将激活 window 并显示在前面。我的代码是这样的::
//this function is loading all the opened windows in the listbox
public void LoadOpenedWindows()
{
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
if (!String.IsNullOrEmpty(process.MainWindowTitle))
{
listBox1.Items.Add(process.MainWindowTitle);
}
}
listBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick);
}
我尝试通过以下方式打开所选项目..但是那不起作用..
private void ListBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
{
//MessageBox.Show(listBox1.SelectedItem.ToString());
const uint SW_SHOW = 5;
const int SW_RESTORE = 5;
string selected = listBox1.SelectedItem.ToString();
IntPtr handleOfSelected = getHandle(selected);
ShowWindowAsync(handleOfSelected, SW_RESTORE);
SetForegroundWindow(handleOfSelected);
//BringWindowToTop(handleOfSelected);
//ShowWindow(handleOfSelected, SW_SHOW);
}
}
public IntPtr getHandle(string selectedItem)
{
IntPtr hWnd = IntPtr.Zero;
foreach (Process pList in Process.GetProcesses())
{
if (pList.MainWindowTitle.Contains(selectedItem))
{
hWnd = pList.MainWindowHandle;
}
}
return hWnd;
}
如果有人有任何想法或代码..请尝试提供帮助。
这是一个很好用的..
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace SOF_ProcessFront
{
public partial class Form1 : Form
{
const UInt32 WS_MAXIMIZE = 365887488;
const int GWL_STYLE = -16;
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool ShowWindow(IntPtr wHnd, int cmdShow);
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
public Form1()
{
InitializeComponent();
LoadOpenedWindows();
}
void bringProcessToFront(int pid)
{
Process proc = Process.GetProcessById(pid);
int style = GetWindowLong(proc.MainWindowHandle, GWL_STYLE);
ShowWindow(proc.MainWindowHandle,
(style & WS_MAXIMIZE) == WS_MAXIMIZE ? 3 : 9 );
SetForegroundWindow(Process.GetProcessById(pid).MainWindowHandle);
}
private void button1_Click(object sender, EventArgs e)
{
bringProcessToFront(0);
}
public void LoadOpenedWindows()
{
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
if (!String.IsNullOrEmpty(process.MainWindowTitle))
listBox1.Items.Add(new ProcessAttributes()
{
ProcessName = process.MainWindowTitle,
ProcessID = process.Id
});
listBox1.DisplayMember = "ProcessName";
listBox1.DoubleClick += listBox1_DoubleClick;
}
void listBox1_DoubleClick(object sender, EventArgs e)
{
bringProcessToFront(((ProcessAttributes)listBox1.SelectedItem).ProcessID);
}
class ProcessAttributes
{
public string ProcessName { get; set; }
public int ProcessID { get; set; }
}
}
}
我在这里为 WS_MAXIMIZE 使用的常量对我有用@Win 8.1 64 位
我不知道你是否必须找到你系统的号码。
ShowWindow 函数设置应用程序的 WindowState。即我们需要将其状态从最小化恢复到正常或最大化。 ShowWindow 函数的第二个参数要求设置状态。即 3 用于最大化,9 用于恢复其状态。如果应用程序未最小化且处于最大化状态,我想将 3 作为参数传递给那里。如果不是,那么该函数将尝试恢复最大化的 window,这会迫使它从最大化变为正常。您也可以只在 window 最小化时调用 showWindow 函数。因为最小化的 window 应该恢复显示。之后 SetForegroundWindow 会将 window 置于最前面。
我有一份 windows 表格申请。在列表框中,我显示了所有打开的 windows 的标题。我已经做到了这一点。现在我想双击列表框中的标题.. 这将激活 window 并显示在前面。我的代码是这样的::
//this function is loading all the opened windows in the listbox
public void LoadOpenedWindows()
{
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
if (!String.IsNullOrEmpty(process.MainWindowTitle))
{
listBox1.Items.Add(process.MainWindowTitle);
}
}
listBox1.DoubleClick += new EventHandler(ListBox1_DoubleClick);
}
我尝试通过以下方式打开所选项目..但是那不起作用..
private void ListBox1_DoubleClick(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
{
//MessageBox.Show(listBox1.SelectedItem.ToString());
const uint SW_SHOW = 5;
const int SW_RESTORE = 5;
string selected = listBox1.SelectedItem.ToString();
IntPtr handleOfSelected = getHandle(selected);
ShowWindowAsync(handleOfSelected, SW_RESTORE);
SetForegroundWindow(handleOfSelected);
//BringWindowToTop(handleOfSelected);
//ShowWindow(handleOfSelected, SW_SHOW);
}
}
public IntPtr getHandle(string selectedItem)
{
IntPtr hWnd = IntPtr.Zero;
foreach (Process pList in Process.GetProcesses())
{
if (pList.MainWindowTitle.Contains(selectedItem))
{
hWnd = pList.MainWindowHandle;
}
}
return hWnd;
}
如果有人有任何想法或代码..请尝试提供帮助。
这是一个很好用的..
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace SOF_ProcessFront
{
public partial class Form1 : Form
{
const UInt32 WS_MAXIMIZE = 365887488;
const int GWL_STYLE = -16;
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool ShowWindow(IntPtr wHnd, int cmdShow);
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
public Form1()
{
InitializeComponent();
LoadOpenedWindows();
}
void bringProcessToFront(int pid)
{
Process proc = Process.GetProcessById(pid);
int style = GetWindowLong(proc.MainWindowHandle, GWL_STYLE);
ShowWindow(proc.MainWindowHandle,
(style & WS_MAXIMIZE) == WS_MAXIMIZE ? 3 : 9 );
SetForegroundWindow(Process.GetProcessById(pid).MainWindowHandle);
}
private void button1_Click(object sender, EventArgs e)
{
bringProcessToFront(0);
}
public void LoadOpenedWindows()
{
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
if (!String.IsNullOrEmpty(process.MainWindowTitle))
listBox1.Items.Add(new ProcessAttributes()
{
ProcessName = process.MainWindowTitle,
ProcessID = process.Id
});
listBox1.DisplayMember = "ProcessName";
listBox1.DoubleClick += listBox1_DoubleClick;
}
void listBox1_DoubleClick(object sender, EventArgs e)
{
bringProcessToFront(((ProcessAttributes)listBox1.SelectedItem).ProcessID);
}
class ProcessAttributes
{
public string ProcessName { get; set; }
public int ProcessID { get; set; }
}
}
}
我在这里为 WS_MAXIMIZE 使用的常量对我有用@Win 8.1 64 位 我不知道你是否必须找到你系统的号码。
ShowWindow 函数设置应用程序的 WindowState。即我们需要将其状态从最小化恢复到正常或最大化。 ShowWindow 函数的第二个参数要求设置状态。即 3 用于最大化,9 用于恢复其状态。如果应用程序未最小化且处于最大化状态,我想将 3 作为参数传递给那里。如果不是,那么该函数将尝试恢复最大化的 window,这会迫使它从最大化变为正常。您也可以只在 window 最小化时调用 showWindow 函数。因为最小化的 window 应该恢复显示。之后 SetForegroundWindow 会将 window 置于最前面。