打造属于自己的任务管理器

该文章首次发表于看雪论坛
:
http://bbs.pediy.com/showthread.php?t=102414

 

任务管理器是在windows系统用得最频繁的一个软件之一吧.你是否会觉得任务管理器的功能过于简单,不能满足你的需要呢?那好,就让我们一起来动手打造一个更强大的任务管理器

  

我就觉得任务管理器的网络项的功能不够,如果能显示实时的上传,下载速度就好了.这样我们就可以随时关注自己的网络状态.虽然显示实时速度的软件很多,但是每次查看的时候都要找出来打开,不够方便,加在任务管理器就方便调出来查看了,并且它本身已经有了曲线显示了.,开始吧!

最终效果图
:
效果图
思路
:
      
怎么样才能在任务管理器中插入两列速度呢?我认为有下面两种方法
:
      1.PEDIY
技术,对原来的任务管理器进行修改扩充,增加一定的代码以增加原程序的功能
.
      2.
通过DLL注入的方法,把已编写好的DLL注入到原程序中已实现想要的功能
.

对于第一种方法,修改了原来的程序,不方便切换为没修改时的状态.第二种就可以很方便的进行加载和卸载DLL,并且对原程序不需要做任何修改,不会破坏到原来的程序.下面就讨论第二种方法
.

步骤
:
    
,远程注入
DLL;
    
,编写DLL实现相关功能
;

,远程注入DLL

   在微软的Windows,每个进程都能获得自身的私有地址空间.当使用指针引用内存时,指针值将引用自身进程地址空间中的一个内存地址.进程不能创建一个引用属于其他进程的内存指针.
进程不能创建一个引用属于其他进程的内存指针,否则就会出现内存的错误,该错误不会影响到其他进程所使用的内存.那如何才能将自己编写的DLL放到任务管理器的进程空间中呢?通过远程注入!远程注入技术需要满足一个条件就是要求目标进程中的一个线程调用LoadLibrary函数来加载所需要的DLL.由于除了自己进程的线程中之外,我们不能简单的控制其他进程中的线程,因此该解决方法要求我们在目标进程中创建一个新线程,这样我们就可以控制它执行任何代码.Windows提供了一个

CreateRomoteThread
的函数可以简单地在另一个进程中创建线程.

 

返回值:
  函数成功,返回线程句柄;函数失败返回false

现在已经知道了如何在另一个进程中创建线程了,但是如何让该线程来加载DLL?答案很简单:让线程去调用LoadLibrary函数:

 

pszLibFile:指定要载入的动态链接库的名称

返回值:
    
成功则返回库模块的句柄,零表示失败;

归结起来就应该是如下显示的一行代码:

MyLib.dll就是下面要编写的DLL.

可是还它不能达到预期的目的,里面还存在两个问题
.
1.
如果目标程序并没有使用到LoadLibrary函数,生成的exe的导入表就没有该函数,如果直接这样使用一些不可以预测的东西,可能会导致访问为例等错误.为强制使用LoadLibrary函数,必须通过调用GetProcAddress得到该函数的确切内存位置
.

LoadLibrary
函数在Kernel32.dll,函数应该变成如下:

2.由于字符串"E://MyLib.dll"是在调用者的进程空间里,LoadLibrary时并不能使用其他进程空间的内存地址,将会出现上述的访问违例.所以还要将DLL的路径名字字符串放进远程的地址空间中.当调用CreateRemoteThread,需要将所放置字符串的地址(相对远程进程)传递给它.同样Windows提供了一个函数,VirtualAllocEx,他允许一个进程分配另一个进程的地址空间中的内存:

 

 

另外一个函数允许释放该内存:

分配好了内存,现在需要从进程的地址空间复制到远程进程的地址空间中去.

到此已经解决了需要了解工作,下面来总结一下操作步骤:
1)
使用VirtualAllocEx函数分配远程的地址空间中的内存
.
2)
使用WriteProcessMemory函数将DLL的路径名复制到步骤1)所分配的内存中
.
3)
使用GetProcAddress函数得到LoadLibrary函数的实际地址(Kernel32.dll
).
4)
使用CreateRemoteThread函数在远程进程中创建一个线程,调用正确的LoadLibrary函数,将步骤1)所分配的内存地址传递给他.


这时,DLL已经注入到了远程进程的地址空间中,DLLDllMain函数接收到一个DLL_PROCESS_ATTACH通知,并且可以执行所需要执行的代码了.

具体代码如下:

 

,编写DLL实现相关功能
    
好了,DLL就注入到了目标进程了,下面就开始编写DLL来实现想要的功能了.

我想要在任务管理器的这一个控件后面加上两列,该如何做呢?

未插入列
要想在这个控件中添加两列就必须要知道这个控件的句柄,通过EnumChildWindows函数可以枚举父窗口的所有子窗口.这个控件也在其中.

通过这个函数可以看出,也必须要知道父窗体的句柄,很简单,通过FindWindow就可以得到任务管理器的句柄了.

FindWindow第一个参数是类名,第二个参数是窗体的标题.第一个参数32770是什么,从何而来的?通过vs自带的一个工具SPY++可以查看到:

对话框类名
看到了吧,32770就是任务管理器的类名,也是一般对话框的类名
.

前面说到,既然是枚举所有控件,我怎么知道那个控件的句柄才是我要找的控件句柄呢?也是通过SPY++可以找到该控件的
ID:
控件ID
控件
ID:   00000A28 ;


EnumChildWindows
第二个参数是回调的函数,所以写一个_EnumChildProc函数来比较该控件是否是想要的控件,最后一个参数是一个自定义参数,所以我们需要定义一个结构来保存获取到句柄和需要查找的控件ID,传递给EnumChildProc;

 

 

控件的句柄找到了,下一步就是在该控件中插入两个列头具体代码如下:

 

 

列已经建好了,接下来要做的就是计算出当前的速度了.
GetIfTable()
可以从操作系统维护的MIB库中读出本机各个接口的当前信息,如接口数目、类型、速率、物理地址、接收/发送字节数、错语字节数等.

 

 

通过MIB_IFROW可以看出,里面已经包含了我们需要的信息 dwInOctets,dwOutOctets就分别是下载和上传的自己数了,他是累积量,我们可以通过计算可以获得每秒的字节数

当前下载速率=(当次输入的字节数-上次输入的字节数)/1.   
当前上传速率=(当次输出的字节数-上次输出的字节数)/1
.    
具体代码如下:


下面是创建一个线程,每秒读取一次,然后更新到界面上


到此为止,整个程序已经完成了90%,还有些就是关于一些如何判断DLL已经加载了,如何卸载等请看源代码,这里就不一一介绍了.这个程序还可以做得跟好,比如在每个进程那个列表加上一个实时速度,这样就可以看到每个进程网络情况等,有兴趣的朋友可以自己添加完善.

如果本文有什么不对之处,希望各位指出
!

本程序使用的编译器是vs.net2008 sp1 

 源代码下载

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你是一位产品经理么?你知道产品经理的本职工作是什么吗? 本PPT来告诉你,产品经理的本职是什么。 大概由于产品这个概念过于宽泛,产品管理也就成了所有组织里最难定义的一项工作。我曾经和一些初涉产品管理或准备在此领域进一步发展的朋友们讨论过“产品经理的本职”这个问题。在这里,我打算把其中一些内容和大家分享,也欢迎各位进行讨论。 首先我要对“团队”下个定义,我所提的团队意指两个群体,一是狭义团队,即为了某个产品或某个产品的某个方面(外围设计、工程设计、质量监控等)而直接共同工作的一组人员;而广义团队,则是在某些工作上和狭义团队有重合部分的群体,如营销部门、法律部门和行政管理部门等。 帮助团队(和公司)为用户打造正确的产品 帮助团队 最优秀的产品经理总是知道哪些是具备最高优先级的任务并不惜花费所有时间来确保他们的团队处理这些任务。 主要来讲,这由以下两方面组成: 协调 – 使团队在有清晰目标和工作重点的前提下有效地协同工作 沟通 – 使所以内部成员彻底了解其所从事的工作之各方面意义(目标、时间和原因等等)。这点对于处于迅速变化的环境中的团队尤其重要。很多人把产品经理比作是产品的 CEO 或者是规则制定者,我对这种说法不以为然,因为这夸大了产品经理的实际权力和影响力。好的团队应该共享这份权利和责任感,人人都可以提出建议和改善现状。而相应地,优秀的产品经理则应该通过积极听取成员意见的方式来保证实现上述状态,不仅如此,他们还应负责发现问题、打破僵局和统一团队意向。 所以,并不是说产品经理不能有自己的想法,而是这些想法不能凌驾于组织所赋予的使命和集体需求之上。好的产品经理应该善于使他的队伍把集体的智慧在决策过程中充分发挥出来。 从实践角度来讲,这种职责往往就会变成总结会议记录或编制获得团队认可的产品计划。别小看了总结这项工作,我不只一次发现写一份优秀的会议报告往往要比会议本身耗时得多。 很多时候,你还需要那些广义团队的配合 – 即从组织里其它部门那儿获取反馈和意见等,以移除那些可能妨碍到计划实施的潜在障碍。在 Twitter,我们把这种和广义团队的配合称为 ACT SOLID(整体行动)。 在一支产品团队里,工程师负责编程,设计师负责包装,而产品经理却往往没有任何有形的作品。可是在我看来,全队的成功却系之于产品经理对于其本职工作的完成程度。 帮助公司 了解公司的整体目标和团队在宏观上对于实现该目标的作用是一名产品经理必须做到的一点。 就我个人经验来看,优秀的设计师在这方面更是出类拔萃 – 他们在工作中永远以公司愿景作为坐标,并帮助他们的队伍也做到这一点。 这种以实现组织愿景为终极目标的隶属意识和与其它团队间的配合意识极其重要。好的产品经理会清楚地让团队成员明白他们是作为组织的一份子而工作着的。 小团队的成功是在为更大团队的成功添砖加瓦而已。因此,在招聘产品经理的面试过程中,我常常从对话中寻找诸如“公司”、“创立者”、“视野”或者“CEO”这种传递着宏观视野的词语。 正如在前一部分里提到的一样,这么做并不是要抹杀个性或者创新的存在,而是确保个性和创新服务于组织目标而非取而代之。 用户 了解公司的整体目标和团队在宏观上对于实现该目标的作用是一名产品经理必须做到的一点。 就我个人经验来看,优秀的设计师在这方面更是出类拔萃 – 他们在工作中永远以公司愿景作为坐标,并帮助他们的队伍也做到这一点。 这种以实现组织愿景为终极目标的隶属意识和与其它团队间的配合意识极其重要。好的产品经理会清楚地让团队成员明白他们是作为组织的一份子而工作着的。 最好的产品经理懂得从用户的角度看问题,懂得为用户的需求呐喊,还懂得以用户的身份参与到产品开发过程中去。 小团队的成功是在为更大团队的成功添砖加瓦而已。因此,在招聘产品经理的面试过程中,我常常从对话中寻找诸如“公司”、“创立者”、“视野”或者“CEO”这种传递着宏观视野的词语。 正如在前一部分里提到的一样,这么做并不是要抹杀个性或者创新的存在,而是确保个性和创新服务于组织目标而非取而代之。 如果没有对于目标群体的深刻了解,做到以上几点是非常困难的。同时,优秀的产品经理还必须想进办法去倾听用户的声音 – 无论是通过产品试用、直接谈话、email 或网络信息还是和其它负责收集信息的队伍合作等方式。 最终,这些信息应该被服务于“打造正确产品”这个属于产品团队最终目标。 打造正确的产品 最好的产品经理懂得从用户的角度看问题,懂得为用户的需求呐喊,还懂得以用户的身份参与到产品开发过程中去。 打造产品终究是产品部门存在的理由和目标。再好的创意和设计如果无法转化现实的产品也只是废纸一堆而已。 好的产品经理知道如何在“做得好”和“做得成”之间找到平衡点。好的团队应该一直处于测试、收集早期反馈和改进的循环中,以求在将产品送到用户手中时尽量接近无可挑剔的状态(当然,这是个永远无法达到的状态)。 这就意味着要做一些必要的折衷,那些有着清晰目标和熟悉用户心理及需求的产品团队很擅长这么做,而让团队达到这种状态的则是优秀的产品经理。 如果没有对于目标群体的深刻了解,做到以上几点是非常困难的。同时,优秀的产品经理还必须想进办法去倾听用户的声音 – 无论是通过产品试用、直接谈话、email 或网络信息还是和其它负责收集信息的队伍合作等方式。 最终,这些信息应该被服务于“打造正确产品”这个属于产品团队最终目标。 平庸的产品经理让他的团队出产产品,优秀的产品经理则让他的团队出产正确的产品。 后者擅长从反馈和早期用户体验中收集到信息判断产品是否满足目标群体的需求,同时也通过和高层的沟通来确保产品符合组织战略。 另一项属于产品经理的重要职责则是在产品面市后的后期工作。产品经理应该和他们的团队就测量指标和用户满意度等方面精密合作,不厌其烦地从海量信息中提取有效部分 – 什么方面使用户满意,什么方面又令他们失望,以进入到下一个改进周期。 这就意味着要做一些必要的折衷,那些有着清晰目标和熟悉用户心理及需求的产品团队很擅长这么做,而让团队达到这种状态的则是优秀的产品经理。 平庸的产品经理让他的团队出产产品,优秀的产品经理则让他的团队出产正确的产品。 后者擅长从反馈和早期用户体验中收集到信息判断产品是否满足目标群体的需求,同时也通过和高层的沟通来确保产品符合组织战略。 另一项属于产品经理的重要职责则是在产品面市后的后期工作。产品经理应该和他们的团队就测量指标和用户满意度等方面精密合作,不厌其烦地从海量信息中提取有效部分 – 什么方面使用户满意,什么方面又令他们失望,以进入到下一个改进周期。 关键词:产品经理的本职是什么PPT下载,管理小知识PPT下载,优秀幻灯片下载,.PPTX格式;
Openbiz Cubi是一个底层基于PHP开源快速开发平台。Cubi的设计目标是提供给开发人员高效便捷的开发工具和高度可重用的对象化模块。我们相信随着Openbiz的Cubi开源平台的普及将会引领商业软件开发的发展趋势。Cubi平台自从2003年Openbiz的全球团队创建至今,已经发展成一套完整的具备各种友好开发特性的快速软件开发平台。   众所周知,大部分的网页应用程序都需要包括:系统模块、会话模块、服务模块、安全模块、包管理模块、菜单模块、主题模块、帮助模块、事件日志模块、电子邮件模块、计划任务模块、缓存模块、附件模块和备份模块等。   由于Cubi已经提供了大部分常规开发任务需要的以上模块,使得开发人员只需专心关注于商业逻辑的实现,而不需要考虑重复、冗余的初始化开发任务。这样不但大大节省了开发成本,也大大提高了应用程序的开发效率。   Openbiz Cubi 2.0关键特性更新列表 Openbiz 应用市场 在Openbiz 升级到2.0后,系统管理员开始能够从Openbiz的应用市场下载他们感兴趣的软件应用程序了,而且今后的升级会由应用市场自动完成,终端用户不再需要接触任何系统文件,只需浏览并下载他们感兴趣的各种新应用程序即可,简而言之就像安卓手机的安卓市场一样! 这就意味着所有的Openbiz开发人员已经拥有了共享的终端用户群。 Openbiz 应用程序源 作为一个Openbiz的应用程序开发人员,现在可以轻松的将自己开发的软件发布到自己的Openbiz应用程序源并给终端用户提供下载了。 开发人员不必在担心如何通过市场推广、发布自己的产品了,因为用户可以通过开发人员上传的软件描述看到该软件信息,而且将来的任何更新也都会通过系统自动推送到终端用户。 从现在开始,让我们一起来在Openbiz上开发各自的应用程序吧。 应用程序序列号支持: Openbiz当然不只是一个软件开源爱好者的家园。Openbiz Cubi平台已经开始为商业化软件开发者提供支持了。 Openbiz平台现在已经能够完美支持经过Ioncube编译后的源代码(包括元数据和UI模板)发布了,开发人员可以将自己开发的软件通过Ioncube代码编译发布为带有序列号管理的应用程序到Openbiz Cubi的应用市场上。Openbiz Cubi将提供友好的关于您产品的注册、激活和过期提示。 让我们一起在我们的广大的开源用户群支持下,打造属于自己的商业产品。
Openbiz Cubi是一个底层基于PHP开源快速开发平台。Cubi的设计目标是提供给开发人员高效便捷的开发工具和高度可重用的对象化模块。我们相信随着Openbiz的Cubi开源平台的普及将会引领商业软件开发的发展趋势。Cubi平台自从2003年Openbiz的全球团队创建至今,已经发展成一套完整的具备各种友好开发特性的快速软件开发平台。   众所周知,大部分的网页应用程序都需要包括:系统模块、会话模块、服务模块、安全模块、包管理模块、菜单模块、主题模块、帮助模块、事件日志模块、电子邮件模块、计划任务模块、缓存模块、附件模块和备份模块等。   由于Cubi已经提供了大部分常规开发任务需要的以上模块,使得开发人员只需专心关注于商业逻辑的实现,而不需要考虑重复、冗余的初始化开发任务。这样不但大大节省了开发成本,也大大提高了应用程序的开发效率。   Openbiz Cubi 2.0关键特性更新列表 Openbiz 应用市场 在Openbiz 升级到2.0后,系统管理员开始能够从Openbiz的应用市场下载他们感兴趣的软件应用程序了,而且今后的升级会由应用市场自动完成,终端用户不再需要接触任何系统文件,只需浏览并下载他们感兴趣的各种新应用程序即可,简而言之就像安卓手机的安卓市场一样! 这就意味着所有的Openbiz开发人员已经拥有了共享的终端用户群。 Openbiz 应用程序源 作为一个Openbiz的应用程序开发人员,现在可以轻松的将自己开发的软件发布到自己的Openbiz应用程序源并给终端用户提供下载了。 开发人员不必在担心如何通过市场推广、发布自己的产品了,因为用户可以通过开发人员上传的软件描述看到该软件信息,而且将来的任何更新也都会通过系统自动推送到终端用户。 从现在开始,让我们一起来在Openbiz上开发各自的应用程序吧。 应用程序序列号支持: Openbiz当然不只是一个软件开源爱好者的家园。Openbiz Cubi平台已经开始为商业化软件开发者提供支持了。 Openbiz平台现在已经能够完美支持经过Ioncube编译后的源代码(包括元数据和UI模板)发布了,开发人员可以将自己开发的软件通过Ioncube代码编译发布为带有序列号管理的应用程序到Openbiz Cubi的应用市场上。Openbiz Cubi将提供友好的关于您产品的注册、激活和过期提示。 让我们一起在我们的广大的开源用户群支持下,打造属于自己的商业产品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值