转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
监控键盘并在得到特定按键后输出特殊字到剪贴板         ★★★★

监控键盘并在得到特定按键后输出特殊字到剪贴板

作者:闵涛 文章来源:闵涛的学习笔记 点击数:625 更新时间:2009/4/23 18:37:57

监控键盘并在得到特定按键后输出特殊字到剪贴板

   打字时,输入特殊字符总是那么令人讨厌,像α、β、γ、μ、π、Φ、Δ、℃、℉、£之类。为了简化这些字符的输入,设计了这个程序。不过,这里只是捕捉“A”,然后把“α”字符送到剪贴板。为了使程序比较实用,请自己加入判断Ctr,Alt、shift按键是否toggled的代码,我就不写全了。
   设计思路,设计后台线程监控键盘,看有哪些按键按下了。当发现“A”按下(其实如果要实用的话应该是判断Ctr+shit+A,以免冲突)后,把“α”字符送到剪贴板,然后,用Ctr+V就可以贴到你想输出到的地方了。
   具体实现,建立一个窗体,添加两个按钮,一个用来启动hook,一个用来unhook。这里用了日志钩子,这样它本身就是后台线程了,无论窗体是否Active,都能运行。在钩子里,用一个EVENTMSG来得到键盘按键的信息,消息里的Paraml的低位就是按下的按键的ASCII码,得到这个,就可以打开剪贴板,清空,设置Format,设置剪贴板内容了。这样就大功告成了。
   为了写这一段代码,我看了hubdog整理《Delphi之未经证实的葵花宝典》(version 2.5)所有关于钩子和剪贴板的文章,搜遍了csdn《程序员大本营》delphi部分的文章和带源码的控件或程序。花了我十几个小时,才写出来了。结果实际上就是十几行代码。
   哎!编程这东西,不是不会,而是不知道呀!如果那位高手设法捕捉活动窗口,用WM_CopyData或IPC机制,把字符直接输出到当前想输出到的地方,那就完美了。我累了,暂时就先用剪贴板吧!


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Clipbrd;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 

var
Form1: TForm1;
hHook:integer;
EventArr:EVENTMSG;

implementation

function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
 var
      c:integer;


begin
Result := 0;
If iCode < 0 then Result := CallNextHookEx(hHook,iCode,WParam,LParam);
 EventArr:=pEventMSG(lParam)^;//通过钩子的Lparam参数,让EventArr得到键盘的消息
If iCode = HC_ACTION then  file://是否钩到东西
  If EventArr.message=wm_keydown then Begin // 看按键是否被按下

       c:=lo(EventArr.paramL);//Paraml的低位就是按下的按键的ASCII码
  if c=65 then
  begin

  clipboard.Open;//打开剪贴板,清空,设置Format,设置剪贴板内容
  clipboard.Clear;
  clipboard.Formats[CF_text];
  clipboard.setTextbuf(pchar(''''α''''));
  Clipboard.Close;
  end;


  end;


end;


{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Caption:=''''hook'''';
  Button2.Caption:=''''unhook'''';
  Button2.Enabled:=False;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  file://建立键盘操作消息hook链
  hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0);
  Button2.Enabled:=True;
  Button1.Enabled:=False;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  UnHookWindowsHookEx(hHook);//卸钩子
  hHook:=0;
  Button1.Enabled:=True;
  Button2.Enabled:=False;
 

end;

end.


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台