Может в будущем можно написать статью, но сейчас столкнулся с тем что часто мои инструменты не работают с не сохранёнными файлами. Понятно что если нет пути, то как к нему дать доступ. Потом выяснилось что %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)