Показать полную графическую версию : [решено] Как найти и прописать в реестре запуск нужного файла?
Нужно запустить файл WPI.hta который находится в папке WPI, т.е. файл лежит так \WPI\WPI.hta в корне диска. Букву диска нужно определить по метке \WPI\WPI.hta. Причем файл WPI.hta может лежать на DVD/CD диске или на флешке или на диске веника. То есть скрипт должен запустить такое:
RegWrite($sKey &"\999", "1", "REG_SZ", $sDVD &"\WPI\WPI.hta")
Если пути WPI\WPI.hta нет то ничего делать не нужно.
Вот это главное что хочется.
Можно и хотелось бы сложнее скрипт. Если найдется два пути \WPI\WPI.hta или более то пусть выскакивает сообщение об этом и возможность выбора с какой буквы диска запустить скрипт.
Спасибо в любом случае.
Букву диска нужно определить по метке \WPI\WPI.hta »
Какой метке, откуда скрипт будет знать где искать диск? или сам скрипт будет там и находиться?
Creat0R, скрипт не важно откуда запущен. Он должен найти файл WPI.mht который находится в папке WPI. Сама папка WPI может находится в корне любого диска (диск винчестера, флешки, DVD...). Метка по которой скрипт должен искать и является сам путь к файлу диск:\WPI\WPI.hta
Он должен найти файл »
С этого и следовало начинать, что скрипт должен искать файл, а не определять букву диска...
#include <GuiConstantsEx.au3>
#include <ComboConstants.au3>
$sWPI_Drives = ""
$sSel_Drive = ""
$sFirst_Drive = ""
$sKey = "HKEY_LOCAL_MACHINE\SOFTWARE"
$aDrives = DriveGetDrive("All")
For $i = 1 To $aDrives[0]
If $aDrives[$i] = "a:" And DriveStatus($aDrives[$i]) <> "READY" Then ContinueLoop
If FileExists($aDrives[$i] & "\WPI\WPI.hta") Then
If $sWPI_Drives = "" Then $sFirst_Drive = $aDrives[$i]
$sWPI_Drives &= StringUpper($aDrives[$i]) & "|"
EndIf
Next
$sWPI_Drives = StringRegExpReplace($sWPI_Drives, "\|+$", "")
If StringInStr($sWPI_Drives, "|") Then
$hGUI = GUICreate("Select Drives", 300, 200)
$Drives_Combo = GUICtrlCreateCombo("", 20, 20, 170, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, $sWPI_Drives, $sFirst_Drive)
$OK_Button = GUICtrlCreateButton("OK", 20, 170, 60, 20)
$Cancel_Button = GUICtrlCreateButton("Cancel", 90, 170, 60, 20)
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $Cancel_Button
Exit
Case $OK_Button
$sSel_Drive = GUICtrlRead($Drives_Combo)
ExitLoop
EndSwitch
WEnd
ElseIf $sWPI_Drives <> "" Then
$sSel_Drive = $sWPI_Drives
EndIf
If $sSel_Drive <> "" Then RegWrite($sKey & "\999", "1", "REG_SZ", $sSel_Drive & "\WPI\WPI.hta")
Creat0R, скрипт работает но с недостатком о котором я говорил здесь (http://forum.oszone.net/thread-133300.html) То есть из за кард рийдера выскакивает окно с сообщением непонятным и только после нескольких нажатий скрипт продолжает работу. Можно ли это обойти? Поиск на дисках кард рийдера необязателен если скрипт средствами автоит можно задать не искать там.
И еще. Можно ли уменьшить размеры окно которое появляется с выбором диска? Более коипактным его ходелось бы увидеть. Какие строки скрипта за это отвечают
Спасибо.
Поиск на дисках кард рийдера необязателен »
Поиск нужен только на CDRoom'ах?
Какие строки скрипта за это отвечают »
GUICreate("Select Drives", 300, 200).
Creat0R, поиск нужен на дисках винчестера, на USВ флешках, на DVD или CD дисках и на USВ винчестерах. Вот именном кард рийдер трогать не нужно вообще. Если просто искать на DVD или CD то я вроде имею представление как поменять ваш скрипт.
кард рийдер трогать не нужно вообще »
А как определить что это кард рийдер? это ведь тоже числится как внешнее устройство (как и USB винчестер), т.е «REMOVABLE».
Или буква этого ридера известна заранее?
Creat0R, видимо никак нельзя определить что это кард рийдер а не флешка буквы дисков кард рийдера не известны. А может как то можно средствами автоит подавить возникающие окна и чтобы скрипт работал дальше не ожидая нажатия Продолжить?
А если так:
#include <GuiConstantsEx.au3>
#include <ComboConstants.au3>
;
$sWPI_Drives = ""
$sSel_Drive = ""
$sFirst_Drive = ""
$sKey = "HKEY_LOCAL_MACHINE\SOFTWARE"
$aDrives = DriveGetDrive("All")
For $i = 1 To $aDrives[0]
If DriveStatus($aDrives[$i]) <> "READY" Then ContinueLoop
If FileExists($aDrives[$i] & "\WPI\WPI.hta") Then
If $sWPI_Drives = "" Then $sFirst_Drive = $aDrives[$i]
$sWPI_Drives &= StringUpper($aDrives[$i]) & "|"
EndIf
Next
$sWPI_Drives = StringRegExpReplace($sWPI_Drives, "\|+$", "")
If StringInStr($sWPI_Drives, "|") Then
$hGUI = GUICreate("Select Drives", 200, 100)
$Drives_Combo = GUICtrlCreateCombo("", 20, 20, 170, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, $sWPI_Drives, $sFirst_Drive)
$OK_Button = GUICtrlCreateButton("OK", 20, 70, 60, 20)
$Cancel_Button = GUICtrlCreateButton("Cancel", 130, 70, 60, 20)
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $Cancel_Button
Exit
Case $OK_Button
$sSel_Drive = GUICtrlRead($Drives_Combo)
ExitLoop
EndSwitch
WEnd
ElseIf $sWPI_Drives <> "" Then
$sSel_Drive = $sWPI_Drives
EndIf
If $sSel_Drive <> "" Then RegWrite($sKey & "\999", "1", "REG_SZ", $sSel_Drive & "\WPI\WPI.hta")
Creat0R, все сработало. Спасибо. Как я заметил скрипт отличается строкой
If $aDrives[$i] = "a:" And DriveStatus($aDrives[$i]) <> "READY" Then ContinueLoop
Для моего общего развития можете объяснить в чем разница?
И еще. Можно ли в появляющемся окне вставить еще какой нибудь текст между буквой выбора диска и заголовком окна?
Creat0R, начал тестировать скрипт, все хорошо, только прошу добавить еще маленькую вещь. Нужно добавить такую вот запись в реестре:
RegWrite($sKey &"\910", "1", "REG_SZ","REGEDIT /S "& $sDVD &"\$OEM$\HKLM.reg")
Только в этом случае чтобы буква диска $sDVD определялась по наличию на диске файла WIN51 и никакого выбора диска как в вашем последнем скрипте не нужно делать. Поиск файла WIN51 нужно произвести на всех дисках и очень желательно чтобы не было проблемы с кардрийдером, так как в последней версии Вашего скрипта. Спасибо
в чем разница? »
В отличие от первого варианта, во втором буква диска не проверяется, для всех дисков проверяется их статус.
Можно ли в появляющемся окне вставить еще какой нибудь текст между буквой выбора диска и заголовком окна? »
Можно, см. GUICtrlCreateLabel() в справке.
в этом случае чтобы буква диска $sDVD определялась по наличию на диске файла WIN51 и никакого выбора диска »
$sKey = "HKEY_LOCAL_MACHINE\SOFTWARE"
$aDrives = DriveGetDrive("All")
For $i = 1 To $aDrives[0]
If DriveStatus($aDrives[$i]) <> "READY" Then ContinueLoop
If FileExists($aDrives[$i] & "\WIN51") Then
RegWrite($sKey & "\910", "1", "REG_SZ", "REGEDIT /S " & $aDrives[$i] & "\$OEM$\HKLM.reg")
ExitLoop
EndIf
Next
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.