论坛风格切换切换到宽版
  • 5293阅读
  • 3回复

【求助】如何不使用插件检测杀类别名称进程?并不是杀EXE。 [复制链接]

上一主题 下一主题
离线19880313
 

发帖
83
金钱
770
威望
77
只看楼主 倒序阅读 0 发表于: 2012-02-03
RT。比如我的程序类别名称为“TXABCtMainForm“在已安装后或者卸载前检测是否关于此类名称是否在进程中运行,这样比直接检测EXE要科学多了。请大家不吝赐教。多谢了。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2012-02-04
  1. 语法:
  2. function FindWindowByClassName(const ClassName: String): HWND;
  3. 描述:
  4. 获取类名与指定字串匹配的顶层窗口的句柄。这个函数不搜索子窗口,且不执行区分大小写搜索。如果没有找到窗口则返回 0。


离线19880313

发帖
83
金钱
770
威望
77
只看该作者 2 发表于: 2012-02-04
回 1楼(gnatix) 的帖子
gnatix:语法: function FindWindowByClassName(const ClassName: String): HWND; 描述: 获取类名与指定字串匹配的顶层窗口的句柄。这个函数不搜索子窗口,且不执行区分大小写搜索。如果没有找到窗口则返回 0。....... (2012-02-04 15:29) 

多谢老虎版主提醒,我按你的方法写了如下代码检测程序是没有问题了。但是如能写“杀”进程这个命令?结束进程命令是否可以拓展好几个?因为主程序运行之后会连带运行其他程序组件。是否只要把检测条目增加然后再写相应的结束命令即可?再次麻烦老虎兄解答一下。多谢。

[Code]
function InitializeSetup(): Boolean;
var
   is_value: integer;
begin
   Result :=true;
   is_value:=FindWindowByClassName('TXABCMainForm');
   while is_value<>0 do
begin
   if Msgbox('注意 ABC 当前正在运行,继续安装前请先关闭它(建议先卸载再安装),' #13#13 '单击“是”结束当前进程并覆盖安装,或按“否”退出。', mbConfirmation, MB_YESNO) = idNO then
       begin
      Result :=false; //安装程序退出
      is_value :=0;
       end else begin
      Result :=true;   //安装程序继续
      is_value:=FindWindowByClassName('TXABCMainForm');
       end;
end;
end;
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2012-02-04
用 INNO 只是检查进程是否在运行,而不能终止进程。