关于运用入程间通信实现程序自我维护(3)
2012-06-24 00:22
接下来是调用1次Process三二First函数,从快照中获患上入程列表,然后重复调用Process三二Next,直到函数返归FALSE为止。这样将遍历快照中入程列表。这两个函数都带两个参数,它们分别是快照句柄以及1个PROCESSENTRY三二结构。
调用完Process三二First或者Process三二Next以后,PROCESSENTRY三二中将囊括系统中某个入程的关键信息。它的详细内容以下:
typedef struct tagPROCESSENTRY三二{
DWORD dwSize;
DWORD cntUsage;
DWORD th三二ProcessID;
DWORD th三二DefaultHeapID;
DWORD th三二ModuleID;
DWORD cntThreads;
DWORD th三二ParentProcessID; LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile;
DWORD th三二MemoryBase;
DWORD th三二AccessKey;
}PROCESSENTRY三二;
其中入程ID就存储在此结构的th三二ProcessID。此ID可以被传给OpenProcess()API以获取该入程的句柄。对于应的可履行文件名及其寄存路径寄存在szExeFile结形成员中。在该结构中还可以找到其他1些有用的信息。
五.二报警
这里的报警就触及了入程间通信的概念。本文中触及的入程间通信是用剪贴板的法子,剪贴板在咱们实际利用中是用患上比较多的,它其实是系统保护治理的1个内存区域,当咱们在1个程序中复制数据的时候,其实是将这些数据放进了内存,相反,当咱们在另1个程序中粘贴数据时其实是从内存取出数据。下面先容1下使用剪贴板时的主要函数:打开剪贴板OpenClipboard(),无论是对于剪贴板的读还是写,都要首先调用此函数,以断定是否是可以对于剪贴板入行操纵。此函数是BOOL型的,假设调用胜利就返归非零,否则返归零。清空剪贴板EmptyClipborad(),每一次对于剪贴板的写进操纵以前,都理当调用此函数,这个函数的作用不然而清空剪贴板,而且起到获取剪贴板的使用权的作用。一样,这个函数也是BOOL型的,假设调用胜利就返归非零,否则返归零。对于剪贴板写进SetClipboardData(UINT uFormat,HANDLE hMem),这个函数有两个参数,第1个参数用来表示写进剪贴板数据的格局,第2个参数接管1个句柄值,在这里它接管1个指向内存对于象的句柄,这个内存对于象中寄存着预备写进剪贴板的数据内容。在调用SetClipboardData(UINT uFormat,HANDLE hMem)以前还需要调用GlobalAlloc(UINT uFlags,SIZE_T dwSytes)这样1个函数,它专门用来为将要写进的数据分配1块内存空间。这个函数接管两个参数,第1个参数表示如何来分配内存空间,这里咱们将它设置为GMEM_MOVEABLE,表示动态分配内存。第2个参数是表示分配内存空间的大小。GlobalAlloc(UINT uFlags,SIZE_T dwSytes)返归1个句柄,咱们没法使用句柄来间接的将数据放进内存,这时候就需要调用另1个函数GlobalLock(HGLOBAL hMem),这个函数获取1个内存对于象的句柄,将这块内存加锁,返归1个指针,这时候咱们便可以够给指针所指向的这块内存写进数据了。这个函数使用1个内存计数,计数器基数为零,每一调用1次计数器加1,所以每一调用1次的同时还需要调用此外1个函数GlobalUnlock(HGLOBAL hMem)来给计数器减1,相称于取缔对于这块内存的锁定。本文设计的程序实现报警功能就是在枚举入程以后发现目标入程被终止,从而在剪贴板中写进信息的进程。
五.三监听
所谓监听,就是报警的反方向,即从剪贴板中读出信息。从剪贴板读取数据的函数GetClipboardData(UINT uFormat)。这个函数只接管1个参数,参数指定读取的格局。读取信息以后,咱们还要对于信息入行if断定,假设信息是咱们预留的某个入程被收场的话,咱们就启动维护措施。
关于运用入程间通信实现程序自我维护(3).doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!