zoukankan      html  css  js  c++  java
  • 如何使用系统级热键捕捉当前窗口保存为 png 图片

    unit Unit1;

    interface

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

    type
      TForm1 
    = class(TForm)
        
    procedure FormCreate(Sender: TObject);
        
    procedure FormDestroy(Sender: TObject);
      private
        
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
      public
      
    end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    uses pngimage; 
    //png 支持

    var
      HotKeyId: 
    array[0..1of Integer; //热键列表

    //捕捉当前窗口, 保存为 bmp 或 png
    procedure GetPicture(png: Boolean = false);
    var
      r: TRect;
      bmp: TBitmap;
    begin
      GetWindowRect(GetForegroundWindow, r);
      bmp :
    = TBitmap.Create;
      bmp.SetSize(r.Right 
    - r.Left, r.Bottom - r.Top);
      BitBlt(bmp.Canvas.Handle, 
    00, bmp.Width, bmp.Height, GetDC(0), r.Left, r.Top, SRCCOPY);
      
    if png then
        TPngImage(bmp).SaveToFile(
    'c:\temp\001.png')
      
    else
        bmp.SaveToFile(
    'c:\temp\001.bmp');
      bmp.Free;
    end;

    //注册系统热键 F8、F9
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i: Integer;
    begin
      
    for i := Low(HotKeyId) to High(HotKeyId) do
        HotKeyId[i] :
    = GlobalAddAtom(PChar(IntToStr(i)));
      RegisterHotKey(Handle,HotKeyId[
    0],0,VK_F8); //F8
      RegisterHotKey(Handle,HotKeyId[
    1],0,VK_F9); //F9
    end;

    //处理系统热键
    procedure TForm1.WMHotKey(var Msg: TWMHotKey);
    begin
      
    if Msg.HotKey = HotKeyId[0then GetPicture;       //存 bmp
      
    if Msg.HotKey = HotKeyId[1then GetPicture(true); //存 png
    end;

    //销毁系统热键
    procedure TForm1.FormDestroy(Sender: TObject);
    var
      i: Integer;
    begin
      
    for i := Low(HotKeyId) to High(HotKeyId) do
      
    begin
        UnRegisterHotKey(handle,HotKeyId[i]);
        GlobalDeleteAtom(HotKeyId[i]);
      
    end;
    end;

    end.
  • 相关阅读:
    HTML5 Shiv – 让该死的IE系列支持HTML5吧(转)
    sql之left join、right join、inner join的区别
    一道JS的简单算法题
    逆波兰式计算字符串公式
    前端编程,语义化
    罗列各种排序Mark
    关于JS动画和CSS3动画的性能差异
    各种算法题MARK
    Html笔记【不定时更新】
    CSS3笔记【不定时更新】
  • 原文地址:https://www.cnblogs.com/jxgxy/p/2089006.html
Copyright © 2011-2022 走看看