TC官方合作论坛

 找回密码
 立即注册
查看: 473|回复: 10
打印 上一主题 下一主题

[已解决] 请问用系统枚举找进程,进程不存在时,如何去掉tc报错

[复制链接]
跳转到指定楼层
楼主
发表于 2014-12-4 09:08:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请问用系统枚举找进程,进程不存在时,如何去掉tc报错
回复

使用道具 举报

9#
发表于 2014-12-5 09:11:00 | 只看该作者
marshal0328 发表于 2014-12-4 14:11
我试过了定义字符串也不行,一样的报错,我是用 类型.获取类型  查看的,返回的是整型 ...

我说了是字符串类型的返回值
只不过只有一个窗口的时候 就一个窗口句柄 这时候是整型 那么下面的情况呢
没有找到窗口 返回 ""
找到多个窗口 返回 "12312312|21321312"
这能不报错么 你管他返回什么 当字符串处理就好了
反正是弱类型的也不需要你去明确的定义就和JavaScript一样的用var就行了
然后判断下 如果返回值 =="" 就是没找到
如果 返回值里 能找到| 就是多个窗口 需要分割
回复 支持 反对

使用道具 举报

沙发
发表于 2014-12-4 11:00:04 | 只看该作者
TC又怎么会报错
是你自己没对返回值进行判断
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2014-12-4 11:47:52 | 只看该作者
q273814 发表于 2014-12-4 11:00
TC又怎么会报错
是你自己没对返回值进行判断

整型 返回值=进程.获取窗口句柄(system.enum("abc.exe",2))
    if(返回值>0)
        窗口.置顶(返回值)
    else
        help.messagebox("没有找到")
    endif
没给判断的机会,找不到的话,tc就直接弹出错误窗口,提示在这一行 整型 返回值=进程.获取窗口句柄(system.enum("abc.exe",2))
数据类型不匹配
回复 支持 反对

使用道具 举报

地板
发表于 2014-12-4 12:51:57 | 只看该作者
marshal0328 发表于 2014-12-4 11:47
整型 返回值=进程.获取窗口句柄(system.enum("abc.exe",2))
    if(返回值>0)
        窗口.置顶(返回值) ...

你这是哪个版本的语法  。。。
整型。。。
TC是弱类型的 不需要申明类型
回复 支持 反对

使用道具 举报

5#
发表于 2014-12-4 12:52:24 | 只看该作者
marshal0328 发表于 2014-12-4 11:47
整型 返回值=进程.获取窗口句柄(system.enum("abc.exe",2))
    if(返回值>0)
        窗口.置顶(返回值) ...

还有 你就不能好好看看帮助文档?  枚举返回的是字符串也不是int
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2014-12-4 14:11:44 | 只看该作者
q273814 发表于 2014-12-4 12:52
还有 你就不能好好看看帮助文档?  枚举返回的是字符串也不是int

我试过了定义字符串也不行,一样的报错,我是用 类型.获取类型  查看的,返回的是整型
回复 支持 反对

使用道具 举报

7#
发表于 2014-12-4 19:01:31 | 只看该作者
调试输出一下 返回的值有什么  
回复 支持 反对

使用道具 举报

8#
发表于 2014-12-4 19:03:19 | 只看该作者
本帖最后由 a837198 于 2014-12-4 19:05 编辑

函数空间: 中文:系统
英文:system
函数描述: 根据类型枚举需要的类型,并返回枚举到的结果

函数原型: 枚举(name,type)
enum(name,type)

函数参数: name: 名称(根据类型来提供,比如模式0:需要的就是窗口标题(如:计算器,注意有些窗口没有窗口名) 1:类名(通过AB抓抓或者窗口返回类名等函数获取,注意有些窗口没有类名) 2:进程名(通过任务管理器中查看得到,如"QQ.exe","YY.exe")

type:
0: 窗口名枚举窗口句柄
1: 类名枚举窗口句柄
2: 进程名枚举进程句柄
3: 父窗口句柄枚举子窗口句柄 (参数1为空串,如系统.枚举("",3)将以桌面句柄为父窗口句柄)
返回值: 根据类型枚举需要的类型,返回枚举后的结果(多个使用"|"字符隔开),未找到返回空字符

脚本示例: 中文示例:
返回值=系统.枚举("计算器",0)
辅助.消息框(返回值)

英文示例:
ret=system.enum("计算器",0)
help.messagebox(ret)

回复 支持 反对

使用道具 举报

10#
发表于 2014-12-5 09:26:27 | 只看该作者

  1. function enumhwnd()//枚举窗口句柄
  2.     hwnds=system.enum("game.exe",2)                                                                        //按枚举
  3.     if(hwnds=="")
  4.         return 0
  5.     endif
  6.     var len,Caption                                                                                                        //申明变量用来保存窗口数量,窗口标题
  7.     if(str.findstr(hwnds,"|")<0)
  8.         hwnd=hwnds
  9.         hwnds=array[1]
  10.         hwnds[0]=hwnd
  11.         hwnd=null
  12.         len=1
  13.     else
  14.         str.split(hwnds,"|",hwnds)                                                                                        //分割枚举到的窗口
  15.         arraysp.size(hwnds,len)                                                                                                //获取窗口数量
  16.     endif
  17.     for(i=0;i<len;i++)
  18.         if(str.findstr(window.getwindowtype(hwnds[i]),"fsgamehero")<0)        //如果窗口类名不符合
  19.             continue                                                                                                        //直接略过
  20.         endif
  21.         Caption=window.getwindowcaption(hwnds[i])                                                //读取窗口标题
  22.         if(str.findstr(Caption," ")<0)                                                                        //如果窗口标题不符合
  23.             continue                                                                                                        //直接略过
  24.         endif
  25.         str.split(Caption," ",Caption)                                                                        //将标题分割
  26.         var CaptionLen                                                                                                        //标题分割出来的数组长度
  27.         arraysp.size(Caption,CaptionLen)                                                                //赋值
  28.         if(CaptionLen!=6)                                                                                                        //长度不等于6[游戏名,标识,版本号,大区,服务器,角色名]
  29.             continue                                                                                                        //略过
  30.         endif
  31.         arraysp.add(main.hWnds,hwnds[i],1)                                                                //添加窗口句柄
  32.         arraysp.add(main.pName,Caption[5],1)                                                        //添加角色名称
  33.     endfor
  34.     var GameWindowCount                                                                                                        //游戏窗口数量
  35.     arraysp.size(main.hWnds,GameWindowCount)                                                        //获取游戏窗口数量
  36.     for(i=0;i<GameWindowCount;i++)
  37.         edit.settext("edit1"&(i+1),main.hWnds[i])                                                //显示窗口句柄
  38.         edit.settext("edit2"&(i+1),main.pName[i])                                                //显示角色名称
  39.         edit.settext("edit3"&(i+1),"未设置")                                                        //显示角色名称
  40.         edit.settext("edit4"&(i+1),"窗口初始化")                                                //显示角色名称
  41.     endfor
  42.     return GameWindowCount                                                                                                //函数执行完毕,返回多开数量
  43. endfunction

复制代码
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-24 03:30 , Processed in 0.385801 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表