在C#中,以下函数和结构体如何声明?,调用的时候 LPPROCESSENTRY32 lppe 个怎么调用?dwSize个知怎么确定阿,我用sizeof()取不到这个值很郁闷谢谢大家BOOL WINAPI Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32, *PPROCESSENTRY32;
解决方案 »
- 请教C#调用C++写的DLL的结构数组问题
- Microsoft Visual Studio 10.0中用C#(控制台)怎么打开Object Browser窗口
- 有高手会获取vpn服务端连接用户的数据么
- WPF中,如何使用图像API进行绘制控件,让控件能够在窗体中浮动
- C#取前幾位
- 问:c#怎么读压缩包里文件 谢!
- 请问提示“该服务器不愿意处理该请求。”是什么错误?
- 请教C#关于控制其他窗体中DataGridView当前记录的前移及向后移
- 能不能用vScrollBar控制透明度?
- DataGrid的HScroll
- 各位大哥,有没有人知道hta是什么格式的?急!!!!
- 关于oracle 的clob字段存取问题(在线等)
你首先应该封装这个结构体
相应的类型也要转换,比如DWORD换成int32
然后进行类型转换http://dev.csdn.net/article/32/32330.shtm
public static extern bool Process32Next( uint hSnapshot, ref PROCESSENTRY32 lppe ); public struct PROCESSENTRY32
{
public uint dwSize;
public uint cntUsage;
public uint th32ProcessID;
public UIntPtr th32DefaultHeapID;
public uint th32ModuleID;
public uint cntThreads;
public uint th32ParentProcessID;
public long pcPriClassBase;
public uint dwFlags;
public string szExeFile;
} struct dwFlags
{
public const uint TH32CS_SNAPHEAPLIST = 0x1;
public const uint TH32CS_SNAPPROCESS = 0x2;
public const uint TH32CS_SNAPTHREAD = 0x4;
public const uint TH32CS_SNAPMODULE = 0x8;
public const uint TH32CS_SNAPALL = ( TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE );
public const uint TH32CS_INHERIT = 0x80000000;
} PROCESSENTRY32 CurPE ;
CurPE.dwSize = (uint)sizeof( UIntPtr ) + (uint)sizeof( uint )*7
+ (uint)sizeof( long ) + 30 ; //30是szExeFile,是不是太小了? @_@ hSnapshot = CreateToolhelp32Snapshot( dwFlags.TH32CS_SNAPPROCESS, 0 );
isOK = Process32Next( hSnapshot, ref CurPE );
我用C++时也是那么写的
不过C#中简单多了,用Process就行了。
当然API也会行的,我有空也试试,不就是改一下C++的代码嘛
你上面定义时不妨设定大小:
[MarshalAs(UnmanagedType.LPTStr,SizeConst=30)]public string szExeFile;
这样可以用
Marshal.SizeOf(CurPE.GetType())计算大小
你或许也可以用ref StringBuilder szExeFile;
IntPtr szExeFile;//这个你还需用Marshal.PtrToStringUni转换回来
没做过FPE,你这块我很感兴趣,可以说说是如何分析内存数据的?
说个思路,我也去写,哈哈那有意思,我写过好多调用API函数的程序,就没写过你这样分析内存的
搞完后送你全部源代码。
你的结构应该改为类:
public class PROCESSENTRY32
{
public uint dwSize=(uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
public uint cntUsage=0;
public uint th32ProcessID=0;
public IntPtr th32DefaultHeapID=IntPtr.Zero;
public uint th32ModuleID=0;
public uint cntThreads=0;
public uint th32ParentProcessID=0;
public int pcPriClassBase;
public uint dwFlags=0;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=MAX_PATH)]public string szExeFile;
}