|
Цитата: |
|
|
|
|
|
|
|
|
|
И ещё попутно,
Если последняя цифра "0" отвечает за передачу параметра анимации, то для чего первая цифра ( и это тоже "0" )?
|
|
|
|
|
|
Это не попутно, а главный камень предкновений.
Именно через PostMessage оригинальный SI и запускает новый инишник. Но вместо нуля в оригинале всегда задается указатель на строку нового инишника, который SI читает через NewIni=. Указатель - это 4-байтное число, равное адресу ОЗУ по которому располагается строка в оперативке.
Всё дело в том, что указатель должен ссылаться на строку которая должна быть внутри адресного пространства SI (внутри кода либо внутри занятой её оперативки). То есть если переменная со строкой находится в скрипте или каком-то другом экзешнике, то передав SI указатель на эту переменную ничего не получится. У Si нет прав внедриться в чужой процесс чтоб прочитать переменную из чужого адресного пространства.
Кроме того, в скрипте
невозможно создать указатель на переменную. Ну не работает мортскрипт с указателями.
Вот из-за этих 2 ограничений можно сразу забыть о передаче произвольного инишника из скрипта.
Самый простой способ сказать SI чтоб она прочитала новый инишник - это поправить её старый инишник и заставить перечитать его с помощью
Код:
PostMessage("имя окна", HexToNumber("8001"), 0, 0 )
Раньше даже так делать было нельзя, то есть в 3 параметре передавать ноль вместо указателя. Это я подправил код SI и теперь она увидев 0 заменяет 0 на указатель старого инишника. Кстати имя старого инишника она не хранила, поэтому попутно пришлось заставить SI хранить имя текущего инишника в оперативе.