{*******************************************************}
{                                                       }
{       _SaveLog.exe                                    }
{                                                       }
{       版权所有 (C) 2013 DelphiCHM                     }
{                                                       }
{*******************************************************}

/// /
// D:\SaveLog\_SaveLog.dpr                                                 //
// 立即备份晓亮的电脑操作记录                                              //
// 热键(快捷键) F11                                                        //
// 由于原来的 AutoIt 杀毒软件总是误报                                      //
// 没办法只好麻烦一点用 Delphi XE4 做了                                    //
// 反正不会可以查询搜索引擎 百度谷歌搜狗                                   //
// http://www.baidu.com/                                                   //
// http://www.cnblogs.com/delphichm/                                       //
// 执行顺序 启动EditPlus 激活EditPlus窗口  插入当前日期和时间  备份文件    //
// CnPack 工程备份热键(快捷键) ALT + NQB                                   //
// 2013年11月2日  晓亮                                                     //
// _SaveLog.exe  测试版(当前调试的版本)                                    //
// SaveLog.exe   不带下划线的是正式版(当前正在使用的版本)                  //
// 需要改进的地方:  1 相对路径(在任意文件夹下都可以运行)                   //
// 2  过滤重复输入                                                         //
// 3  当打开EditPlus但是不是SaveLog.txt时                                  //
/// /

unit Unit1;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  Tlhelp32, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    myatom: atom;
    procedure hotkey(var msg: tmessage); message wm_hotkey; // 定义全局热键消息事件
    { Private declarations }
  public
    { Public declarations }

end;

var
  Form1: TForm1;
  a, b: integer;
  isRuningLocked: Boolean;

implementation

{$R *.dfm}

{ -------------------------------------------------------------------------------
  过程名:    TForm1.FormCreate
  作者:      Administrator
  日期:      2013.11.04
  参数:      Sender: TObject
  返回值:    无
  作用:      在窗口创建时注册全局热键(Windows快捷键)
  ------------------------------------------------------------------------------- }
procedure TForm1.FormCreate(Sender: TObject);
begin
  myatom := globaladdatom('hotkey1'); // 设置全局热键ID
  RegisterHotKey(handle, myatom, 0, vk_f11); // 注册热键
end;

{ -------------------------------------------------------------------------------
  过程名:    ProcedureIsExists
  作者:      Administrator
  日期:      2013.11.04
  参数:      AppName: string
  返回值:    Boolean
  作用:      判断一个程序是否已经在运行
  用法:      if ProcedureIsExists('EditPlus.exe') then
  ------------------------------------------------------------------------------- }
function ProcedureIsExists(AppName: string): Boolean;
var
  lppe: TProcessEntry32;
  ssHandle: THandle;
  AppFound, findqq: Boolean;
  Wnd: HWND;
begin
  Result := False;
  ssHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
  lppe.dwSize := SizeOf(lppe);
  AppFound := Process32First(ssHandle, lppe);
  while AppFound do
  begin
    // 其中lppe.szExefile就是程序名**********************************************
    if UpperCase(ExtractFileName(lppe.szExeFile)) = UpperCase(AppName) then
    begin
      Result := True;
      Exit;
    end;
    AppFound := Process32Next(ssHandle, lppe);
  end;
end;

{ -------------------------------------------------------------------------------
  过程名:    WinActivate
  作者:      Administrator
  日期:      2013.11.04
  参数:
  返回值:    无
  作用:      (测试版)激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).
  ------------------------------------------------------------------------------- }
procedure WinActivate();
var
  buf: array [Byte] of Char;
  Found: HWND;
  Found1: HWND;
begin
  Found := FindWindow(nil, 'D:\SaveLog\_SaveLog.txt * - EditPlus');
  if Found <> 0 then
  begin
    PostMessage(Found, WM_SYSCOMMAND, SC_MAXIMIZE, 0); // 最大化
    SetForegroundWindow(Found);
    SetWindowPos(Found, HWND_TOP, 0, 0, Screen.Width, Screen.Height,
      SWP_SHOWWINDOW);
  end;

Found1 := FindWindow(nil, 'D:\SaveLog\_SaveLog.txt - EditPlus');
  if Found1 <> 0 then
  begin
    PostMessage(Found1, WM_SYSCOMMAND, SC_MAXIMIZE, 0); // 最大化
    SetForegroundWindow(Found1);
    SetWindowPos(Found1, HWND_TOP, 0, 0, Screen.Width, Screen.Height,
      SWP_SHOWWINDOW);
  end;
end;

{ -------------------------------------------------------------------------------
  过程名:    WinActive
  作者:      Administrator
  日期:      2013.11.04
  参数:      PartOfTitle:string
  返回值:    Boolean
  作用:      检查指定的窗口是否存在且当前被激活.
  用法:      具体用法与 AutoIt3 相同,可以参考 AutoIt3CHS.CHM中文帮助
  或者  http://www.autoitx.com/  AUTOIT CN AutoIt中文论坛
  ------------------------------------------------------------------------------- }
// function WinActive(PartOfWinTitle: string): Boolean;
function WinActive(): Boolean;
var
  buf: array [Byte] of Char;
begin
  GetWindowText(GetForegroundWindow, buf, Length(buf) * SizeOf(buf[0]));

if (buf = 'D:\SaveLog\_SaveLog.txt * - EditPlus') or
    (buf = 'D:\SaveLog\_SaveLog.txt - EditPlus') then
  begin
    Result := True;
    Exit;
  end
  else
  begin
    Result := False;
    Exit;
  end;

end;

procedure KeyDownAndUp(VKValue: Byte);
begin
  keybd_event(VKValue, 0, 0, 0);
  keybd_event(VKValue, 0, KEYEVENTF_KEYUP, 0);
end;

{ -------------------------------------------------------------------------------
  过程名:    InputDateTime
  作者:      Administrator
  日期:      2013.11.04
  参数:
  返回值:    无
  作用:      插入长格式的当前日期和时间到指定窗口(EditPlus)
  ------------------------------------------------------------------------------- }
procedure InputDateTime();
var
  i: integer; // 插入字符用
begin
  keybd_event(VK_CONTROL, 0, 0, 0);
  KeyDownAndUp(VK_END); // 输入光标移到最后
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

KeyDownAndUp(VK_RETURN); // 输入回车键
  KeyDownAndUp(VK_RETURN); // 输入回车键

// 按下 Alt键,直到 KEYUP 为止
  keybd_event(VK_MENU, 0, 0, 0); // 按下 Alt键,直到 KEYUP 为止
  // 按下 Alt键,直到 KEYUP 为止

KeyDownAndUp(69); // ALT + EIL
  KeyDownAndUp(73);
  KeyDownAndUp(76);
  keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);

KeyDownAndUp(VK_SPACE);

// 按下 Alt键,直到 KEYUP 为止
  keybd_event(VK_MENU, 0, 0, 0); // 按下 Alt键,直到 KEYUP 为止
  // 按下 Alt键,直到 KEYUP 为止

KeyDownAndUp(69); // ALT + EIO
  KeyDownAndUp(73);
  KeyDownAndUp(79);
  keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);

KeyDownAndUp(VK_SPACE);

for i := 0 to 31 do
  begin
    KeyDownAndUp(189); // 插入减号,Delphi__VK
  end;
  KeyDownAndUp(VK_RETURN); // 输入回车键
  Sleep(100);
  keybd_event(VK_CONTROL, 0, 0, 0); // 按下 Alt键,直到 KEYUP 为止
  KeyDownAndUp(83); // CTRL + S立即保存 --
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;

// function RARBackupFiles(FileName:string,Drv:string):Boolean;
{ -------------------------------------------------------------------------------
  过程名:    RARBackupFiles
  作者:      Administrator
  日期:      2013.11.04
  参数:
  返回值:    Boolean
  作用:      压缩备份文档 SaveLog.txt
  ------------------------------------------------------------------------------- }
function RARBackupFiles(): Boolean;
begin
  try
    // ------------------------------------------------------------------------------
    // 压缩备份文档 SaveLog.txt
    // ------------------------------------------------------------------------------
    if FileExists('D:\SaveLog\rar.exe') then
    begin
      // ShowMessage('000');
      CreateDir('C:\SaveLog\');
      WinExec('D:\SaveLog\rar a -ag[yyyy-mm-dd] -isnd -m5 C:\SaveLog\晓亮的电脑操作记录备份SaveLog.rar D:\SaveLog\_SaveLog.txt',
        SW_HIDE);

CreateDir('D:\SaveLog\');
      WinExec('D:\SaveLog\rar a -ag[yyyy-mm-dd] -isnd -m5 D:\SaveLog\晓亮的电脑操作记录备份SaveLog.rar D:\SaveLog\_SaveLog.txt',
        SW_HIDE);

{
        CreateDir('C:\SaveLog\');
        WinExec(PansiChar(ExtractFileDir(Application.ExeName) +
        '\rar a -ag[yyyy-mm-dd] -isnd -m5 C:\MyPCLog\晓亮的电脑操作记录备份SaveLog.rar D:\SaveLog\_SaveLog.txt'),
        SW_HIDE);

CreateDir('D:\SaveLog\');
        WinExec(PansiChar(ExtractFileDir(Application.ExeName) +
        '\rar a -ag[yyyy-mm-dd] -isnd -m5 D:\SaveLog\晓亮的电脑操作记录备份SaveLog.rar D:\SaveLog\_SaveLog.txt'),
        SW_HIDE);
      }
    end
    else
      ShowMessage('没有找到文件 RAR.exe');
    Result := True;
  except
    Result := False;
  end;

end;

{ -------------------------------------------------------------------------------
  过程名:    BackupSaveLog
  作者:      Administrator
  日期:      2013.11.04
  参数:
  返回值:    无
  作用:      备份SaveLog.txt文档到各分区
  ------------------------------------------------------------------------------- }
procedure BackupSaveLog();
begin
  if CopyFile('D:\SaveLog\_SaveLog.txt',
    PChar('D:\SaveLog\' + FormatDateTime('yyyy年mm月dd日', now()) +
    '晓亮的电脑操作记录备份MyPCLog.txt'), False) then
    // 而且,請確保你的文件路徑正確,否則函數返回失敗.
    // ShowMessage('Copy File Completed!')
  else
    ShowMessage('Copy File Failed!备份失败!');
  if RARBackupFiles then
    // result:=true;
  else
    ShowMessage('RAR File Backup Failed! RAR压缩备份失败!');
end;

{ -------------------------------------------------------------------------------
  过程名:    TForm1.hotkey
  作者:      Administrator
  日期:      2013.11.04
  参数:      var msg: tmessage
  返回值:    无
  作用:      定义全局热键(快捷键)响应事件,定义当用户按下热键时的操作
  ------------------------------------------------------------------------------- }
procedure TForm1.hotkey(var msg: tmessage); // 热键响应事件
var
  ExePath: string;
begin
  // if (msg.LParamHi = VK_F11) and (msg.LParamLo = MOD_ALT) then
  if msg.LParamHi = vk_f11 then // 如果按下热键(快捷键) [F11]
  begin
    while not WinActive do
    begin
      if ProcedureIsExists('EditPlus.exe') then
      begin // EditPlus.exe已经运行,有可能打开的不是SaveLog.txt
        WinActivate; // 激活窗口

KeyDownAndUp(VK_RETURN); // 输入回车键
        Sleep(100);
        keybd_event(VK_CONTROL, 0, 0, 0); // 按下 Alt键,直到 KEYUP 为止
        KeyDownAndUp(83); // CTRL + S立即保存 --
        keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

end
      else
      begin // EditPlus.exe还没有运行
        while not ProcedureIsExists('EditPlus.exe') do
        begin
          ExePath := ExtractFileDir(Application.ExeName) +
            '\EditPlus\EditPlus.exe';
          if FileExists(ExePath) then
            WinExec('.\EditPlus\EditPlus.exe  .\_SaveLog.txt',
              SW_SHOWMAXIMIZED);
        end;
        WinActivate;
        InputDateTime;
      end;
    end;
    BackupSaveLog; // 备份文档
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  globalDeleteatom(myatom);
end;

end.

转载于:https://www.cnblogs.com/delphichm/p/SaveLog.html

_SaveLog.dpr立即备份晓亮的电脑操作记录热键(快捷键) F11由于原来的 AutoIt 杀毒软件总是误报...相关推荐

  1. // D:\SaveLog\_SaveLog.dpr立即备份晓亮的电脑操作记录热键(快捷键) F11由于原来的 AutoIt 杀毒软件总是误报没办法只好麻烦一点用 Delphi XE4 做了...

    // D:\SaveLog\_SaveLog.dpr立即备份晓亮的电脑操作记录 热键(快捷键) F11由于原来的 AutoIt 杀毒软件总是误报没办法只好麻烦一点用 Delphi 各种版本 做了 (我 ...

  2. ;按F11立即备份晓亮的电脑操作记录并打开记录.AU3 (AutoIt)

    2013-10-18  11:52:34 #region ;**** 参数创建于 ACNWrapper_GUI **** #PRE_UseUpx=n #PRE_Res_requestedExecuti ...

  3. 计算机操作日志文件,查看电脑操作记录(LastActivityView)

    查看电脑操作记录(LastActivityView)是一款简单而有用的软件,可以在列表中清清楚楚的看到你的电脑使用历史记录.该软件直接调用系统日志,能显示安装软件.系统启动.关机.网络连接.执行的程序 ...

  4. 计算机开关机操作记录,win7电脑操作记录怎么查看|win7查看电脑操作记录的方法...

    我们都知道只要有操作过Win7电脑都会留下记录的,比如浏览了什么网页.看过什么视频都会留下操作记录的.但是win7电脑操作记录怎么查看?一些用户对此问题表示非常好奇,有时候电脑借给别人使用,想知道自己 ...

  5. 计算机维护记录软件,Take-1 Recorder(电脑操作记录软件)

    Take-1Recorder是一款非常好用的电脑操作记录软件,本质上Take-1Recorder是一款屏幕录制软件,但其最强大的功能就是在录制时每次操作键盘和鼠标还有软件时都会有特殊标识,非常适合用来 ...

  6. 计算机使用情况记录表,电脑操作记录如何查看?

    查看电脑操作记录的方法:1.查看你最近打开过什么文件夹和文件,使用"win R"弹出"运行"窗口,输入"recent"即可:2.查看运行过什 ...

  7. 简化电脑操作:比快捷键还好用、方便、试试

    在日常的电脑操作中,其实也有很多环节可以进行简化. 什么叫简化操作流程呢? 搜索网页上的某个关键词:通常是"选中文字.复制.新建标签页.地址栏粘贴文字.回车": 但随着浏览器的发展 ...

  8. 计算机历史记录怎么查,如何查看电脑使用痕迹,教你如何查看自己的电脑操作记录,让你查到所有的操作历史...

    如何查看电脑使用痕迹大家平时使用电脑的时候是否遇到过这种情况,就是当自己想要寻找某一个历史文件或者摸一个历史操作的时候无法入手,不知道该怎么查看自己以往的操作,今天装糊涂先森就来和大家分享一下关于电脑 ...

  9. 别人使用了我们的电脑,怎么查看操作记录

    电脑几乎是在各行各业都会用的到,很多时候我们电脑可能借给别人使用,很多人都会想,如果我们能知道做了哪些操作,能看到操作记录的话,那就比较放心了.今天小编就给大家讲讲如何查看电脑操作记录. 工具/原料 ...

最新文章

  1. python多大储存空间不足怎么办_Python存储空间不足
  2. 多目标优化蚁群算法的matlab_深入浅出多目标优化10分钟多目标优化入门
  3. 【驱动】使用结构体 file_operations封装驱动设备的操作 | 结构体初始化
  4. C++三路比较运算符
  5. php cdr,win10彻底禁止cdr联网
  6. Kubernetes学习笔记之kube-proxy service实现原理
  7. AutoCAD 2010建筑土木制图高清实例视频教程
  8. tf.train.Example的用法(转)
  9. java闭包lambda,(lambda)函数闭包捕获了什么?
  10. [转载]stl之string类用法详细总结
  11. javascript 绘制uml_Javascript 设计模式之面向对象与 UML 类图
  12. linux 踢出其他用户,linux系统强制踢掉登录用户
  13. Linux网络协议栈
  14. java 中国标准时间_「标准时间」js代码,中国标准时间转换为yyyy-MM-dd - seo实验室...
  15. 二维码应用——门禁系统
  16. Windows窗口程序
  17. ThreadPoolExecutor线程池终止
  18. doors需求管理导入HTML,Telelogic Doors 需求管理工具使用手记
  19. APP试玩应用如何赚钱?今天它来了!新手教程【建议收藏】
  20. 将 Debian APT 引入 iPhone

热门文章

  1. freesurfer运行完recon-all怎么快速查看有没有报错?——核心命令tail重定向
  2. flying-saucer-pdf预览及下载
  3. Java常用基础知识点总结(最全)
  4. 如何去爱一个人[转]
  5. I/O控制方式——轮询,中断,DMA,通道
  6. 雅思做题技巧误区一,不敢选TRUE。误区二,见到only或must等绝对词就选FALSE。误区三,找不到就选NOT GIVEN。误区四,喜欢把TRUE/FALSE/NOT GIVEN理解为
  7. Access key id should not be null or empty.
  8. Nginx配置不带www自动跳转到www域名
  9. 过去的过去,未来的未来
  10. 【吟风听云】在QQ快速打出Emjoy符号(流汗黄豆!)