找回密码
 加入
搜索
查看: 3943|回复: 8

[AU3基础] [已解決]無法讀取input內容

  [复制链接]
发表于 2015-12-30 23:53:16 | 显示全部楼层 |阅读模式
本帖最后由 jasonny 于 2016-1-4 19:47 编辑

#include <GUIConstantsEx.au3>
#include <Process.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#RequireAdmin

$Form=GUICreate("PCinfo",400,300)
$label1=GUICtrlCreateLabel("",120,100,250,120)
$button1=GUICtrlCreateButton("test",200,50,70,20)
$label2=GUICtrlCreateLabel("CPU型號",50,100,70,50)
$input1=GUICtrlCreateInput("",50,50,50,30)




GUISetState()
while 1
   $msg=GUIGetMsg()
   $a=GUICtrlRead($Input1,0)
   switch $button1
   case $msg=$GUI_EVENT_CLOSE
          ExitLoop
   case $msg=$button1
      $com= _RunDOS("wmic cpu  get name >c:\cpu.txt " )
          $order= FileReadLine("c:\cpu.txt",2)
          GUICtrlSetData($label1,$order)
          FileDelete("c:\cpu.txt")
   EndSwitch
WEnd



以上程式碼輸入可執行。有個指令wmic /node:"電腦名稱" cpu get name
請問一下如何將電腦名稱用GUICtrlInput取代,讓user輸入電腦名稱,感謝~
发表于 2015-12-31 08:20:55 | 显示全部楼层
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button1
                        Run(@ComSpec & " /c wmic cpu  get name >c:\cpu.txt",@SystemDir,@SW_HIDE )
                        $order= FileReadLine("c:\cpu.txt",2)
                        GUICtrlSetData($label1,$order)
                        FileDelete("c:\cpu.txt")
        EndSwitch
WEnd
 楼主| 发表于 2015-12-31 21:46:35 | 显示全部楼层
感謝H大的回答,但我試過你這樣改也只會讀到本機的資訊,我主要是想遠端讀取電腦的資訊
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button1
                        Run(@ComSpec & " /c wmic /node:"$input1"cpu  get name >c:\cpu.txt",@SystemDir,@SW_HIDE )
                        $order= FileReadLine("c:\cpu.txt",2)
                        GUICtrlSetData($label1,$order)
                        FileDelete("c:\cpu.txt")
        EndSwitch
WEnd
這樣的話會出錯
发表于 2016-1-1 07:55:17 | 显示全部楼层
回复 3# jasonny


    你这么写当然会出错,你想把名称输出到INPUT吗?改下控件名不就行了?
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button1
                        Run(@ComSpec & " /c wmic cpu  get name >c:\cpu.txt",@SystemDir,@SW_HIDE )
                        $order= FileReadLine("c:\cpu.txt",2)
                        GUICtrlSetData($input1,$order)
                        FileDelete("c:\cpu.txt")
        EndSwitch
WEnd
发表于 2016-1-1 23:03:44 | 显示全部楼层
楼主大概是想要这样吧,如果不考虑用户名和密码对不对的话。注意cpu get前面有个空格。
GUISetState()
while 1
   $msg=GUIGetMsg()
   $a=GUICtrlRead($Input1,0)
   switch $button1
                case $msg=$GUI_EVENT_CLOSE
          ExitLoop
          case $msg=$button1
                  $computerName = GUICtrlRead($input1)
                  $com= Run(@ComSpec & " /c wmic /node:" & $computerName &  " cpu  get name >c:\cpu.txt",@SystemDir,@SW_HIDE )
                          $order= FileReadLine("c:\cpu.txt",2)
                          GUICtrlSetData($label1,$order)
                          FileDelete("c:\cpu.txt")
   EndSwitch
WEnd
发表于 2016-1-1 23:20:32 | 显示全部楼层
很多年前写的一个小工具里面的一部分代码,刚才复制出来测试了一下,还可以用,核心的代码好像也是以前从别人的脚本里借鉴的,楼主用这种方式来获取吧,比写到文件再读取出来的方式要可靠一些,参数可以是IP地址,也可以是计算机名称,很老的脚本了,不足之处请见谅。
$lines = _hardware("homepc")
ConsoleWrite($lines)

Func _hardware($ip)
        dim $mbd,$MBD,$MEM,$VGA,$HDD,$CPU
        If ping($ip,100) Then
                $objWMIService = objget("winmgmts:{impersonationLevel=impersonate}!\\"& $ip & "\root\cimv2")
                If Not @error Then
                                $colBoard = $objWMIService.ExecQuery("SELECT * FROM Win32_BaseBoard")
                                $colCPU = $objWMIService.ExecQuery("Select * from CIM_Processor")
                                $colMemory = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
                                $colVideoinfo = $objWMIService.ExecQuery("Select * from Win32_VideoController")
                                $coldisk = $objWMIService.ExecQuery("Select * from Win32_DiskDrive")
                                For $object in $colBoard
                                        $MBD = $object.Product
                                Next
                                For $object in $colCPU
                                        $CPU = StringStripWS($object.Name,1)
                                Next
                                for $object in $colMemory
                                        $MEM = string(Int(Number($object.TotalPhysicalMemory)/1048576)) & " MB"
                                Next
                                For $object in $colVideoinfo
                                        $VGA = StringStripWS($object.Description ,1)
                                Next
                                For $object in $coldisk
                                        $HDD = $HDD + int($object.size /1073741824)
                                Next
                                $HDD = String($HDD) & " GB"
                        Else
                        $CPU = "对方未开启WMI服务或用户名密码错误"
                EndIf
        Else
                $CPU = "对方可能未开机"
        EndIf
        Return $IP & "|" & $MBD & "|" & $CPU & "|" & $MEM & "|" & $VGA & "|" & $HDD
EndFunc
 楼主| 发表于 2016-1-4 19:46:53 | 显示全部楼层
回复 5# luren666


恩,我想要的就是這樣!!,感謝指點
发表于 2016-1-6 14:32:36 | 显示全部楼层
好贴,学习了。
发表于 2016-1-6 18:41:35 | 显示全部楼层
回复 6# luren666


    感谢分享
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 00:21 , Processed in 0.304582 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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