获取任务栏上程序运行个数

B_S 2007-09-04 11:25:51
例如:打开一个Excel程序,新建了很多的文档,Book1,Book2,Book3,Book4....
在任务栏上也会显示出Book1,Book2,Book3,Book4....
我怎么能获取有多少个Book文档存在任务栏上呢?
...全文
157 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigeyescat 2007-09-04
  • 打赏
  • 举报
回复
强! 学习
mlhy20060406 2007-09-04
  • 打赏
  • 举报
回复
up
懒牛科技 2007-09-04
  • 打赏
  • 举报
回复
学习
hm7921936 2007-09-04
  • 打赏
  • 举报
回复
up and mark
symbol441 2007-09-04
  • 打赏
  • 举报
回复
mark
best8625 2007-09-04
  • 打赏
  • 举报
回复
帮Up一下
王集鹄 2007-09-04
  • 打赏
  • 举报
回复
参考如下代码
using System.Runtime.InteropServices;

[DllImport("user32.DLL")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.DLL")]
public static extern IntPtr FindWindow(string lpszClass, string lpszWindow);
[DllImport("user32.DLL")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,
IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd,
out uint dwProcessId);

public const uint PROCESS_VM_OPERATION = 0x0008;
public const uint PROCESS_VM_READ = 0x0010;
public const uint PROCESS_VM_WRITE = 0x0020;

[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(uint dwDesiredAccess,
bool bInheritHandle, uint dwProcessId);
public const uint MEM_COMMIT = 0x1000;
public const uint MEM_RELEASE = 0x8000;

public const uint MEM_RESERVE = 0x2000;
public const uint PAGE_READWRITE = 4;

[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress,
uint dwSize, uint flAllocationType, uint flProtect);

[DllImport("kernel32.dll")]
public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress,
uint dwSize, uint dwFreeType);

[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr handle);

[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
IntPtr lpBuffer, int nSize, ref uint vNumberOfBytesRead);

public const int WM_USER = 0x0400;
public const int TB_BUTTONCOUNT = WM_USER + 24;
public const int TB_GETBUTTONTEXTW = WM_USER + 75;

private void button1_Click(object sender, EventArgs e)
{
IntPtr vHandle = FindWindow("Shell_TrayWnd", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "ReBarWindow32", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "MSTaskSwWClass", null);
vHandle = FindWindowEx(vHandle, IntPtr.Zero, "ToolbarWindow32", null);
int vCount = SendMessage(vHandle, TB_BUTTONCOUNT, 0, 0);
uint vProcessId;
GetWindowThreadProcessId(vHandle, out vProcessId);
IntPtr vProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ |
PROCESS_VM_WRITE, false, vProcessId);
IntPtr vPointer = VirtualAllocEx(vProcess, IntPtr.Zero, 0x1000,
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
char[] vBuffer = new char[256];
uint vNumberOfBytesRead = 0;
try
{
for (int i = 0; i < vCount; i++)
{
SendMessage(vHandle, TB_GETBUTTONTEXTW, i, vPointer.ToInt32());
ReadProcessMemory(vProcess, vPointer,
Marshal.UnsafeAddrOfPinnedArrayElement(vBuffer, 0),
vBuffer.Length * sizeof(char), ref vNumberOfBytesRead);
int l = 0;
for (int j = 0; j < vBuffer.Length; j++)
{
if (vBuffer[j] == (char)0)
{
l = j;
break;
}
}
Console.WriteLine(new string(vBuffer, 0, l));
}
}
finally
{
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
CloseHandle(vProcess);
}
}

110,499

社区成员

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

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

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