zoukankan      html  css  js  c++  java
  • 如何使用系统级热键捕捉当前窗口保存为 png 图片 回复 "巅枫" 的问题


    问题来源: http://www.cnblogs.com/del/archive/2009/02/16/1392049.html#2011187

    程序运行后, F8 可保存 bmp, F9 可保存 png; 测试保存目录在 C:\temp

    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..1] of 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, 0, 0, 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[0] then GetPicture;       //存 bmp
      if Msg.HotKey = HotKeyId[1] then 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.
    

  • 相关阅读:
    NSAttributedString用法
    xib Nib IB 可视化编程详解
    对虚函数的理解
    QSS的关键词
    Qt发布问题
    Qt使用与问题处理
    Qt术语
    Qt国际化——使用自带翻译包
    Qt 小记
    查看端口及使用进行
  • 原文地址:https://www.cnblogs.com/del/p/1936233.html
Copyright © 2011-2022 走看看