游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2236|回复: 7

问一个问题!

[复制链接]

19

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2006-10-23 18:03:00 | 显示全部楼层 |阅读模式
我用VC 6 新建一个Win32 Application工程
然后编写如下代码,我想用HOOK技术拦截键盘输入的字符,然后存到一个文本文件里,但是可能我很多概念都不清楚,写的有问题。
存出来的不对啊,请高手指点一下:

// hHook.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "windows.h"
#include "windowsx.h"
#include "fstream.h"
#include "stdlib.h"


LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam);

HWND hHook;
HWND hWnd;

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

MSG msg;

hHook = (HWND)SetWindowsHookEx(WH_JOURNALRECORD,HookProc,hInstance,0);

    //进入消息循环

    while (GetMessage(&msg, NULL, 0, 0))

    {

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }


return msg.wParam;
}


LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
ofstream fout("TEST.TXT");
PEVENTMSG pMsg = (PEVENTMSG)lParam;
if(pMsg->message = WM_KEYUP)
{
fout << (char)pMsg->paramH;
}

fout.close();

return CallNextHookEx((HHOOK)hHook,nCode,wParam,lParam);
}

//******************************************************************

//函数:WinProc()

//功能:处理主窗口消息

//******************************************************************

LRESULT CALLBACK WinProc( HWND hWnd, UINT message,

                             WPARAM wParam, LPARAM lParam )
{

    switch( message )

    {

        case WM_KEYDOWN://击键消息

            switch( wParam )

            {

                case VK_ESCAPE:

                    PostMessage(hWnd, WM_CLOSE, 0, 0);

                    break;

            }

            break;

        case WM_DESTROY://退出消息

            PostQuitMessage( 0 );

            break;

    }

    //调用缺省消息处理过程

    return DefWindowProc(hWnd, message, wParam, lParam);

}

12

主题

124

帖子

124

积分

注册会员

Rank: 2

积分
124
QQ
发表于 2006-10-23 22:22:00 | 显示全部楼层

Re: 问一个问题!

楼主的代码是否没贴全?怎么没看见你的主窗口?你的WndProc函数有什么用处?
关于hook,可以看看这篇文章,写得很详细了。

http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx

19

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2006-10-23 22:36:00 | 显示全部楼层

Re: 问一个问题!

我也不太懂。
如果不写消息循环,程序马上就退出了,那怎么调用HOOK的回调函数。
我也不知道我的消息处理的回调函数有什么用处。
嘿嘿。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-10-24 10:44:00 | 显示全部楼层

Re: 问一个问题!

此乃Win32平台API相关
推荐去www.vckbase.com看看相关电子杂志里的内容

12

主题

124

帖子

124

积分

注册会员

Rank: 2

积分
124
QQ
发表于 2006-10-24 20:10:00 | 显示全部楼层

Re: 问一个问题!

像你这样的程序可以不必作成有窗口的阿,做成 Win32 Console 的也行啊,这样你理解起来可能就自然一些了。

8

主题

310

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
发表于 2006-10-28 09:51:00 | 显示全部楼层

Re: 问一个问题!

推荐看windows程序设计<人民邮电出版>

4

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2006-10-30 11:19:00 | 显示全部楼层

Re: 问一个问题!

楼上的属于水属性的....

0

主题

17

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2007-5-1 21:32:00 | 显示全部楼层

Re: 问一个问题!

C++的爸爸都60多了吧...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 15:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表