| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 736 人关注过本帖
标题:想弱弱的请教下关于进程的问题,请高手赐教!谢谢
只看楼主 加入收藏
lhacker
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:13 
想弱弱的请教下关于进程的问题,请高手赐教!谢谢
  现在碰到一个问题,在任务管理器中的进程,我需要监视CF的(一个应用程序)进程,一直扫描,当这个进程结束了,然后电脑马上shutdown -s。请大虾们赐教。谢谢!
搜索更多相关主题的帖子: 进程 
2010-11-25 16:00
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:10 
思路 写个计时器 没当一段时间 去枚举一次系统进程 如未发现该进程 则 启动关机
收到的鲜花
  • lhacker2010-11-25 16:59 送鲜花  3朵   附言:能多点注释么?我没学过进程。不懂进程!
2010-11-25 16:03
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
#include <windows.h>
#include <stdio.h>
#include "psapi.h"
#pragma comment( lib, "psapi" )
void PrintModules(DWORD processID)
{
    HMODULE hMods[1024];
    HANDLE hProcess;
    DWORD cbNeeded;
    unsigned int i;
    // Print the process identifier
    printf( "\nProcess ID: %u\n", processID );
    // Get a list of all the modules in this process.
    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,processID );
    if(NULL == hProcess)
        return;
    if(EnumProcessModules(hProcess,hMods,sizeof(hMods),&cbNeeded))
    {
        for(i=0;i<(cbNeeded/sizeof(HMODULE));i++)
        {
            char szModName[MAX_PATH];
            // Get the full path to the module's file.
            if(GetModuleFileNameEx( hProcess,hMods[0],szModName,sizeof(szModName)))
            {// Print the module name and handle value.
                printf("\t%s(0x%08X)\n",szModName,hMods);
            }
        }
    }
    CloseHandle(hProcess);
}
void main()
{// Get the list of process identifiers.
    DWORD aProcesses[1024],cbNeeded,cProcesses;
    unsigned int i;
    if(!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))//一参存放进程的ID
        return;
    // Calculate how many process identifiers were returned.
    cProcesses=cbNeeded/sizeof(DWORD);
    printf("cbNeed=%d\n",cbNeeded);
    // Print the name of the modules for each process.
    for(i=0;i<cProcesses;i++)
        PrintModules(aProcesses[i]);
}
枚举进程以及dll调用的代码
#include   <windows.h>   
#include   <stdio.h>   
#include   <conio.h>   
unsigned   long  WINAPI   Thread(PVOID   pvoid);   
void   main()   
{   
    DWORD   dwThreadId;   
    HANDLE   hThread   =   CreateThread( NULL,0,Thread,0,0,&dwThreadId);     
    WaitForSingleObject(hThread,INFINITE);   
    CloseHandle(hThread);      
}   
unsigned   long   WINAPI   Thread(PVOID   pvoid)   
{   
    MSG   msg;   
    PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE);   
    UINT   timerid=SetTimer(NULL,1,100,NULL);      
    while(true)   
    {   
        GetMessage(&msg,NULL,0,0);
        if(msg.message==WM_TIMER)     
            printf("WM_TIMER   in   work   thread \n");         
        else   
        {   
            TranslateMessage(&msg);     
            DispatchMessage(&msg);     
        }   
    }   
    KillTimer(NULL,timerid);   
    return   0;   
}
一个简单的计时器

最后分给我!
收到的鲜花
  • lhacker2010-11-25 16:52 送鲜花  3朵   附言:好文章
2010-11-25 16:12
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
貌似还有更简单的 直接注入一个dll 在响应DLL_PROCESS_DETACH 时关闭电脑!
2010-11-25 16:21
lhacker
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-12
收藏
得分:0 
回复 4楼 hahayezhe
我看看!!先谢谢你
2010-11-25 16:49
lhacker
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-12
收藏
得分:0 
回复 4楼 hahayezhe
多给点注释额,
2010-11-25 16:58
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
我汗 这点代码而已 一个一个的查 MSDN啊 纠结!
收到的鲜花
  • lhacker2010-11-25 17:51 送鲜花  3朵   附言:非常的感谢,传道售货戒刀也
2010-11-25 17:04
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
程序代码:
#include <windows.h>
#include <stdio.h>
#include "psapi.h"
#pragma comment( lib, "psapi" )
int main()
{
    DWORD aProcesses[1024],cbNeeded,cbMNeeded;
    HMODULE hMods[1024];
    HANDLE hProcess;
    char szProcessName[128];
    if(!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))//枚举进程ID
        printf("Enumprocess error\n");
    int j = (int) (cbNeeded / sizeof(DWORD));
    for(int i=0; i< j; i++)
    {
        ZeroMemory(szProcessName,128);
        hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);//获取进程实例
        EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);//枚举该进程中所有的模块ID
        GetModuleFileNameEx( hProcess, hMods[0], szProcessName,128);//获取该模块的名字  0 为可执行PE文件的名字
        printf("%d\t%s\n",aProcesses[i], szProcessName);
        CloseHandle(hProcess);
    }
    return 0;
}
这个简单些 不用枚举dll模块!
2010-11-25 17:24
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
程序代码:
#include <windows.h>
#include <stdio.h>
#include "psapi.h"
#pragma comment( lib, "psapi" )
bool FindProcess(const char* m_Processname){
    DWORD aProcesses[1024],cbNeeded,cbMNeeded;
    HMODULE hMods[1024];
    HANDLE hProcess;
    char szProcessName[128];
    if(!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))//枚举进程ID
        printf("Enumprocess error\n");
    int j = (int) (cbNeeded / sizeof(DWORD));
    for(int i=0; i< j; i++)
    {
        ZeroMemory(szProcessName,128);
        hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);//获取进程实例
        EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);//枚举该进程中所有的模块ID
        GetModuleFileNameEx( hProcess, hMods[0], szProcessName,128);//获取该模块的名字  0 为可执行PE文件的名字
        if(strstr(szProcessName,m_Processname)){
            CloseHandle(hProcess);
            return 1;
        }
        //printf("%d\t%s\n",aProcesses[i], szProcessName);
        CloseHandle(hProcess);
    }
    return 0;
}
int main()
{
    if(FindProcess("explorer.exe")){
        printf("explorer.exe is existed");
    }
    else
        printf("explorer.exe isn't existed");
    return 0;
}
写成函数! 其实只需要其进程句柄就可以了 !也就是说枚举一次就可以了  然后保留ID进行判断
2010-11-25 17:32
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
程序代码:
#include <windows.h>
#include <stdio.h>
#include "psapi.h"
#include <conio.h>
#pragma comment( lib, "psapi" )
unsigned   long  WINAPI   Thread(PVOID   pvoid);
bool FindProcess(const char* m_Processname){
    DWORD aProcesses[1024],cbNeeded,cbMNeeded;
    HMODULE hMods[1024];
    HANDLE hProcess;
    char szProcessName[128];
    if(!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))//枚举进程ID
        printf("Enumprocess error\n");
    int j = (int) (cbNeeded / sizeof(DWORD));
    for(int i=0; i< j; i++)
    {
        ZeroMemory(szProcessName,128);
        hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);//获取进程实例
        EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);//枚举该进程中所有的模块ID
        GetModuleFileNameEx( hProcess, hMods[0], szProcessName,128);//获取该模块的名字  0 为可执行PE文件的名字
        if(strstr(szProcessName,m_Processname)){
            CloseHandle(hProcess);
            return 1;
        }
        //printf("%d\t%s\n",aProcesses[i], szProcessName);
        CloseHandle(hProcess);
    }
    return 0;
}
int main()
{
    DWORD   dwThreadId;  
    HANDLE   hThread   =   CreateThread( NULL,0,Thread,0,0,&dwThreadId);    
    WaitForSingleObject(hThread,INFINITE);
    return 0;
}
unsigned   long   WINAPI   Thread(PVOID   pvoid)  
{  
    MSG   msg;  
    PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE);  
    UINT   timerid=SetTimer(NULL,1,1000,NULL); //一秒触发一次的计时器   
    while(true)  
    {  
        GetMessage(&msg,NULL,0,0);
        if(msg.message==WM_TIMER){
            if(FindProcess("explorer.exe")){
                printf("explorer.exe is existed\n");
            }
            else{
                printf("explorer.exe isn't existed\n");
                system("shutdown -s");
            }
        }          
        else  
        {  
            TranslateMessage(&msg);    
            DispatchMessage(&msg);    
        }  
    }  
    KillTimer(NULL,timerid);  
    return   0;  
}
完全的粘贴加复制 多简单!
2010-11-25 17:41
快速回复:想弱弱的请教下关于进程的问题,请高手赐教!谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020490 second(s), 10 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved