C#利用WindowsApi获取外部程序中的ListView控件中的数据
此文章,主要实现了C#利用Windows Api 获取外部程序中的ListView控件中的数据,也算是C# 使用API的一个高级一些的例子吧。 
下面列出API相关的声明部分:     
/// <summary>     
/// 作者: 三角猫     
/// 网址: /     
/// 声明: 转载请务必保留原作者信息     
/// </summary>
const uint LVM_FIRST = 0x1000; 
const uint HDM_FIRST = 0x1200; 
const uint LVM_GETITEMCOUNT = LVM_FIRST + 4; 
const uint LVM_GETITEMW = LVM_FIRST + 75; 
const uint LVM_GETHEADER = LVM_FIRST + 31; 
const uint HDM_GETITEMCOUNT = HDM_FIRST + 0;   
[DllImport("user32.DLL")] 
static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 
[DllImport("user32.DLL")] 
static extern IntPtr FindWindow(string lpszClass, string lpszWindow);
[DllImport("user32.DLL")] 
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 
[DllImport("user32.dll")] 
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint dwProcessId);   
const uint PROCESS_VM_OPERATION = 0x0008; 
const uint PROCESS_VM_READ = 0x0010; 
const uint PROCESS_VM_WRITE = 0x0020;   
[DllImport("kernel32.dll")] 
static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
excel listview控件const uint MEM_COMMIT = 0x1000; 
const uint MEM_RELEASE = 0x8000;
const uint MEM_RESERVE = 0x2000; 
const uint PAGE_READWRITE = 4;
[DllImport("kernel32.dll")]
static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);   
[DllImport("kernel32.dll")] 
static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint dwFreeType);   
[DllImport("kernel32.dll")] 
static extern bool CloseHandle(IntPtr handle);   
[DllImport("kernel32.dll")] 
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr  lpBaseAddress, IntPtr lpBuffer, int nSize, ref uint vNumberOfBytesRead);   
[DllImport("kernel32.dll")] 
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr  lpBaseAddress, IntPtr lpBuffer, int nSize, ref uint vNumberOfBytesRead);   
public struct LVITEM 
{
public int mask;
public int iItem;
public int iSubItem;
public int state;
public int stateMask;
public IntPtr pszText;
public int cchTextMax;
public int iImage;
public IntPtr lParam;
public int iIndent;
public int iGroupId;
public int cColumns;
public IntPtr puColumns;
}
int LVIF_TEXT = 0x0001;
几个操作LISTVIEW的自定义函数
/// <summary> 
/// 获取 ListView 的行数 
/// </summary> 
/// <param name="hwnd"></param> 
/// <returns></returns>
int ListView_GetItemCount(IntPtr hwnd) 
{

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。