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.
    

  • 相关阅读:
    python函数执行超时处理的两种方法
    Flask常用方法函数汇总
    夜神模拟器操作
    简单auto.js自动化处理andorid手机案例
    TCP-三次握手和四次挥手简单概述
    android手机执行shell脚本
    接口测试要测试什么?怎么测?
    python unittest单元测试
    python webdriver 测试框架--数据驱动之Excel驱动
    顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/del/p/1936233.html
Copyright © 2011-2022 走看看