富有挑战的题目——如何获得桌面图表的坐标 如何获得桌面图表的坐标来接收我的100分吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 GetWindowRect ClientToScreen( IntPtr hDeskTop = IntPtr.Zero;hDeskTop = Win32.FindWindow("Progman", "Program Manager");hDeskTop = Win32.FindWindowEx(hDeskTop, IntPtr.Zero, "SHELLDLL_DefView", null);hDeskTop = Win32.FindWindowEx(hDeskTop, IntPtr.Zero, "SysListView32", null);if (hDeskTop != IntPtr.Zero){ uint lpNumberOfBytesRead = 0; int count = GetListViewItemCount(hDeskTop); Console.WriteLine(count); IntPtr lpdwProcessId = IntPtr.Zero; Win32.GetWindowThreadProcessId(hDeskTop, ref lpdwProcessId); IntPtr hProcess = Win32.OpenProcess(PROCESS_ACCESS.PROCESS_ALL_ACCESS, false, (uint)lpdwProcessId); IntPtr ptrPointer = Win32.VirtualAllocEx(hProcess, IntPtr.Zero, (uint)Marshal.SizeOf(typeof(Point)), (uint)(MEMState.MEM_RESERVE | MEMState.MEM_COMMIT), (uint)PAGEProtection.PAGE_READWRITE); Point pt = new Point(); int size = Marshal.SizeOf(typeof(Point)); IntPtr ptrTemp = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(pt, ptrTemp, false); for (int i = 0; i < count; ++i) { if (Win32.SendMessage(hDeskTop, (int)ListViewMessages.LVM_GETITEMPOSITION, i, ptrPointer) != IntPtr.Zero) {Win32.ReadProcessMemory(hProcess, ptrPointer, ptrTemp, size, lpNumberOfBytesRead);pt = (Point)Marshal.PtrToStructure(ptrTemp, typeof(Point));Console.WriteLine(pt.ToString()); } } Marshal.FreeHGlobal(ptrTemp); Win32.VirtualFreeEx(hProcess, ptrPointer, 0, (uint)MEMState.MEM_RELEASE); Win32.CloseHandle(hProcess);}int GetListViewItemCount(IntPtr hWnd){ return Win32.SendMessage(hWnd, (int)ListViewMessages.LVM_GETITEMCOUNT, 0, 0);}//所需[DllImport("user32.dll", EntryPoint = "FindWindow")]public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll", EntryPoint = "FindWindowEx")]public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);[DllImport("kernel32.dll")]public static extern IntPtr OpenProcess(PROCESS_ACCESS dwDesiredAccess, bool bInheritHandle, uint dwProcessId);[DllImport("kernel32.dll", SetLastError = true)]public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, [In, Out] uint vNumberOfBytesRead);[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);[DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint dwFreeType);[DllImport("kernel32.dll", EntryPoint = "CloseHandle", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr CloseHandle(IntPtr hObject);public enum PROCESS_ACCESS : uint{ PROCESS_ALL_ACCESS = 0x001F0FFF, PROCESS_VM_OPERATION = 0x0008, PROCESS_VM_READ = 0x0010, PROCESS_VM_WRITE = 0x0020, PROCESS_QUERY_INFORMATION = 0x0400}public enum MEMState : uint{ MEM_COMMIT = 0x1000, MEM_RESERVE = 0x2000, MEM_DECOMMIT = 0x4000, MEM_RELEASE = 0x8000, MEM_FREE = 0x10000, MEM_PRIVATE = 0x20000, MEM_MAPPED = 0x40000, MEM_RESET = 0x80000, MEM_TOP_DOWN = 0x100000, MEM_WRITE_WATCH = 0x200000, MEM_PHYSICAL = 0x400000, MEM_LARGE_PAGES = 0x20000000, MEM_4MB_PAGES = 0x80000000}public enum PAGEProtection : uint{ PAGE_NOACCESS = 0x01, PAGE_READONLY = 0x02, PAGE_READWRITE = 0x04, PAGE_WRITECOPY = 0x08, PAGE_EXECUTE = 0x10, PAGE_EXECUTE_READ = 0x20, PAGE_EXECUTE_READWRITE = 0x40, PAGE_EXECUTE_WRITECOPY = 0x80, PAGE_GUARD = 0x100, PAGE_NOCACHE = 0x200, PAGE_WRITECOMBINE = 0x400}public enum ListViewMessages { LVM_FIRST = 0x1000, LVM_GETSUBITEMRECT = (LVM_FIRST + 56), LVM_GETITEMSTATE = (LVM_FIRST + 44), LVM_GETITEMTEXTW = (LVM_FIRST + 115), LVM_INSERTITEMA = (LVM_FIRST + 7), LVM_INSERTITEMW = (LVM_FIRST + 77), LVM_INSERTCOLUMNA = (LVM_FIRST + 27), LVM_INSERTCOLUMNW = (LVM_FIRST + 97), LVM_DELETECOLUMN = (LVM_FIRST + 28), LVM_GETCOLUMNA = (LVM_FIRST + 25), LVM_GETCOLUMNW = (LVM_FIRST + 95), LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54), LVM_SETITEMA = (LVM_FIRST + 6), LVM_SETITEMW = (LVM_FIRST + 76), LVM_EDITLABELA = (LVM_FIRST + 23), LVM_EDITLABELW = (LVM_FIRST + 118), LVM_DELETEITEM = (LVM_FIRST + 8), LVM_SETBKCOLOR = (LVM_FIRST + 1), LVM_GETBKCOLOR = (LVM_FIRST + 0), LVM_GETTEXTBKCOLOR = (LVM_FIRST + 37), LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38), LVM_DELETEALLITEMS = (LVM_FIRST + 9), LVM_GETNEXTITEM = (LVM_FIRST + 12), LVM_SETITEMCOUNT = (LVM_FIRST + 47), LVM_GETITEMCOUNT = (LVM_FIRST + 4), LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30), LVM_GETITEMRECT = (LVM_FIRST + 14), LVM_GETITEMPOSITION = (LVM_FIRST + 16), LVM_EDITLABEL = (LVM_FIRST + 23)} C#中关于值类型和引用类型的困惑 C# 打包 三层开发中遇到的sql语句问题(去重复数据) 数组查找特定字符所在下标 用.NET开发完整的项目 请问ctrl+enter组合键的ascii码是多少?谢谢! 跪求ASP.NET与C#从入门到精通,电子书? 如何在一程序中用单击事件激活另一程序 有苏州的朋友吗~~ 如何用C#开发带附件发送的smtp服务器? exce里面插入checkbox,如何把他显示的“复选框X”重命名为自己需要的名称 如何:在未知类名的情况下 创建类的实例 (很矛盾的题目- -!)
ClientToScreen(
hDeskTop = Win32.FindWindow("Progman", "Program Manager");
hDeskTop = Win32.FindWindowEx(hDeskTop, IntPtr.Zero, "SHELLDLL_DefView", null);
hDeskTop = Win32.FindWindowEx(hDeskTop, IntPtr.Zero, "SysListView32", null);
if (hDeskTop != IntPtr.Zero)
{
uint lpNumberOfBytesRead = 0;
int count = GetListViewItemCount(hDeskTop);
Console.WriteLine(count);
IntPtr lpdwProcessId = IntPtr.Zero;
Win32.GetWindowThreadProcessId(hDeskTop, ref lpdwProcessId);
IntPtr hProcess = Win32.OpenProcess(PROCESS_ACCESS.PROCESS_ALL_ACCESS, false, (uint)lpdwProcessId);
IntPtr ptrPointer = Win32.VirtualAllocEx(hProcess, IntPtr.Zero, (uint)Marshal.SizeOf(typeof(Point)), (uint)(MEMState.MEM_RESERVE | MEMState.MEM_COMMIT), (uint)PAGEProtection.PAGE_READWRITE);
Point pt = new Point();
int size = Marshal.SizeOf(typeof(Point));
IntPtr ptrTemp = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(pt, ptrTemp, false);
for (int i = 0; i < count; ++i)
{
if (Win32.SendMessage(hDeskTop, (int)ListViewMessages.LVM_GETITEMPOSITION, i, ptrPointer) != IntPtr.Zero)
{
Win32.ReadProcessMemory(hProcess, ptrPointer, ptrTemp, size, lpNumberOfBytesRead);
pt = (Point)Marshal.PtrToStructure(ptrTemp, typeof(Point));
Console.WriteLine(pt.ToString());
}
}
Marshal.FreeHGlobal(ptrTemp);
Win32.VirtualFreeEx(hProcess, ptrPointer, 0, (uint)MEMState.MEM_RELEASE);
Win32.CloseHandle(hProcess);
}int GetListViewItemCount(IntPtr hWnd)
{
return Win32.SendMessage(hWnd, (int)ListViewMessages.LVM_GETITEMCOUNT, 0, 0);
}//所需
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2);
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(PROCESS_ACCESS dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, [In, Out] uint vNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("user32.dll", CharSet=CharSet.Ansi,EntryPoint="SendMessageA")]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint dwFreeType);
[DllImport("kernel32.dll", EntryPoint = "CloseHandle", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr CloseHandle(IntPtr hObject);public enum PROCESS_ACCESS : uint
{
PROCESS_ALL_ACCESS = 0x001F0FFF,
PROCESS_VM_OPERATION = 0x0008,
PROCESS_VM_READ = 0x0010,
PROCESS_VM_WRITE = 0x0020,
PROCESS_QUERY_INFORMATION = 0x0400
}
public enum MEMState : uint
{
MEM_COMMIT = 0x1000,
MEM_RESERVE = 0x2000,
MEM_DECOMMIT = 0x4000,
MEM_RELEASE = 0x8000,
MEM_FREE = 0x10000,
MEM_PRIVATE = 0x20000,
MEM_MAPPED = 0x40000,
MEM_RESET = 0x80000,
MEM_TOP_DOWN = 0x100000,
MEM_WRITE_WATCH = 0x200000,
MEM_PHYSICAL = 0x400000,
MEM_LARGE_PAGES = 0x20000000,
MEM_4MB_PAGES = 0x80000000
}
public enum PAGEProtection : uint
{
PAGE_NOACCESS = 0x01,
PAGE_READONLY = 0x02,
PAGE_READWRITE = 0x04,
PAGE_WRITECOPY = 0x08,
PAGE_EXECUTE = 0x10,
PAGE_EXECUTE_READ = 0x20,
PAGE_EXECUTE_READWRITE = 0x40,
PAGE_EXECUTE_WRITECOPY = 0x80,
PAGE_GUARD = 0x100,
PAGE_NOCACHE = 0x200,
PAGE_WRITECOMBINE = 0x400
}
public enum ListViewMessages {
LVM_FIRST = 0x1000,
LVM_GETSUBITEMRECT = (LVM_FIRST + 56),
LVM_GETITEMSTATE = (LVM_FIRST + 44),
LVM_GETITEMTEXTW = (LVM_FIRST + 115),
LVM_INSERTITEMA = (LVM_FIRST + 7),
LVM_INSERTITEMW = (LVM_FIRST + 77),
LVM_INSERTCOLUMNA = (LVM_FIRST + 27),
LVM_INSERTCOLUMNW = (LVM_FIRST + 97),
LVM_DELETECOLUMN = (LVM_FIRST + 28),
LVM_GETCOLUMNA = (LVM_FIRST + 25),
LVM_GETCOLUMNW = (LVM_FIRST + 95),
LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54),
LVM_SETITEMA = (LVM_FIRST + 6),
LVM_SETITEMW = (LVM_FIRST + 76),
LVM_EDITLABELA = (LVM_FIRST + 23),
LVM_EDITLABELW = (LVM_FIRST + 118),
LVM_DELETEITEM = (LVM_FIRST + 8),
LVM_SETBKCOLOR = (LVM_FIRST + 1),
LVM_GETBKCOLOR = (LVM_FIRST + 0),
LVM_GETTEXTBKCOLOR = (LVM_FIRST + 37),
LVM_SETTEXTBKCOLOR = (LVM_FIRST + 38),
LVM_DELETEALLITEMS = (LVM_FIRST + 9),
LVM_GETNEXTITEM = (LVM_FIRST + 12),
LVM_SETITEMCOUNT = (LVM_FIRST + 47),
LVM_GETITEMCOUNT = (LVM_FIRST + 4),
LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30),
LVM_GETITEMRECT = (LVM_FIRST + 14),
LVM_GETITEMPOSITION = (LVM_FIRST + 16),
LVM_EDITLABEL = (LVM_FIRST + 23)
}