文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页技术开发.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时的格式问题