TC官方合作论坛

标题: 关于进程枚举问题 [打印本页]

作者: lyyaj    时间: 2014-12-10 12:54
标题: 关于进程枚举问题
在TC中如何列出目前系统中正在运行的所有进程,使用命令进程.信息()可以吗?看了帮助文档,还是搞不清?
求大神们给出思路

作者: a837198    时间: 2014-12-10 14:23
tc  好像没有 枚举当前的所有进程
你可以通过vbs枚举出来  写到一个配置文件里  然后去读取出来

  1. On Error Resume Next
  2. inipath=getfolder&"\Config.ini"
  3. Set objFSO = CreateObject("Scripting.FileSystemObject")
  4. If objFSO.FileExists(inipath) Then
  5.         objFSO.DeleteFile(inipath)          
  6. End If
  7. Set objFile = objFSO.CreateTextFile(inipath)
  8.         Set objFile =nothing
  9.            Set objTextFile = objFSO.OpenTextFile (inipath, 8, True)
  10.         objTextFile.WriteLine("[Process]")
  11.         objTextFile.Close
  12.         Set objTextFile =nothing
  13. Set objFSO =nothing
  14. Dim Cells(10000,4)
  15. call tt()

  16. Sub tt()
  17.     st = "."
  18.     Set objp = GetObject("winmgmts:\\" & st)
  19.     Set objs = objp.instancesof("Win32_Process")
  20.     i = 1
  21.     For Each ps In objs
  22.         Cells(i, 1) = ps.Name
  23.         Cells(i, 2) = ps.ProcessID
  24.         Cells(i, 3) = ps.commandline
  25.         Call WriteINI(inipath,"Process","Process"&i,Cells(i, 1)&"||"&Cells(i, 2))
  26.         i = i + 1
  27.     Next
  28. Call WriteINI(inipath,"Process","ProcessT","OK")
  29. End Sub
  30. Function getfolder()
  31.     getfolder=left(wscript.scriptfullname,instrrev(wscript.scriptfullname,"\")-1)
  32. end Function


  33. 'VBS读取.INI文件键值
  34. Function ReadINI(FilePath,Bar,PrimaryKey)

  35.         Dim iniFileSys,sReadLine,i,j,ss

  36.         ss=""
  37.         Set iniFileSys=CreateObject("Scripting.FileSystemObject")

  38. If iniFileSys.FileExists(FilePath) Then
  39.         Set INIfile=iniFileSys.opentextfile(FilePath,1)

  40.         do until INIfile.atendofstream

  41.                     sReadLine=INIfile.readline

  42.                 If Trim(sReadLine)="["& Bar &"]" then '找到小节名

  43.                             '查找该小节名下的键名

  44.                         Do until INIfile.atendofstream

  45.                                 sReadLine=INIfile.readline  '读取小节名后的行

  46.                                 j=instr(sReadLine,"=")

  47.                                 If j>0 then   '小节名后的文本行存在
  48.                                         If instr(Left(sReadLine,j),PrimaryKey)>0 then  '从"="左边字符串找到键名

  49.                                                 ss = Trim(Right(sReadLine,len(sReadLine)-instr(sReadLine,"=")))
  50.                                                 Exit do

  51.                                         'Else
  52.                                                 'INIfile.skipline  '没找到键名跳过此行

  53.                                         End If
  54.    
  55.                                 'Else

  56.                                         'INIfile.skipline

  57.                                 End If
  58.                         Loop
  59.                 End If
  60.        
  61. loop

  62.         INIfile.close

  63. end if
  64.         Set iniFileSys=nothing
  65.        
  66. ReadINI = ss

  67. End Function

  68. 'VBS修改.INI文件键值
  69. Function WriteINI(FilePath, Bar, PrimaryKey, Value)
  70.         C**t ForReading=1
  71.         C**t ForWriting=2
  72.         C**t ForAppending=8
  73.         Dim iniFileSys, sRead, i, j, sReadLine, BE, stxt
  74.         Set iniFileSys=CreateObject("Scripting.FileSystemObject")
  75.         Set ForRead=iniFileSys.opentextfile(FilePath,1)
  76.         Dim a()  '文本内容逐行放入数组
  77.         i=0
  78.         j=0
  79.         BE=0
  80.         sRead=ForRead.ReadAll       
  81.         ForRead.close
  82.         If Instr(sRead,"[")=0 then  '说明INI文件没有主键,那么写入主键和键值即可
  83.                 Set ForWrite=iniFileSys.opentextfile(FilePath,2)
  84.                 ForWrite.WriteLine "["& Bar &"]"
  85.                 ForWrite.WriteLine PrimaryKey &"="& Value
  86.         Else
  87.                 Dim sArray               
  88.                 sArray=split(sRead,"[")
  89.                 For i=1 to UBound(sArray)
  90.                         If Left(sArray(i),Len(Bar))=Bar then '小节名存在
  91.                                 If Instr(sArray(i),PrimaryKey)>0 then  '找到键名
  92.                                         Set ForRead=iniFileSys.opentextfile(FilePath,1)
  93.                                         Do Until ForRead.AtEndOfStream
  94.                                                 sReadLine = ForRead.ReadLine
  95.                                                 If Instr(sReadLine,"["& Bar &"]")>0 then
  96.                                                         While Instr(sReadLine,PrimaryKey)<1  '读到键名为止
  97.                                                                 sReadLine = ForRead.ReadLine
  98.                                                         Wend
  99.                                                         stxt =sReadLine
  100.                                                         'valueline=Len(sReadLine)-len(Left(sReadLine,instr(sReadLine,"=")))
  101.                                                         'stxt = Right(sReadLine,valueline)                                                       
  102.                                                         Exit do
  103.                                                 End If
  104.                                         Loop
  105.                                          sArray(i)=Replace(sArray(i), stxt, PrimaryKey &"="& Value) '将键值替换为Value
  106.                                 Else
  107.                                          sArray(i)=Replace(sArray(i),Bar&"]",Bar&"]"& vbcrlf & PrimaryKey &"="& Value)
  108.                                         'sArray(i)=sArray(i)& vbcrlf & PrimaryKey &"="& Value
  109.                                      End If
  110.                                 'msgbox Value
  111.                                      BE=1
  112.                                Else
  113.                                End If
  114.                     Next
  115.                     If BE=1 then 'BE=1说明小节名存在,用数组配置好了键名与键值
  116.                                ForRead.close
  117.                                Set ForWrite=iniFileSys.opentextfile(FilePath,2) '覆盖原有内容重新写入
  118.                                ForWrite.Write ""
  119.                                ForWrite.close
  120.                                Set ForWrite=iniFileSys.opentextfile(FilePath,8) '清空并追加写入内容
  121.                                i=0
  122.                                For i=1 to UBound(sArray)
  123.                                        ForWrite.Write "["& sArray(i)
  124.                                Next
  125.                                ForWrite.close
  126.                                Set iniFileSys=nothing
  127.                                Exit Function
  128.                     End If
  129.                     ForRead.close   '写入小节名和键值
  130.                     Set ForWrite=iniFileSys.opentextfile(FilePath,8)
  131.                     ForWrite.WriteLine "["& Bar &"]"
  132.                     ForWrite.WriteLine PrimaryKey &"="& Value
  133.             End If
  134.         ForWrite.close
  135.         Set iniFileSys=nothing
  136. End Function
复制代码




作者: 唯一小哥    时间: 2014-12-10 16:15
VB的代码量真TM的恐怖...如此简单的功能,,居然168行代码
作者: mzbqhbc    时间: 2014-12-10 17:57
TC不支持结构体 不然就可以使用dllcall来实现
上面哪个写成com插件,也不错可以实现,到时候直接读取INI文件就可以了  

作者: lyyaj    时间: 2014-12-10 18:11
a837198 发表于 2014-12-10 14:23
tc  好像没有 枚举当前的所有进程
你可以通过vbs枚举出来  写到一个配置文件里  然后去读取出来

多谢大神们的帮助,真是太热情了;祝TC家庭红红火火
作者: a837198    时间: 2014-12-10 19:50
唯一小哥 发表于 2014-12-10 16:15
VB的代码量真TM的恐怖...如此简单的功能,,居然168行代码

VBS  主要是读写配置程序的书写比较多 而且基本是固定的     其他的根本不多  




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1