
C#如何获取任务管理器中应用程序列表名称,不是进程
C#如何获取任务管理器中应用程序列表名称,不是进程获取如下图信息如果是以下这个方法的就别回答了,这个方法,获取不到图上的QQ那个应用程序的,请各位高手帮忙这是获取程序Pr...
C#如何获取任务管理器中应用程序列表名称,不是进程
获取如下图信息
如果是以下这个方法的就别回答了,这个方法,获取不到图上的QQ那个应用程序的,请各位高手帮忙
这是获取程序
Process[] ps=Process.GetProcesses();
foreach (Process p in ps)
{
if (p.MainWindowHandle != null)
{
richTextBox1.Text += p.MainWindowTitle + "";
}
}
#region 查找所有应用程序标题
private const int GW_HWNDFIRST = 0;
private const int GW_HWNDNEXT = 2;
private const int GWL_STYLE = (-16);
private const int WS_VISIBLE = 268435456;
private const int WS_BORDER = 8388608;
#region AIP声明
[DllImport("IpHlpApi.dll")]
extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);
[DllImport("User32")]
private extern static int GetWindow(int hWnd, int wCmd);
[DllImport("User32")]
private extern static int GetWindowLongA(int hWnd, int wIndx);
[DllImport("user32.dll")]
private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static int GetWindowTextLength(IntPtr hWnd);
#endregion
/// <summary>
/// 查找所有应用程序标题
/// </summary>
/// <returns>应用程序标题范型</returns>
public static List<string> FindAllApps(int Handle)
{
List<string> Apps = new List<string>();
int hwCurr;
hwCurr = GetWindow(Handle, GW_HWNDFIRST);
while (hwCurr > 0)
{
int IsTask = (WS_VISIBLE | WS_BORDER);
int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE);
bool TaskWindow = ((lngStyle & IsTask) == IsTask);
if (TaskWindow)
{
int length = GetWindowTextLength(new IntPtr(hwCurr));
StringBuilder sb = new StringBuilder(2 * length + 1);
GetWindowText(hwCurr, sb, sb.Capacity);
string strTitle = sb.ToString();
if (!string.IsNullOrEmpty(strTitle))
{
Apps.Add(strTitle);
}
}
hwCurr = GetWindow(hwCurr, GW_HWNDNEXT);
}
return Apps;
}
#endregion
调用
private void btReApp_Click(object sender, EventArgs e)
{
LvApp.Items.Clear();
List<string> Apps = SystemInfo.FindAllApps((int)this.Handle);
foreach (string app in Apps)
{
ListViewItem item = new ListViewItem(app);
LvApp.Items.Add(item);
}
}
以上的方法无法获取任务管理器里面所有的应用程序,如果用进程获取的话,比如打开多个QQ窗口,他也只能获取到最新打开的那个QQ任务,我的意图是进程只能显示一个QQ进程
,但是任务管理器的应用程序确实显示几个QQ窗口,我要获得这些信息
RayNCC朋友,请回答的详细点,最后是附上代码。谢谢 展开
获取如下图信息
如果是以下这个方法的就别回答了,这个方法,获取不到图上的QQ那个应用程序的,请各位高手帮忙
这是获取程序
Process[] ps=Process.GetProcesses();
foreach (Process p in ps)
{
if (p.MainWindowHandle != null)
{
richTextBox1.Text += p.MainWindowTitle + "";
}
}
#region 查找所有应用程序标题
private const int GW_HWNDFIRST = 0;
private const int GW_HWNDNEXT = 2;
private const int GWL_STYLE = (-16);
private const int WS_VISIBLE = 268435456;
private const int WS_BORDER = 8388608;
#region AIP声明
[DllImport("IpHlpApi.dll")]
extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);
[DllImport("User32")]
private extern static int GetWindow(int hWnd, int wCmd);
[DllImport("User32")]
private extern static int GetWindowLongA(int hWnd, int wIndx);
[DllImport("user32.dll")]
private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize);
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static int GetWindowTextLength(IntPtr hWnd);
#endregion
/// <summary>
/// 查找所有应用程序标题
/// </summary>
/// <returns>应用程序标题范型</returns>
public static List<string> FindAllApps(int Handle)
{
List<string> Apps = new List<string>();
int hwCurr;
hwCurr = GetWindow(Handle, GW_HWNDFIRST);
while (hwCurr > 0)
{
int IsTask = (WS_VISIBLE | WS_BORDER);
int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE);
bool TaskWindow = ((lngStyle & IsTask) == IsTask);
if (TaskWindow)
{
int length = GetWindowTextLength(new IntPtr(hwCurr));
StringBuilder sb = new StringBuilder(2 * length + 1);
GetWindowText(hwCurr, sb, sb.Capacity);
string strTitle = sb.ToString();
if (!string.IsNullOrEmpty(strTitle))
{
Apps.Add(strTitle);
}
}
hwCurr = GetWindow(hwCurr, GW_HWNDNEXT);
}
return Apps;
}
#endregion
调用
private void btReApp_Click(object sender, EventArgs e)
{
LvApp.Items.Clear();
List<string> Apps = SystemInfo.FindAllApps((int)this.Handle);
foreach (string app in Apps)
{
ListViewItem item = new ListViewItem(app);
LvApp.Items.Add(item);
}
}
以上的方法无法获取任务管理器里面所有的应用程序,如果用进程获取的话,比如打开多个QQ窗口,他也只能获取到最新打开的那个QQ任务,我的意图是进程只能显示一个QQ进程
,但是任务管理器的应用程序确实显示几个QQ窗口,我要获得这些信息
RayNCC朋友,请回答的详细点,最后是附上代码。谢谢 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询