Может в будущем можно написать статью, но сейчас столкнулся с тем что часто мои инструменты не работают с не сохранёнными файлами. Понятно что если нет пути, то как к нему дать доступ. Потом выяснилось что %TEMPFILE, но проблема, что для сохранённого кода нужен %FILE. Но я вспомнил что инструмент HeX0R в ком-строке имел две переменные %FILE %TEMPFILE. И вот тут до меня дошло, что если первое пустое, то берётся второе. Но опять проблема, переменные должны быть в кавычках "%FILE" "%TEMPFILE" и тогда первый получаем пустые кавычки "", а второй путь, получается засада в том, что надо параметр пустые кавычки игнорировать. В общем удалось прийти к решению.
Count = CountProgramParameters() For i = 1 To Count tmp$ = ProgramParameter() If Asc(tmp$) And FileSize(tmp$) > 3 And Left(GetExtensionPart(tmp$), 2) = "pb" Break EndIf Next
Здесь пустые ковычки пропускаем, проверяем что файл существует, проверяем что расширение слева начинается с "pb", а значит также захватит pbi и pbf. Как только получили путь то выпрыгиваем не проверяя дальше. То есть если с "%FILE" взяли путь то выпрыгиваем не проверяя "%TEMPFILE".
А теперь с флагом
Count = CountProgramParameters() For i = 1 To Count tmp$ = ProgramParameter() If Not flag And IsDigital(@tmp$) flag = Val(tmp$) EndIf If Asc(tmp$) And FileSize(tmp$) > 3 And Left(GetExtensionPart(tmp$), 2) = "pb" And Not Asc(InputFile$) InputFile$ = tmp$ If flag Break EndIf EndIf Next
Здесь также флаг и путь берутся один раз, не важно в какой последовательности они стоят. Проверка IsDigital() проверяет что флаг это число, работает быстро, так как путь начинается с буквы. Также игнор пустой строки "". Условие пути проверяет что если путь уже есть, то идем дальше. Как оба получены, то выпрыг, либо флаг остаётся 0.
В общем для Windows обновил 6 инструментов добавив вот этот функционал.
И вот тут я наверно ещё раз ошибся. Винда вроде как обрезает пустые кавычки, поэтому путь в кавычках возвращается без кавычек, а значит пустые кавычки возвращаются без кавычек, просто ничего.
Count = CountProgramParameters() For i = 1 To Count tmp$ = ProgramParameter() If Not flag And IsDigital(@tmp$) flag = Val(tmp$) EndIf If Not Continue EndIf If Not Asc(InputFile$) And Asc(tmp$) And FileSize(tmp$) > 3 And Left(GetExtensionPart(tmp$), 2) = "pb" InputFile$ = tmp$ If flag Break EndIf EndIf Next
Добавил проверку пустоты tmp$, переместил проверку пустоты InputFile$ в начало, так как она работает быстрей без обращения к hdd
Отредактировано AZJIO (08.03.2025 15:22:08)