国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

監控鍵盤并在得到特定按鍵后輸出特殊字到剪貼板

2019-11-18 18:36:20
字體:
來源:轉載
供稿:網友
 

監控鍵盤并在得到特定按鍵后輸出特殊字到剪貼板

   打字時,輸入特殊字符總是那么令人討厭,像α、β、γ、μ、π、Φ、Δ、℃、℉、£之類。為了簡化這些字符的輸入,設計了這個程序。不過,這里只是捕捉“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.


上一篇:用程序刪除已注冊的COM+應用程序

下一篇:從獲取DBGrid行號想到的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 昌图县| 张家口市| 阿合奇县| 洛扎县| 青州市| 视频| 阿拉尔市| 金平| 彭泽县| 铜梁县| 亳州市| 高邮市| 福建省| 衡东县| 太和县| 夹江县| 宝山区| 台南市| 德保县| 南投市| 固始县| 临西县| 治县。| 新河县| 平定县| 禹州市| 临夏县| 三河市| 长宁区| 邢台市| 辽中县| 岳阳县| 靖宇县| 永嘉县| 泗水县| 阿拉善左旗| 铜鼓县| 巩留县| 双鸭山市| 益阳市| 奉节县|