怎么实时得到系统有新的进程打开?

Powerdix 2004-10-15 02:15:54
请指点在系统打创建进程之前和之前如何马上得到通知?
谢谢!
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pepsi1980 2004-10-18
  • 打赏
  • 举报
回复
你要是搜索不到,留个油箱,我发给你吧。
kugou123 2004-10-15
  • 打赏
  • 举报
回复
至于API HOOK的代码,网上有很多。
www.xfocus.net有一篇挂接windows api函数,比较不错。
kugou123 2004-10-15
  • 打赏
  • 举报
回复
挂接该API函数,这样在函数调用之前,你可以先处理你的代码。
Mr-Chen 2004-10-15
  • 打赏
  • 举报
回复
我有个例子,星期一发给你
Powerdix 2004-10-15
  • 打赏
  • 举报
回复
to:pepsi1980(这只老鼠不会游泳)
网上这个例子ps_manager.zip在哪?codeguru或是codeproject
Powerdix 2004-10-15
  • 打赏
  • 举报
回复
thanx!
在系统中,负责调用CreateProcess创建新进程是个什么进程?
wwwsq 2004-10-15
  • 打赏
  • 举报
回复
是的,用api钩子,把系统创建进程的api给钩住。
pepsi1980 2004-10-15
  • 打赏
  • 举报
回复
网上这个例子可以ps_manager.zip,除了运行内存偏大外,没什么其他毛病。
它是通过这2个函数来实现的:
void CPsManagerDlg::CProcessesList::DeleteZoobieItem(unsigned long aProcesses[],DWORD cProcess)
{
for(int i=0;i<GetItemCount();i++){
for(unsigned long idx=0;idx<cProcess;idx++){
CString sPID;
sPID.Format( "%d", aProcesses[ idx ] );
if(sPID.CompareNoCase(GetItemText(i,1)) == 0) break;
}
if(idx >= cProcess) DeleteItem(i);
}
}//实现了查找不再运行的程序就从LIST中删除
int CPsManagerDlg::CProcessesList::FindPIDIndex( DWORD pid)
{

CString sPID;
sPID.Format( "%d", pid);

for(int i=0;i<GetItemCount();i++){
if(sPID.CompareNoCase(GetItemText(i,1)) == 0) return i;
}
return -1;
}//实现了查找已经存在的就不刷新LIST
void CPsManagerDlg::RefreshList()
{
// m_ctlProcesses.DeleteAllItems();


DWORD aProcesses[ 1024 ];
DWORD cProcesses = GetProcessIDs( aProcesses, sizeof( aProcesses ) );

DWORD idxList = 0;


m_ctlProcesses.DeleteZoobieItem(aProcesses,cProcesses);


for( DWORD idx = 0; idx < cProcesses; idx++ )
{
CString sName = GetProcessBaseModuleName( aProcesses[ idx ] );

if( sName.IsEmpty() )
{
continue;
}


CString sPID;
sPID.Format( "%d", aProcesses[ idx ] );
if(m_ctlProcesses.FindPIDIndex(aProcesses[ idx ]) >= 0) continue;

m_ctlProcesses.InsertItem( idxList, sName );
m_ctlProcesses.SetItemText( idxList, 1, sPID );
m_ctlProcesses.SetItemText( idxList, 2, GetProcessPath( aProcesses[ idx ] ) );
m_ctlProcesses.SetItemData( idxList, aProcesses[ idx ] );

idxList++;
}



}//刷新函数
怎么实时得到系统有新的进程打开? 很简单就是用一下FindPIDIndex( DWORD pid)
就可以了:),假如还要动态刷新那些不再运行的程序就需要用DeleteZoobieItem(unsigned long aProcesses[],DWORD cProcess)。

oyljerry 2004-10-15
  • 打赏
  • 举报
回复
作一个hook监视
DentistryDoctor 2004-10-15
  • 打赏
  • 举报
回复
试试Hook API,CreateProcess,
另一种不是很实时的方法,是PSAPI.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧