这星期终于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)。