例如:打开一个Excel程序,新建了很多的文档,Book1,Book2,Book3,Book4....
在任务栏上也会显示出Book1,Book2,Book3,Book4....
我怎么能获取有多少个Book文档存在任务栏上呢?
在任务栏上也会显示出Book1,Book2,Book3,Book4....
我怎么能获取有多少个Book文档存在任务栏上呢?
解决方案 »
- 手动输入路径是否合法判断 C#
- 大家帮忙看看这个SQL插入函数有问题不?(ACESS数据库2010)
- 问个很菜的问题 wpf 中怎样让弹出的窗口屏幕居中?
- Tracking Analyst方面:ITimeControl使用问题 C#
- 关于C# 如何调用动态链接库的问题
- Random 随机数问题
- 如何把程序中创建的node节点永远保存在treeView中?
- 怎么将MS office project2003嵌入到asp.net 的网页中,要能动态能绑定数据库的,小弟不懂,请教各位
- 调试程序时断点处不能停下来,为什么?
- C#,编程实现在图片中的绝对定位插入文字
- 急求:怎么可以屏蔽掉彈出網頁的“關閉”按鈕???
- 疑惑:循环体内对一个对象初始化,会引起资源无法释放吗?
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);
}
}