为系统的所有进程拍个快照吧

这篇博客介绍了如何在Windows环境下为系统的所有进程创建快照,探讨了WinMain函数的返回值、调用约定、窗口过程函数以及使用API函数如CreateToolhelp32Snapshot和Process32First/Next遍历进程。作者遇到的问题包括特定语句不能放在switch语句中,以及wsprintf函数的使用等。
摘要由CSDN通过智能技术生成

这星期终于windows课开始上机了,略兴奋。终于不止限制于对console了玩耍了~哈哈哈

那么接下来开始对系统内的所有程序拍一个快照~何为快照,照片嘛,自然是不能动的,那么,这个快照的效果就是记录下当年电脑中运行的进程的ID号,和程序名称。

既然是窗口程序,少了窗口那是万万不能的~先给自己写个头文件,声明一个建窗口的几个函数吧(表示是老师要这样在头文件里进行声明,我并不理解这有什么用,函数在CPP文件中的WinMain函数之前进行定义不也可以嘛,也可以先声明写完WinMain之后再写出具体实现嘛,东西还没拿出来就在这里先发一个问吧可怜)。


#ifndef PROCESSENUM_H
#define PROCESSENUM_H

//窗口过程函数
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

//主函数的调用的功能函数


BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);

#endif // PROCESSENUM_H

声明了即将要调用的窗口过程函数,和主函数要调用的两个功能函数。既然这些已经先声明了,那就先把主函数放出来在说这些函数都有什么用吧。


#include <windows.h>
#include "processEnum.h"

int WINAPI WinMain(HINSTANCE hinstance,             // 实例句柄
                   HINSTANCE hPrevInstance,         // 一般此参数不使用
                   LPSTR lpCmdLine,                 // 字符串,不一定在结尾处会有\0
                   int nCmdShow)                    // 显示方式
{
    if(!InitApplication(hinstance))     //应用初始化
        return false;

    if(!InitInstance(hinstance, nCmdShow))  //实例初始化
        return false;

    MSG msg;
    //消息循环,用于从消息队列中取出消息,并做相应处理
    while(GetMessage(&msg, NULL, 0, 0)){  
        // 对消息进行划分,如:区分大小写
        TranslateMessage(&msg);          
        
        // 调用窗口过程函数
        DispatchMessage(&msg);              
    }

    return (int)msg.wParam;
}

虽然上述注释已经把声明的两个函数的左右给写出来了,但还是不太懂的样子。好忧桑,所谓应用初始化和实力初始化还是不太懂,不过没关系,下面会有这两个函数的具体实现,到时候再思考这两个函数到底在干嘛。

现在来看看这个WinMain函数的返回值。

先看WINAPI这个奇奇怪怪的东西,函数的返回值类型是int,函数名是WinMain,那么加在这之间的这个WINAPI,是个什么呢,Google了一下,WINAPI是__stdcall的宏定义,表明WinMain()是__stdcall调用方式,区别于默认的__cdecl,__stdcall调用方式。windows平台下的STDCALL函数调用约定,调用时,参数从右到左压栈,调用完后函数自己平衡堆栈。那么到底是什么东西可以放在函数的返回值类型和函数名之间呢?因为以前这种东西是绝对看不到的,那么解答我上个问题的地方同样解答了我这个问题,能放在返回值类型和函数名的就之后只有调用约定,其他的就不能再加了。而能添加的调用约定有__cdecl   /   __clrcall  /  __stdcall  /  __fastcall  /  __thiscall 。(详情参见http://bbs.csdn.net/topics/320046920)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值