在Windows Mobile 6专业版设备中,我尝试调用 CreateToolhelp32Snapshot 函数,但出现 ERROR_NOT_ENOUGH_MEMORY 错误。
我已经按照建议的here使用了标志 TH32CS_SNAPNOHEAPS 。 代码是C#.NET 3.5 Compact Edition。
我的目标是通过它的名字找到一个过程。
private const int TH32CS_SNAPPROCESS = 0x00000002;
private const int TH32CS_SNAPNOHEAPS = 0x40000000;
private const int INVALID_HANDLE_VALUE = -1;
[DllImport("toolhelp.dll", SetLastError = true)]
private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processID);
public static IntPtr FindProcessPID(string fullpath)
{
fullpath = fullpath.ToLower();
IntPtr snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPNOHEAPS, 0);
if ((Int32)snapshot_handle == INVALID_HANDLE_VALUE)
throw new Win32Exception(Marshal.GetLastWin32Error(), "CreateToolhelp32Snapshot failed.");
感谢。
答案 0 :(得分:0)
我的代码中唯一的差异似乎是您对CreateToolhelp32Snapshot的调用中的硬代码进程ID:
uint procID = 0;
IntPtr pHandle = CreateToolhelp32Snapshot(SnapshotFlags.Process | SnapshotFlags.NoHeaps, procID);
我的CpuMon的网页:http://www.hjgode.de/wp/2012/12/14/mobile-development-a-remote-cpu-monitor-and-cpu-usage-analysis/