AkulaBig писал(а):Посмотрите, не может-ли он нам быть полезным:
Такие скрипты за пределами моих возможностей, но одно мне не понятно: зачем нужен данный скрипт, если AkelPad и без него нормально детектит кодировки? Да, возможно, не все, но с русскими он неплохо справляется, а другого мне не нужно. Как говорил Остап Бендер "Другие кодировки мне тоже интересны, но меньше" )
Ждать чуда от детекта UTF-16, видимо, не стоит. Парав был
CaptainFlint Если бы это было так просто, рабочие решения давно бы уже лежали на поверхности. Одлнако даже у
uchardet с UTF-16 есть проблемы.
И все же AkelPad его как-то детектит. Чтобы в этом убедиться, достаточно просто сохранить любой русский текст в блокноте как UTF-16 BE и убрать маркер бом из полученного файла. AkelPad нормально откроет это файл и внизу напишет
(UTF-16 BE) без BOM.
Loopback писал(а): Придется как-то так писать DllCall("SetWindowLong" & (auX64 ? "PtrA" : "A"), ...)
Да, так работает. Я уже понял, что нужно глубже курить WinAPI, но как и известно, курение - это яд ) Дело это интересное и увлекательное, но, к сожалению, трудоемкое и времязатратное. Но раз уж Autorun даёт такую возможность, нужно уметь ей пользоваться, особенно если это помогает добиться нужного результата. Вот еще пример использования:
[cut]
Код: Выделить всё
RegisterCommand 60026 "TaskDialog"
Func TaskDialog()
Local hRes, bn
hRes = DllCall("TaskDialog", _
"hwnd", AUTORUN_TCHANDLE, _
"handle", 0, _
"wstr", "Auto", _
"wstr", "Task", _
"wstr", "Content", _
"dword", 15, _
"ptr", 65535, _
"int*", @bn, _
"hresult")
MsgBox(bn)
EndFunc
[/cut]
Это очень простенький вариант, а вот посложнее:
[cut]
Код: Выделить всё
RegisterCommand 60027 "TaskDialogIndirect"
Func TaskDialogIndirect()
Local hRes, bn
Local buf = Buffer(96)
Local sTitle = "Title"
Local sInstr = "Instruction"
Local sContn = "Content"
Local sExpand = "Expanded text"
Local sFooter = "Autorun " & FileGetVersion(AUTORUN_PATH & "\Autorun.wdx", "FileVersion")
Local ttl = Buffer(StrLen(sTitle)*2+2), _
ins = Buffer(StrLen(sInstr)*2+2), _
con = Buffer(StrLen(sContn)*2+2), _
exp = Buffer(StrLen(sExpand)*2+2), _
ftr = Buffer(StrLen(sFooter)*2+2)
ttl.SetStr(sTitle & Chr(0))
ins.SetStr(sInstr & Chr(0))
con.SetStr(sContn & Chr(0))
exp.SetStr(sExpand & Chr(0))
ftr.SetStr(sFooter & Chr(0))
buf.Zero()
buf.SetNum(0, "uint", buf.size, _
"hwnd", AUTORUN_TCHANDLE, _
"handle", 0, _
"dword", 0x0408, _
"dword", 21, _
"ptr", ttl.ptr, _
"ptr", 65535, _
"ptr", ins.ptr, _
"ptr", con.ptr, _
"uint", 0, _
"ptr", 0, _
"int", 0, _
"uint", 0, _
"ptr", 0, _
"int", 0, _
"ptr", 0, _
"ptr", exp.ptr, _
"ptr", 0, _
"ptr", 0, _
"ptr", 65533, _
"ptr", ftr.ptr, _
"ptr", 0, _
"long_ptr", 0, _
"uint", 0)
RunThread ProgressMove
hRes = DllCall("TaskDialogIndirect", _
"ptr", buf.ptr, _
"int*", @bn, _
"int*", 0, _
"bool*", 0)
MsgBox(bn)
EndFunc
Func ProgressMove()
While 1
Local hWnd = WinFind(0, "#32770")
If hWnd > 0 Then SendMessage(hWnd, 1131, 1, 0)
Sleep(1500)
Wend
EndFunc
[/cut]
Подробнее:
https://learn.microsoft.com/en-us/windo ... s-overview
Loopback, может сделать в Autorun вызов такого диалога в дополнение к стандартному MsgBox? Тут и прогресс-бар имеется, и другие плюшки.