截获消息(1)

原创 2004年07月08日 17:06:00

截获消息(1

很久没有给大家写东西了,今天有点兴趣,写一点。

Delphi中,每一个构件都有一个内在的消息处理机制,这是默认的,如果没有特别制定消息处理,就调用默认的消息处理。

理论我就不和大家说了,大家实践为主,省去一大堆什么vcl什么结构的,免得看了头痛。

截获消息主要有3种方法:

1、重载构建继承的虚拟方法wndproc,这可以截获所有消息

2、针对某消息写的消息处理句柄,可以截获制定的消息

3、重载构建继承的虚拟方法defhandler.

 

1种:重载wndproc

  procedure tmyobject.wndproc(var message:tmessage);

begin

{

inherited wndproc(message);

end;

给个例子:

procedure TControl.wndproc(var meesag:tmessage);

begin

{

if (message.msg>=wm_mousefirst)and(message.msg<=wm_mouselast) then

if dragging then

dragmousemsg(twmmouse(message))

else begin

………(处理其他的鼠标消息)

end;

dispatch(message); //否则正常发送信息

end;

 

我们来写一个完整的类,一个没有焦点的edit控件

unit myedit;

interface

uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,

StdCtrls;

type

 Tmyedit=class(TEdit)

 private

  {Privatedeclarations}

 protected

  {Protected declarations}

  {other fields and methods}

 procedure wndproc(var message:Tmessage);override;//重载

 public

  {Publicdeclarations}

 published

  {Publisheddeclarations}

 end;

procedure Register;

implementation

procedure Register;//IDE中进行注册

begin

 RegisterComponents('Samples',[Tmyedit]);

 //注册到Samples页中,控件名是Tmyedit

end;

 

procedure Tmyedit.wndproc(var message:tmessage);

begin

 if message.msg=wm_mousemove then

 begin

  {设置光标为crarrow,而不是缺省的crBeam光标}

  cursor:=crarrow;

  exit;

 end;

 {屏蔽掉WM_SetFocus消息,不让Tmyedit控件获得输入焦点}

 if  message.msg=wm_SetFocus  then  exit;{什么也不执行}

 inherited wndproc(message);{其它消息交父辈的wndproc处理}

end;

end.

 

对于第2种方法,很简单,用消息发生器就可以了,第3种嘛我也没用过,有兴趣的朋友可以自己搞一下。因为第一种处理有优势,可以处理全部的消息,所以比较实用。

看到这里可能大家还在想,看了这么多还没有说到怎么截获其他程序的消息亚,别急,这是前奏,下一篇就讲如何解或其他程序的消息了

有趣——windows键盘消息截获

理解下windows的消息机制: 1.发生键盘输入事件时,WM_KEYDOWN消息被添加到操作系统消息队列 2.OS判断哪个APP发生了事件,然后从系统消息队列取出消息分发到应用程序消息队列 3...
  • ProgrammeringLearner
  • ProgrammeringLearner
  • 2016年10月28日 23:59
  • 1915

Delphi中如何拦截键盘消息

var   st,et,ct: int64; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin   Q...
  • chinajobs
  • chinajobs
  • 2016年02月17日 19:55
  • 1631

windows中使用钩子拦截消息

一、前 言 众所周知,Windows程式的运行是依靠发生的事件来驱动。换句话说,程式不断等待一个消息的发生,然后对这个消息的类型进行判断,再做适当的处理。处理完此次消息后又回到等待状态。从上面对...
  • zi_wu_xian
  • zi_wu_xian
  • 2013年04月25日 22:21
  • 3352

论坛短消息视频教程1

  • 2016年12月27日 16:49
  • 11.59MB
  • 下载

第四课 MFC消息映射机制的剖析 讲述如何运用ClassWizard 1.rar

  • 2009年09月10日 22:01
  • 15.74MB
  • 下载

企业集成模式.设计、构建及部署消息传递解决方案.part1

  • 2009年12月31日 09:32
  • 10MB
  • 下载

编制一个长度为1K的消息发送和接受的程序。

  • 2013年11月26日 21:29
  • 1KB
  • 下载

消息反射Demo1

  • 2013年03月07日 21:48
  • 1.79MB
  • 下载

自己写的程序1(打包,秒表和UDP发消息,功能详见本人博客)

  • 2010年02月26日 22:30
  • 219KB
  • 下载

SinaUC消息发送机v2_1_.4.0.2破解版.7z

  • 2011年07月25日 18:03
  • 1.44MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:截获消息(1)
举报原因:
原因补充:

(最多只允许输入30个字)