(*
冰刃这个系统分析工具以前还没用过。
这样高级的工具,用结束进程的方式就不试了。
按手工关闭的流程实现。
首先是通过遍历当前进程,确定冰刃进程的主窗体;
然后发送WM_CLOSE关闭主窗体。
当关闭对话框出现的时候,最后就是模拟点击确定按钮。
具体实现的时候要注意亮点:
1、不能使用SendMessage发送WM_CLOSE消息,而用PostMessage替代。
  否则要等到关闭对话框结束才处理后面的语句。这就找不到关闭对话框的句柄了。
2、确定按钮要点击两次。
  纯属测试的结果。
*)

uses TlHelp32;

type
  TMainWindow = packed record
    ProcessID: THandle;
    MainWindow: THandle;
  end;
  PMainWindow = ^TMainWindow;

function IsMainWindow(AHandle: THandle): Boolean;
begin
  Result := (GetWindow(AHandle, GW_OWNER) = 0) and (IsWindowVisible(AHandle));
end; { IsMainWindow }

function fFindMainWindow(hWnd: THandle; lParam: PMainWindow): BOOL; stdcall;
var
  vProcessID: THandle;
begin
  GetWindowThreadProcessId(hWnd, vProcessID);
  if (lParam^.ProcessID = vProcessID) and IsMainWindow(hWnd) then
  begin
    lParam^.MainWindow := hWnd;
    Result := False;
  end else Result := True;
end;

function FindMainWindow(AProcessID: THandle): THandle;
var
  vMainWindow: TMainWindow;
begin
  vMainWindow.ProcessID := AProcessID;
  vMainWindow.MainWindow := 0;
  EnumWindows(@fFindMainWindow, Integer(@vMainWindow));
  Result := vMainWindow.MainWindow;
end; { FindMainWindow }

procedure TForm1.Button1Click(Sender: TObject);
var
  vSnapshot: THandle;
  vProcessEntry32: TProcessEntry32;
  vHandle: THandle;
begin
  vSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  vProcessEntry32.dwSize := SizeOf(TProcessEntry32);
  if Process32First(vSnapshot, vProcessEntry32) then
    repeat
      if SameText('icesword.exe', vProcessEntry32.szExeFile) then
      begin
        vHandle := FindMainWindow(vProcessEntry32.th32ProcessID);
        if vHandle <> 0 then
        begin
          PostMessage(vHandle, WM_CLOSE, 0, 0); // 发送关闭消息
          Sleep(100); // 等待对话框出现
          vHandle := FindWindow('#32770', 'IceSword');
          if vHandle <> 0 then
          begin
            vHandle := FindWindowEx(vHandle, 0, 'Button', nil);
            SendMessage(vHandle, WM_LBUTTONDOWN, 0, 0);
            SendMessage(vHandle, WM_LBUTTONUP, 0, 0);
            ///...点击按钮两次
            SendMessage(vHandle, WM_LBUTTONDOWN, 0, 0);
            SendMessage(vHandle, WM_LBUTTONUP, 0, 0);
          end;
        end;
        Break;
      end;
    until not Process32Next(vSnapshot, vProcessEntry32);
  CloseHandle(vSnapshot);
end;

http://blog.csdn.net/zswang/article/details/2041123

用代码关闭冰刃(IceSword)的更多相关文章

  1. 冰刃IceSword中文版 V1.22 绿色汉化修正版

    软件名称: 冰刃IceSword中文版 V1.22 绿色汉化修正版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 2.1MB 图片预览: 软件简介: Ic ...

  2. Ios8代码关闭输入预测问题

    自IOS8出来了输入预测问题后,有些问题也就来了比如textfield中输入邮箱的话,就会有很多空格无法去掉,当时我一直在找有没有提供什么方法可以关闭:后面有这样的一个属性可以解决输入邮箱没有空格问题 ...

  3. java代码关闭tomcat程序

    1.通过java代码实现tomcat的关闭 2.tomcatStop.java package test; import java.io.BufferedReader; import java.io. ...

  4. 使用java代码关闭指定端口的程序-windows

    转载请请在页首注明作者与出处 一:问题由史 今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,所以才有了这篇文章. ...

  5. iOS 通过代码关闭应用程序

    //-------------------------------- 退出程序 -----------------------------------------// - (void)exitAppl ...

  6. iOS通过代码关闭程序

    //-------------------------------- 退出程序 -----------------------------------------// - (void)exitAppl ...

  7. wordpress数据库优化-关闭日志修订

    每次在wordpress网站修改文章的时候都会产生一个修订版本,wp_posts会产生一个post_type为“REVISIONS”的记录,修改次数一多的话,那修订版本就有几万条记录了 在functi ...

  8. 在ubuntu下关闭笔记本触摸板

    http://www.cnblogs.com/icejoywoo/archive/2011/04/14/2016318.html 原文地址:http://forum.ubuntu.org.cn/vie ...

  9. iOS_16_开关控制器_modal_代码方法

    最后效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill ...

随机推荐

  1. JScript实现将指定目录下的vc工程加到解决方案

    作者:朱金灿 来源:http://blog.csdn.net/clever101 main(); function main() { try { var WSShell = WScript.Creat ...

  2. C++机器学习古典材料

    Caffe :高速神经网络架构 住址:https://github.com/BVLC/caffe CCV :以C语言为核心的现代计算机视觉库 地址:https://github.com/liuliu/ ...

  3. java server wrapper 和 maven assembly 插件

    Java Service Wrapper工具YAJSW 简介信息 YAJSW是一个开源的Java服务包装(Java Service Wrapper)工具.YAJSW允许您把任何应用程序安装为windo ...

  4. adb删除系统软件

    ZTE V970Android OS 4.1.2OS version: LeWa_13.04.03系统内存划分很小,才500M. 幸好开发者设置里面有一项:ROOT 授权管理adb root // 没 ...

  5. 计算广告(computational advertising)

    计算广告学是一门由信息科学.统计学.计算机科学以及微观经济学等学科交叉融合的新兴分支学科. 1. 课程与资源 Andrei Broder:美国工程院院士,计算广告概念的提出者: MS&E 23 ...

  6. XamlReader 动态加载XAML

    原文:XamlReader 动态加载XAML XAML: <Grid xmlns:x="http://schemas.microsoft.com/client/2006" x ...

  7. Python经常使用内置函数介绍【filter,map,reduce,apply,zip】

    Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是 ...

  8. 利用反汇编手段解析C语言函数

    1.问题的提出函数是 C语言中的重要概念.利用好函数能够充分利用系统库的功能写出模块独立.易于维护和修改的程序.函数并不是 C 语言独有的概念,其他语言中的方法.过程等本质上都是函数.可见函数在教学中 ...

  9. DDD实战12 值对象不创建表,而是直接作为实体中的字段

    这里的值对象如下风格: namespace Order.Domain.PocoModels { //订单地址 //虽然是值对象 但是不继承ValueObject //因为继承ValueObject会有 ...

  10. wxWidgets编译和在VC 6.0中的配置

    1. 安装  运行wxMSW-2.8.3-Setup1.exe,将之安装到不带空格符号的目录中,本例为C:/wxWidgets-2.8.3:   2. 编译和配置 (1) 用VC6.0编译  进入C: ...