chron 发表于 2015-4-3 07:44:14

【已解决】代码出现问题,不知道哪里出错

本帖最后由 chron 于 2015-4-3 21:07 编辑

#include <Constants.au3>
#include <array.au3>
Func _EnumPrinter()
        Local $PrtNameTXT = '', $i = 1, $ReadLocalPrt, $Boolean
        While 1
                $ReadLocalPrt = RegEnumVal('HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices', $i)
                If @error <> 0 Then ExitLoop
                $PrtNameTXT &= $ReadLocalPrt & '|'
                $i += 1
        WEnd
        $PrtArray = StringSplit($PrtNameTXT, '|', 1)
        Local $iIndex = _ArraySearch($PrtArray, 'Canon LBP6200', 0, 0, 1, 1)
        If @error Then
                Return $Boolean = False
                ;MsgBox(4096, "没有找到匹配结果", '搜索完毕,没有结果可显示。')
        Else
                Return $Boolean = True
                ;MsgBox(4096, "搜索成功", '存在!')
        EndIf
EndFunc   ;==>_EnumPrinter
If _EnumPrinter() = True Then
        MsgBox(4096, "布尔值比较", "True")
Else
        MsgBox(4096, "布尔值比较", "False")
EndIf 该段代码引用了论坛一位仁兄显示本机打印机的代码,想实现来检测是否已经存在相同打印机的功能,可是出现错误,烦请各位指点!谢谢!先去考科目二,回来再看,内心忐忑的很~~~
1、数组搜索无法做到完整匹配搜索,及关键字为Canon也会成功。
2、返回的布尔值是相反的, if not _EnimPrinter() = True 才是正确的结果,不然刚好相反。

Huiseyu 发表于 2015-4-3 09:05:06

本帖最后由 Huiseyu 于 2015-4-3 09:11 编辑

回复 1# chron
#include <Constants.au3>
#include <array.au3>
Func _EnumPrinter()
      Local $PrtNameTXT = '', $i = 1, $ReadLocalPrt, $Boolean
      While 1
                $ReadLocalPrt = RegEnumVal('HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices', $i)
                If @error <> 0 Then ExitLoop
                $PrtNameTXT &= $ReadLocalPrt & '|'
                $i += 1
      WEnd
      $PrtArray = StringSplit($PrtNameTXT, '|', 1)
      Local $iIndex = _ArraySearch($PrtArray, 'Canon LBP6200', 0, 0, 1, 1)
      If @error = 6 Then
                Return $Boolean = False
                ;MsgBox(4096, "没有找到匹配结果", '搜索完毕,没有结果可显示。')
      Else
                Return $Boolean = True
                ;MsgBox(4096, "搜索成功", '存在!')
      EndIf
EndFunc   ;==>_EnumPrinter
If _EnumPrinter() = True Then
                                                MsgBox('','',$iIndex) ;Debug
      MsgBox(4096, "布尔值比较", "True")
Else
      MsgBox(4096, "布尔值比较", "False")
EndIf

haijie1223 发表于 2015-4-3 11:18:52

#include <array.au3>
Func _EnumPrinter()
        Local $PrtNameTXT = '', $i = 1, $ReadLocalPrt
        Local $PrtArray, $iIndex,$ERROR
        While 1
                $ReadLocalPrt = RegEnumVal('HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices', $i)
                If @error Then ExitLoop
                $PrtNameTXT &= $ReadLocalPrt & '|'
                $i += 1
        WEnd
        $PrtArray = StringSplit($PrtNameTXT, '|', 1)
        _ArrayDisplay($PrtArray)
        $iIndex = _ArraySearch($PrtArray, 'Canon LBP6200')
        If @error Then
                Return False
        Else
                Return True
        EndIf
EndFunc   ;==>_EnumPrinter
If _EnumPrinter() = True Then
        MsgBox(4096, "布尔值比较", "True")
Else
        MsgBox(4096, "布尔值比较", "False")
EndIf

chron 发表于 2015-4-3 20:43:55

回复 3# haijie1223


    非常感谢!
页: [1]
查看完整版本: 【已解决】代码出现问题,不知道哪里出错