键盘监听程序课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
键盘监听程序课程设计
目录
目录 (1)
一设计目的 (2)
二设计内容 (2)
三设计要求 (3)
四设计过程 (3)
1、窗口函数程序实现的步骤 (3)
2、消息循环 (4)
3、编写窗口过程函数 (5)
4、自启动模块设计 (6)
5、定时发送邮件模块设计 (7)
6、程序流程图 (8)
五设计总结 (10)
参考文献 (10)
一设计目的
通过本次课程设计,设计一个键盘监听程序,系统启动后自动记录所有键盘信息的功能,能够记录键盘的输入值,且该程序具有自动启动功能,并能够定期通过网络给某人的指定的邮箱发送所记录的信息。
二设计内容
1、题目分析,查找资料和总体设计。
2、详细设计、代码编制、程序调试。系统功能要求如下:
模块一该部分通过设计一个窗口,并在窗口中响应键盘消息,记录键盘的相关按键记录,实现键盘监听的功能。
模块二该部分通过对注册表的修改,将该程写入注册表,实现该程序的随系统的启动而启动。
模块三该部分通过调用系统的定时函数,实现邮件的定时发送。
3、结果分析、完成课程设计报告。
三设计要求
1、学生能够较深入的理解网络编成的设计方法,并在所要求的设计时间内,利用自己所熟悉的语言完成本题目的程序编制。
2、程序要能正确运行,完成预功能。
3、要求设计清晰、美观的用户界面,当操作出错时,程序要有出错提示信息。
4、上交设计报告。重点阐述程序的有关算法说明、程序的流程图以及子程序的功能和参数的说明及程序代码。
四设计过程
1、窗口函数程序实现的步骤
(1)WinMain函数的定义
WinMain函数的原型声明如下:
int WINAPI WinMain(
HINSTANCE hInstande,
HINSTANCE hPrevInstance,
LPSTR IpCmdLine,
Int nCmdShow
);
WinMain函数接收4个参数,这些参数都是在系统调用WinMian函数时,传递给应用程序的。
第一个参数hInstance表示该程序当前运行的实例的句柄。第二个参数hPrevInstance表示当前实例的前一个实例的句柄。第三个参数IpCmdLine是一个以空终止的空符串,第四个参数nCmdShow指定程序的窗口应该如何显示。
(2)创建一个窗口
设计一个窗口类
一个完整的窗口有许多的特征,包括光标、图标、背景色等。因此在创建一个窗口之前,要对该类型的窗口进行设计,指定该窗口的相关特征。Windows 为我们定义了一个窗口所应该有的基本属性。在此次的程序中,运用了wndClass这样一个函数,来实现窗口属性的设置。其中的第二个成员变量IpfnWndProc是一个函数指针,指向窗口过程函数,窗口过程函数是一个回调函数。回调函数在特定的事件或条件发生时由另外一方调用的,用于对该事件或条件进行响应。
(3)注册窗口类
调用RegisterClass函数对窗口进行注册,注册成功后才能创建该类型的窗口。具体实现如下:RegisterClass(&wndClass);
(4)创建窗口
设计好窗口并且将其注册成功后,就可以用CreateWindow函数产生这种类型的窗口了。其函数的原型声明如下:
HWND CreateWindow(
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);
(5)显示及更新窗口
其中,显示窗口通过ShowWindow函数实现。更新窗口通过UpdateWindow 函数实现。到此,一个窗口函数的创建就算完成了。
2、消息循环
(1)编写一个消息循环,不断的从消息队列中取出消息,并进行响应。要从消息队列中取出消息,我们需要调用GetMessage()函数。通常的消息循环函数的代码如下:
while(GetMessage(&msg, NULL, 0, 0)) //消息循环
{
TranslateMessage(&msg); //虚拟键消息转换为字符消息 DispatchMessage(&msg); //消息回传给操作系统
}
GetMessage函数只有在接收到WM_QUIT消息时,才返回0。此时while 语句的判断条件为假,循环退出,程序才能结束运行。在没有接收到WM_QUIT 消息时,Windows应用程序就通过while循环来保证程序始终处于运行状态。Windows应用程序的消息处理机制如下图所示:
窗口过程
应用程序
消息队列
操作系统
(2)GetMessage()(3)DispatchMessage()
(1)
(4)
图2-1
(2)操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中。
(3)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息。取出消息后,应用程序可以对消息进行一些预处理,例如,放弃对某些消息的响应,或者调用TranslateMessage产生新的消息。
(4)应用程序调用DispatchMessage,将消息回传给操作系统,消息是由MSG 结构体对象来表示的,其中就包含了接收消息的窗口的句柄。因此,DispatchMessage函数总能进行正确的传递。
(5)系统调用WNDCLASS结构体的IpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。
(6)发送消息可以使用SendMessage和PostMessage函数。SendMessage将消息直接发送给窗口,并调用该窗口的窗口过程进行处理。在窗口过程对消息处理完毕后,该函数才返回。PostMessage函数将消息放入与创建窗口的线程相关联的消息队列后立即返回。除了两个函数外,还有一个PostThreadMessage 函数,用于向线程发送消息,对于线程消息,MSG结构体中的hwnd成员为NULL。
3、编写窗口过程函数
(1)窗口过程函数用于处理发送给窗口的消息。一个Windows应用程序的主要代码部分就集中在窗口过程函数中。窗口过程函数的声明如下: