📄 如何监视windows下运行了哪些程序.txt
字号:
如果你想监测你的查询运行之后又启动了哪些程序,可以使用SetWindowsHookEx (WH_SHELL)来建立一个钩子函数,不过这不太适合VB来做,最好使用C++或Delphi来做。
<END>
不管用VB,VC,DELPHI等,其实WINDOWS有关进程API 函数;都可以调用;不过首先得使用TLHELP32 来获得所有进程的句柄.然后进行相关操作。
<END>
这是从我的一个软件中提出的部分代码,是一个C++类:
// ProcessInfor.h: interface for the CProcessInfor class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PROCESSINFOR_H__6AD843E3_A13E_11D5_8C79_909FCCDC071C__INCLUDED_)
#define AFX_PROCESSINFOR_H__6AD843E3_A13E_11D5_8C79_909FCCDC071C__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#define PROCESS_MAX_NUMBER 2048
class CProcessInfor : public CObject
{
public:
CProcessInfor();
virtual ~CProcessInfor();
int m_ProcessNumbers; //进程数目
public:
int GetProcessInformat();
int Refresh();
BOOL GetProcessAInfor(int nID , PROCESSENTRY32 *pProcessInfor);
};
#endif // !defined(AFX_PROCESSINFOR_H__6AD843E3_A13E_11D5_8C79_909FCCDC071C__INCLUDED_)
// ProcessInfor.cpp: implementation of the CProcessInfor class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TestTime.h"
#include "ProcessInfor.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
static PROCESSENTRY32 m_processInfor[PROCESS_MAX_NUMBER];
//////////////////////////////////////////////////////////////////////
//
//typedef struct tagPROCESSENTRY32
//{
// DWORD dwSize;
// DWORD cntUsage; 进程引用记数
// DWORD th32ProcessID; 进程标识符
// DWORD th32DefaultHeapID; 默认堆标识符
// DWORD th32ModuleID; 模块标识符
// DWORD cntThreads; 线程引用记数
// DWORD th32ParentProcessID; 父进程标识符
// LONG pcPriClassBase; 进程创建的线程的基础优先级
// DWORD dwFlags; 保留
// char szExeFile[MAX_PATH]; 进程文件的路径
//} PROCESSENTRY32;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CProcessInfor::CProcessInfor()
{
int i;
for(i=0;i {
memset(m_processInfor,0x00,sizeof(PROCESSENTRY32));
};
m_ProcessNumbers=0;
return;
}
CProcessInfor::~CProcessInfor()
{
}
//////////////////////////////////////////////////////////////////////
//获取一个进程的数据
//
//参数:int nID=索引号
// PROCESSINFOR * pProcessInfor=存放数据的PROCESSINFOR指针
//
//返回:
// TRUE =成功
// FALSE=所需的数据不存在
BOOL CProcessInfor::GetProcessAInfor(int nID, PROCESSENTRY32 * pProcessInfor)
{
if(m_ProcessNumbers==0 || nID<0 || nID>PROCESS_MAX_NUMBER)
{
return FALSE;
};
memcpy(pProcessInfor,&m_processInfor[nID],sizeof(PROCESSENTRY32));
return TRUE;
}
//////////////////////////////////////////////////////////////////////
//获取进程信息数据
//
//
//返回:当前进程的数目
//
int CProcessInfor::GetProcessInformat()
{
BOOL bStatu;
int nCount=0;
//int nError;
HANDLE hSnapshot;
PROCESSENTRY32 peInfor32;
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hSnapshot==NULL)
{
return 0;
};
nCount=0;
peInfor32.dwSize=sizeof(PROCESSENTRY32);
bStatu=Process32First(hSnapshot,&peInfor32);
memcpy(&m_processInfor[nCount],&peInfor32,sizeof(PROCESSENTRY32));
while(bStatu)
{
nCount++;
if(nCount>PROCESS_MAX_NUMBER)
{
break;
};
m_processInfor[nCount].dwSize=sizeof(PROCESSENTRY32);
bStatu=Process32Next(hSnapshot,&peInfor32);
memcpy(&m_processInfor[nCount],&peInfor32,sizeof(PROCESSENTRY32));
/*
if(!bStatu)
{
nError=GetLastError();
break;
};
*/
};
m_ProcessNumbers=nCount;
return nCount;
}
//////////////////////////////////////////////////////////////////////
//
int CProcessInfor::Refresh()
{
int i;
for(i=0;i {
memset(m_processInfor,0x00,sizeof(PROCESSENTRY32));
};
m_ProcessNumbers=0;
return GetProcessInformat();
}
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -