1 (изменено: Onix, 2015-01-02 05:10:44)

Тема: AHK : Проверка на USB устройство.

Приветствую уважаемые форумчани!

Прошу вас помочь мне с 1 скриптом. Вообщем суть такова :
Мне нужна как бы функция , которая будет считывать все диски и выявлять из них USB - флешку и записывать ее в переменную в ввиду " F:\ " - пример . Данных о флешке вообще нету , не названия , не имени , не какой размер у нее .

DriveGet, OutputVar, Cmd [, Value]
Type, Path: определяет тип указанного в Path диска, обозначаемый одним из следующих слов: Unknown, Removable, Fixed, Network, CDROM, RAMDisk.

Понял что можно с помощью этой функции , надо как бы пропарсить наверное все диски и выявить среди них "Removable" , если правильно размышляю , но знаний в AHK не хватает что бы воплотить в реальность(код) это.
Заранее большое спасибо!
Сразу говорю , искал по всему форуму , пробывал изменять разные версии кодов , не чего подходящего не нашел.

2

Re: AHK : Проверка на USB устройство.

Перебрать все возможные буквы можно так:


FlashDrive := "Не найдено"

Loop, 26
{
    Path := Chr( A_Index + 0x40 ) . ":\"
    DriveGet, Type, Type, %Path%
    If( Type = "Removable" ) {
        FlashDrive := Path
        Break
    }
}

MsgBox, %FlashDrive%

3 (изменено: Onix, 2015-01-02 10:26:28)

Re: AHK : Проверка на USB устройство.

@YMP , Спасибо огромное .
Вот еще один вопросик немного не по теме , но думаю можно .
Вот у меня идет проверка

IfExist, F:\%zFile1%

- переменных %zFile% у меня 4 штуки .
Как сделать выражение : Если одна из этих переменных не равна 0 то ....

IfExist, F:\%zFile1%,%zFile2%,%zFile3%,%zFile4%

- пробовал вот так , но я думаю вы понимаете что это не то)))
Опять же не понимаю как сделать вот так. 
Повторюсь "Как сделать выражение : Если одна из этим переменных не равна 0 то ...."

4

Re: AHK : Проверка на USB устройство.

Если нужна проверка значения переменных, то зачем IfExist? Нужно проверять сами переменные.


If( zFile1 != 0 || zFile2 != 0 || zFile3 != 0 || zFile4 != 0 ) {
    MsgBox, Одна из переменных не равна нулю.
}

5 (изменено: Onix, 2015-01-02 12:18:48)

Re: AHK : Проверка на USB устройство.

YMP пишет:

Если нужна проверка значения переменных, то зачем IfExist? Нужно проверять сами переменные.


If( zFile1 != 0 || zFile2 != 0 || zFile3 != 0 || zFile4 != 0 ) {
    MsgBox, Одна из переменных не равна нулю.
}

Мне же надо вообще проверить существование файла , так как у меня вот так идет скрипт.

Toflash:
IfExist, F:\%zFile1%
{
    MsgBox, 16, Неудача!, Файлы уже находятся на Flash-ке!, 2
}

IfNotExist, F:\%zFile1%
{
    FileMove, %AdressFolder%\%zFile1%, F:\
    FileMove, %AdressFolder%\%zFile2%, F:\
    FileMove, %AdressFolder%\%zFile3%, F:\
    FileMove, %AdressFolder%\%zFile4%, F:\
    MsgBox, 64, Успех!, Файлы успешно перемещены на Flash-ку!, 1
}
return

Withflash:
IfExist, %AdressFolder%\%zFile1%
{
    MsgBox, 16, Неудача!, Файлы уже в папке :`n%AdressFolder%, 2
}
IfNotExist, %AdressFolder%\%zFile1%
{
    FileMove, F:\%zFile1%, %AdressFolder%
    FileMove, F:\%zFile2%, %AdressFolder%
    FileMove, F:\%zFile3%, %AdressFolder%
    FileMove, F:\%zFile4%, %AdressFolder%
    MsgBox, 64, Успех!, Файлы успешно перемещены в папку`n%AdressFolder%, 1
}
return

Потом с помощью этого я выбираю файл , от него остается только само название файла.

zFile1:
FileSelectFile, zFile1 ,1,D:\, Выбирите текстовый файл!
if ErrorLevel 
{
    RegDelete, HKEY_CURRENT_USER, Software\test. , HfileOne
    Reload
    return
}
else {}
RegExMatch(zFile1, "[^\\]+\..+(?=\W*)", zFile1)
RegWrite, REG_EXPAND_SZ, HKEY_CURRENT_USER, Software\test. ,HfileOne, %zFile1%
Reload
return

Воот , но если одна переменная хотя бы пуста из "zFile" то копируются вообще все файлы из папки) я это и хочу как то пофиксить , и то есть в той переменной в которой есть файл , тот и будет копироваться.
Если я выбрал например файлы в переменную  1 и 2 то они только и будут копироваться , если я выбрал только 2 и 4 то они и скопируются . Ну думаю суть понятна.
Пробовал через RegRead по ErrorLevel но там он вообще стремно работать стал .
Через реестр работаю , так как мне надо что бы при повторном запуске остались эти переменные . Мне их туда сюда часто приходится перебрасывать .
p.s.
Я конечно понимаю что вопросы наверное совсем нубские , но я в первые работаю с языком программирования .
Хотел сделать , вот так
Но опять же не знаю как узнать что переменная не чего не вернула


IfNotExist, %AdressFolder%\%zFile1%
{
if(zFile1 <> "") {
    FileMove, F:\%zFile1%, %AdressFolder%
}
else(Тут если не чего не вернула) {
}

6

Re: AHK : Проверка на USB устройство.

Мне же надо вообще проверить существование файла

Какого файла, если переменная пуста? По-моему, вам нужно определиться, что же вы хотите проверять. Проверить переменную на непустоту можно так:


If( zFile1 != "" )

7

Re: AHK : Проверка на USB устройство.

Вот так, видимо:


if(zFile1 <> "") {
    IfNotExist, %AdressFolder%\%zFile1%
    {
        FileMove, F:\%zFile1%, %AdressFolder%
    }
}
else(Тут если не чего не вернула) {
}

8 (изменено: Onix, 2015-01-02 13:50:23)

Re: AHK : Проверка на USB устройство.

YMP пишет:

Вот так, видимо:


if(zFile1 <> "") {
    IfNotExist, %AdressFolder%\%zFile1%
    {
        FileMove, F:\%zFile1%, %AdressFolder%
    }
}
else(Тут если не чего не вернула) {
}

Вот спасибо! Все прекрасно работает))
Только как я понял else тут вообще лишняя

YMP пишет:

Мне же надо вообще проверить существование файла

Какого файла, если переменная пуста? По-моему, вам нужно определиться, что же вы хотите проверять. Проверить переменную на непустоту можно так:


If( zFile1 != "" )

Я просил сказать как проверить на пустую переменную , а не на непустоту . Ахаха.
Возможно просто не доходчиво объясняю так как уже не сплю хрен знает сколько)
Так как на пустотую переменную то проверить?)

9

Re: AHK : Проверка на USB устройство.

Onix пишет:

Я просил сказать как проверить на пустую переменную , а не на непустоту . Ахаха.

Да? А это что?

Как сделать выражение : Если одна из этих переменных не равна 0 то ....

Как выяснилось позже, не равна нулю означало непустая. Да и в итоге вы именно на непустоту и проверяете. А на пустоту с помощью оператора "=", конечно.

10 (изменено: Onix, 2015-01-02 18:32:32)

Re: AHK : Проверка на USB устройство.

If( zFile1 = 0 && zFile2 = 0 && zFile3 = 0 && zFile4 = 0 ) {
    MsgBox, Вы не выбрали файл
    return
}

Так я и пробовал вот так , а он не работает(

Решил))

If( zFile1 = "" && zFile2 = "" && zFile3 = "" && zFile4 = "" ) {
    MsgBox, Вы не выбрали файл
    return
}

11

Re: AHK : Проверка на USB устройство.

Так остался собственно последний вопрос , как все таки проверить что одна из переменных находится на флешке?

If( zFile1 = "F:\%zFile1%" || zFile2 = "F:\%zFile2%" || zFile3 = "F:\%zFile3%" || zFile4 = "F:\%zFile4%" ) {
    MsgBox, Файлы уже находятся на флешке
    return
}

Можно было бы вот так , но у меня переменные "zFile" принимают вид только названия файла , а не путя.

12

Re: AHK : Проверка на USB устройство.

Переменная не может находиться на флэшке, это бессмыслица. Если один из файлов, то можно так:


Flash := "F:\"
If( FileExist(Flash zFile1) || FileExist(Flash zFile2) || FileExist(Flash zFile3) || FileExist(Flash zFile4) ) {

}

13

Re: AHK : Проверка на USB устройство.

Flash := "F:\"
If( FileExist(Flash zFile1) || FileExist(Flash zFile2) || FileExist(Flash zFile3) || FileExist(Flash zFile4) ) {
    MsgBox, Так нельзя!
    return
}

Не работает такая штука , уже как только не попробовал. Если даже файлов нету в папке , все равно ругается

14

Re: AHK : Проверка на USB устройство.

Вообще ни одного файла нету? Может, одна из переменных пустая, тогда проверен будет путь F:\, а он существует.

15 (изменено: Malcev, 2015-01-02 21:06:53)

Re: AHK : Проверка на USB устройство.

Мне нужна как бы функция , которая будет считывать все диски и выявлять из них USB - флешку и записывать ее в переменную в ввиду " F:\ " - пример

Можно так еще:

DriveGet, list, list, removable
Loop, parse, list
   MsgBox, % """ " A_LoopField ":\ """

16 (изменено: Onix, 2015-01-02 21:55:04)

Re: AHK : Проверка на USB устройство.

YMP пишет:

Вообще ни одного файла нету? Может, одна из переменных пустая, тогда проверен будет путь F:\, а он существует.

Да действительно . Я не выбирал все переменные , но тогда получается это не совсем то что мне нужно . Можно ли сделать так что бы он не проверял путь F:\  Если одна из переменных будет пуста. А только полностью весь путь ?



Malcev пишет:

Мне нужна как бы функция , которая будет считывать все диски и выявлять из них USB - флешку и записывать ее в переменную в ввиду " F:\ " - пример

Можно так еще:

DriveGet, list, list, removable
Loop, parse, list
   MsgBox, % """ " A_LoopField ":\ """

Это все равно немного не то , я хочу вставить функцию в начало скрипта , что бы если, не найдена флешка то он просто выходил из программы и писал MsgBox , а если найдена то просто записывал в переменную в таком виде :
буква:\ .
Я так понимаю с "Loop" это наверное невозможно , ну или мне знаний не хватает . Я сидел часа полтора мучался по всякому делал  через IF | ELSE пробовал )), не чего не выходило.
Если не сложно , покажите как правильно сделать , вот как я выше описал.

что бы если, не найдена флешка то он просто выходил из программы и писал MsgBox , а если найдена то просто записывал в переменную, в таком виде буква:\.

17 (изменено: Malcev, 2015-01-02 22:28:41)

Re: AHK : Проверка на USB устройство.

Можно так:

DriveGet, list, list, removable
if (list = "")
   msgbox
else
   msgbox, % var := SubStr(list, 1, 1) ":\"

Можно ли сделать так что бы он не проверял путь F:\  Если одна из переменных будет пуста. А только полностью весь путь ?

Flash := "F:\"
If FileExist(Flash zFile1) and (zFile1!="") or FileExist(Flash zFile2) and (zFile2!="")
{
    MsgBox, Так нельзя!
    return
}

18

Re: AHK : Проверка на USB устройство.

Malcev пишет:

Можно так:

DriveGet, list, list, removable
if (list = "")
   msgbox
else
   msgbox, % var := SubStr(list, 1, 1) ":\"

Можно ли сделать так что бы он не проверял путь F:\  Если одна из переменных будет пуста. А только полностью весь путь ?

Flash := "F:\"
If FileExist(Flash zFile1) and (zFile1!="") or FileExist(Flash zFile2) and (zFile2!="")
{
    MsgBox, Так нельзя!
    return
}

Спасибо ) То что надо прям .
@Malсev and @YMP - Спасибо за помощь.
Я доделал программу которую хотел воплотить в реальность!
С новым годом кстати
Думаю на этом все))