分类分类
关注+2010-02-14作者:
.NET Compact Framework下的进程管理:
在.NET Compact Framework 的进程管理需要调用win32的API,也就是P/Invoke,在msnd上提供了这一P/Invoke的源代码, Creating a Microsoft .NET Compact Framework-based Process Manager Application,由于在技术交流群里有不同的人问同样的问题,因此打算写一下。
Win32 API
关键的API 如下:
privateconstintTH32CS_SNAPPROCESS=0x00000002;
[DllImport("toolhelp.dll")]
publicstaticexternIntPtrCreateToolhelp32Snapshot(uintflags,uintprocessid);
[DllImport("toolhelp.dll")]
publicstaticexternintCloseToolhelp32Snapshot(IntPtrhandle);
[DllImport("toolhelp.dll")]
publicstaticexternintProcess32First(IntPtrhandle,byte[]pe);
[DllImport("toolhelp.dll")]
publicstaticexternintProcess32Next(IntPtrhandle,byte[]pe);
[DllImport("coredll.dll")]
privatestaticexternIntPtrOpenProcess(intflags,boolfInherit,intPID);
privateconstintPROCESS_TERMINATE=1;
[DllImport("coredll.dll")]
privatestaticexternboolTerminateProcess(IntPtrhProcess,uintExitCode);
[DllImport("coredll.dll")]
privatestaticexternboolCloseHandle(IntPtrhandle);
privateconstintINVALID_HANDLE_VALUE=-1;
调用上面的API就能就能轮询出所有的进程,可以杀死指定进程了。
Structures
调用这些API需要下面的结构体 PROCESSENTRY32,结构体的转换是P/Invoke里面最难的部分,我曾经写过一篇这样的文章(.NET Compact Framework 下Win32 API P/Invoke 的使用),还是有很多需要学习和改进的地方,欢迎指教。
PROCESSENTRY32 implementation
#regionPROCESSENTRY32implementation
// typedefstructtagPROCESSENTRY32
// {
// DWORDdwSize;
// DWORDcntUsage;
// DWORDth32ProcessID;
// DWORDth32DefaultHeapID;
// DWORDth32ModuleID;
// DWORDcntThreads;
// DWORDth32ParentProcessID;
// LONGpcPriClassBase;
// DWORDdwFlags;
// TCHARszExeFile[MAX_PATH];
// DWORDth32MemoryBase;
// DWORDth32AccessKey;
// }PROCESSENTRY32;
privateclassPROCESSENTRY32
{
//constantsforstructuredefinition
privateconstintSizeOffset=0;
privateconstintUsageOffset=4;
privateconstintProcessIDOffset=8;
privateconstintDefaultHeapIDOffset=12;
privateconstintModuleIDOffset=16;
privateconstintThreadsOffset=20;
privateconstintParentProcessIDOffset=24;
privateconstintPriClassBaseOffset=28;
privateconstintdwFlagsOffset=32;
privateconstintExeFileOffset=36;
privateconstintMemoryBaseOffset=556;
privateconstintAccessKeyOffset=560;
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论