Orion9

|
Posted: Fri May 08, 2026 00:31 Post subject: |
|
|
AkulaBig
Как-то я забыл, что есть вариант с DllCall. Можно заменить ShellExec на
| Code: | DllCall("kernel32.dll\DeleteFileW", "Wstr", gExifOut) |
И вот так, кажись, лучше стало. Но "дичь" все-равно творится. Думаю, есть какая-то глубокая проблема в самом Autorun. Как-то он неповоротливо работает с наборами колонок. Не зря вы писали, что WinScriptAdv может дать ему фору. Скорее всего без пояснений от автора не обойтись.
Можно еще попробовать писать в файл через DllCall вместо объекта BinaryFile. Есть у меня подозрения, что этот объект тоже медленно разворачивается. Изначально хотел через FileWrite делать, но оказалось, что эта функция не может записать в файл аргументов (gExifArgs) из-за ошибки доступа, поэтому и пришлось использовать BinaryFile с опцией "a". Еще одна проблема Loopback на заметку. Но ведь можно и через DllCall попробовать, ничто вроде не мешает. Правда придется с параметрами разбираться, чтобы не словить ту же ошибку, что и FileWrite. Пример с такой записью у меня остался, но его придется адаптировать, наверное
 Hidden text | Code: | Func WriteTest()
Local GENERIC_WRITE = 0x40000000, CREATE_ALWAYS = 2, FILE_ATTRIBUTE_NORMAL = 128
Local bytes = 0
Local out = "текст для записи"
Local hFile, nBytes = StrLen(out)
hFile = DllCall("CreateFileW", _
"wstr", file, _
"dword", GENERIC_WRITE, _
"dword", 0, _
"ptr", 0, _
"dword", CREATE_ALWAYS, _
"dword", FILE_ATTRIBUTE_NORMAL, _
"ptr", 0, "handle")
DllCall("WriteFile", "handle", hFile, 'str', out, 'dword', nBytes, "dword*", @bytes, 'ptr', 0)
DllCall("CloseHandle", "handle", hFile)
EndFunc |
Возможно, это поднимет скорость, но мне кажется, если делать всерьез, то лучше, наверное, через WinScriptAdv - Autorun пока не показывает надежности.
| AkulaBig wrote: | | Файл очищается с помощью команды break. Не знал о таком ее применении. |
Тоже не знал. Может просто болванится? Я не проверял )
| AkulaBig wrote: | | Интересно, чтобы -execute сработало файл именно удалять нужно? А может достаточно изменения? |
Да можно, конечно. Просто удаление файла гарантирует, что в новом файле будут актуальные данные. Если не удалять, где гарантии, что все будет записываться правильно. Это нужно как-то проверять. |
|