用代码关闭冰刃(IceSword)
(*
冰刃这个系统分析工具以前还没用过。
这样高级的工具,用结束进程的方式就不试了。
按手工关闭的流程实现。
首先是通过遍历当前进程,确定冰刃进程的主窗体;
然后发送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)的更多相关文章
- 冰刃IceSword中文版 V1.22 绿色汉化修正版
软件名称: 冰刃IceSword中文版 V1.22 绿色汉化修正版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 2.1MB 图片预览: 软件简介: Ic ...
- Ios8代码关闭输入预测问题
自IOS8出来了输入预测问题后,有些问题也就来了比如textfield中输入邮箱的话,就会有很多空格无法去掉,当时我一直在找有没有提供什么方法可以关闭:后面有这样的一个属性可以解决输入邮箱没有空格问题 ...
- java代码关闭tomcat程序
1.通过java代码实现tomcat的关闭 2.tomcatStop.java package test; import java.io.BufferedReader; import java.io. ...
- 使用java代码关闭指定端口的程序-windows
转载请请在页首注明作者与出处 一:问题由史 今天遇到一个问题,就是在实现自动化灾备的时候,发现原有死掉的程序没有完全关闭,当然这都不是本文的重点,重点是这个时候,我得把它完全关闭,所以才有了这篇文章. ...
- iOS 通过代码关闭应用程序
//-------------------------------- 退出程序 -----------------------------------------// - (void)exitAppl ...
- iOS通过代码关闭程序
//-------------------------------- 退出程序 -----------------------------------------// - (void)exitAppl ...
- wordpress数据库优化-关闭日志修订
每次在wordpress网站修改文章的时候都会产生一个修订版本,wp_posts会产生一个post_type为“REVISIONS”的记录,修改次数一多的话,那修订版本就有几万条记录了 在functi ...
- 在ubuntu下关闭笔记本触摸板
http://www.cnblogs.com/icejoywoo/archive/2011/04/14/2016318.html 原文地址:http://forum.ubuntu.org.cn/vie ...
- iOS_16_开关控制器_modal_代码方法
最后效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill ...
随机推荐
- ajax——XMLHttpRequest
XMLHttpRequest对象.能够让ajax程序在不又一次载入的页面的情况下更新页面数据,页面载入完毕后从server接受发生数据.这样既减轻了server负担又回顾了响应速度,缩短了用户的等待时 ...
- 【codeforces 534A】Exam
[题目链接]:http://codeforces.com/contest/534/problem/A [题意] 给你n个人,要求任意两个编号相邻的人不能相邻; 让你安排座位方案,使得最多人的可以入座 ...
- WPF 获得当前输入法语言区域
原文:WPF 获得当前输入法语言区域 本文告诉大家如何获得 WPF 输入法的语言区域 需要使用 user32 的方法,很简单,请看下面 [DllImport("user32.dll" ...
- xml报错(xsd):Failed to read schema document
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLoc ...
- 机器审核图片学习(1)pornDetector
a) https://github.com/bakwc/PornDetector 封装了两个库,opencv与scikit-learn 另外一种法师封装了opencv与tensorflow
- hdu 3966 树链分割第一3遍
真的不好意思说话.你写得越多,对风暴各种问题泄露,更离谱,有什么错有.. .但是,仍然有一个.同时经过规范的编写清晰的代码.不能认为是理所当然... 树桩阵列版: #include<cstdio ...
- Matlab Tricks(二十)—— Hilbert matrix 的创建
Hij=1i+j−1 N = 5; A = ones(N, 1)*(1:N); B = A'; H = 1./(M+N-1);
- WPF党旗和国徽!
原文:WPF党旗和国徽! 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/18087007 ...
- C++中new和delete的背后(最后还是调用了MSVCR90的malloc)
关于 C++中new背后的行为, 以前已经写过一篇了 理解C++中new背后的行为, 但是里面也只是泛泛而谈,没有真凭实据, 下面我们从汇编的角度看C++编译器究竟在背后干了什么? 我们的代码很简 ...
- SendMessage函数与MSDN系统预定义消息
SendMessage function https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29. ...