(*
冰刃这个系统分析工具以前还没用过。
这样高级的工具,用结束进程的方式就不试了。
按手工关闭的流程实现。
首先是通过遍历当前进程,确定冰刃进程的主窗体;
然后发送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;
相关文章
- 用C#代码来安装、卸载、启动、关闭服务
- Winform主菜单两种实现方式-1.)从工具箱中双击MenuStrip控件,窗体的顶部就会放置一个MenuStrip控件,或者在工具箱中单击MenuStrip控件,拖至窗体中也可以. 2.)在MenuStrip的“Type Here”输入主菜单和菜单名字,热键用(&X)表示. 用快捷键选择主菜单,可以用Alt + 预定义的按键来实现,子菜单的选择只需要按定义的热键即可. 3.)双击File*菜单下面的子菜单,创建子菜单Open、Save、Exit的单击事件代码: private void OpenOToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog { //初始化打开对话框的路径 InitialDirectory = @"D:\", Title = "Open File", //定义可显示的文件类型; Filter = "txt file(*.txt)|*.txt|All file(*.*)|*.*", //定义默认显示的文件类型为txt FilterIndex = 1, //对话框关闭后将复位初始化路径 RestoreDirectory = true }; if (ofd.ShowDialog == DialogResult.OK) { //根据打开对话框选择的文件名,加载文本内容到富文本框中. richtxtContent.Text = File.ReadAllText(ofd.FileName); } } private void SaveSToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog { //初始化保存对话框的路径 InitialDirectory = @"D:\", Title = "Save File", //定义可显示的文件类型; Filter = "txt file(*.txt)|*.txt|All file(*.*)|*.*", //定义默认显示的文件类型为txt FilterIndex = 1, //对话框关闭后将复位初始化路径 RestoreDirectory = true }; if(sfd.ShowDialog == DialogResult.OK) { //保存文件 File.WriteAllText(sfd.FileName, richtxtContent.Text); //清空富文本框内容 richtxtContent.Clear; } } private void exitEToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit; } 4.)执行下程序,加载指定的txt文件到富文本框中,如下: 5.)在富文本框中更新加载进来的txt文件内容. 6.)Alt + F热键打开文件的下拉菜单,单击S保存富文本框中的内容到指定的文件.打开txt验证菜单单击事件保存文件成功. 二.实现winform主菜单的方法2:MenuStrip类和toolStripMenuItem类实例化对象,在主窗体加载事件中实现如下代码:
- 用C#用C#实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码
- 用vbs脚本来关闭 HTML 页面的代码
- 冰刃是如何实现强制关闭进程的
- 用代码关闭冰刃(IceSword)
- 用代码关闭冰刃(IceSword)
- 冰刃IceSword中文版 V1.22 绿色汉化修正版
- 冰刃 IceSword1.22 中文版
- 冰刃(IceSword)可以修改ios越狱苹果wifi mac imei等等信息