您的位置:首页技术开发.Net 专栏 → .NET Compact Framework下的进程管理

.NET Compact Framework下的进程管理

时间:2010/2/14 18:46:00来源:本站整理作者:我要评论(0)

.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;

相关视频

    没有数据

相关阅读 vs.netIDE报"以下文件中的行尾不一致,要将行尾标准化吗?"的解决ie6下面asp.net mvc3 部署应用程序.NET 3.5 安装错误的四个原因及解决方法支持无限制历史记录的Paint.NET 3.5.8 Final,你用了吗?.NET Framework环境安装错误怎么办?JVM和.NET CLR和哪个会被彻底击败在asp.net mvc中实现右键菜单和简单的分页教程VB.NET如何得到调用当前过程的方法名称和类名称

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题