【已解决】代码出现问题,不知道哪里出错
本帖最后由 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: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 #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 回复 3# haijie1223
非常感谢!
页:
[1]