- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程与进程通信
进程与进程通信 1.创建进程 创建进程就是启动一个新的应用程序,并运行其主线程。一般有两种方式创建进程。 1. CreateProcess 2. ShellExecuteEx 其中第一种要求打开进程后需要关闭进程的句柄和主线程的句柄。 第二种不需要相应的操作,只需要打开进程即可。 2. 进程函数 TerminateProcess(),实现进程的终止。 通过函数GetExitCodeProcess()来得到进程退出的状态。 OpenProcess()根据进程ID返回一个已经正在运行的进程的句柄。 GetWindowThreadProcessId()利用当前应用程序的句柄,来得到创建窗口的进程ID和主线程ID. 2. 进程函数 FindWindow()函数实现通过窗口文本找到正在运行的窗口句柄的方法。 SetForegroundWindow()函数实现把系统中已运行的进程放在最上层。 进程列举实验 先了解进程列举的基本技术。 1.ToolHelp 它是用来获得操作系统的某些底层信息 尤其是当前正在运行的进程以及进程下的线 程、模块和堆信息。这些信息都存放在TOOLHELP.DLL的动态链接库中,我们在使用的时候必须要先加载此动态库。 2.快照(Snapshots) 通俗的说就是为系统某一时刻拍一个快照,用户通过在快照里查询需要的信息。 用户通过函数CreateToolhelp32Snapshot()函数来获得某一时刻的进程映射,使用完后要注意关闭句柄。 通过函数Process32First()和Process32Next() 进程列举实验 3.通过EnumWindows()可以得到窗口的句柄。 4.通过FindWindow()函数可以获得窗口句柄。 回调函数 什么是回调函数? 首先做一个形象的比喻: 你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机是我通知你的手段,它就是回叫函数,也叫回调函数. 回调函数 回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。 回调函数 回调函数非常适合在重复执行任务的情况下使用。另一个常见用途是与枚举函数(如 Win32 API 中的 EnumFontFamilies、EnumPrinters 和 EnumWindows)一起使用。EnumWindows 函数枚举计算机上的所有现有窗口,并调用回调函数以针对每个窗口执行任务. 2.进程通信 进程通信的方法有如下几种:剪切板、WINDOWS消息(WM_COPYDATA)、内存文件映射、命名管道以及邮槽等。 讲解WINDOWS消息(WM_COPYDATA)实现进程通信。使用SendMessage(hwnd, WM_COPYDATA,wParam,lParam)可以方便的实现进程间的通信。 2.进程的通信 在进程的通信中需要用户自己定义消息,当用户定义了消息后需要向窗口注册,才能够被窗口响应。 注册消息函数:RegisterWindowMessage 在进程通信中如果需要从一个进程发送数据到另一个进程可以使用EVC定义的消息 WM_COPYDATA。 发送窗口消息函数SendMessage函数 进程间如何发消息 有一个进程间发送消息的消息WM_COPYDATA * *
文档评论(0)