Показать сообщение отдельно
Старый 24.04.2014, 11:07   #35
_SIL_
Старичок
 
Аватар для _SIL_
Доп. информация
По умолчанию

Цитата:
Сообщение от Norm Посмотреть сообщение
И ещё попутно,
Если последняя цифра "0" отвечает за передачу параметра анимации, то для чего первая цифра ( и это тоже "0" )?

Это не попутно, а главный камень предкновений.
Именно через PostMessage оригинальный SI и запускает новый инишник. Но вместо нуля в оригинале всегда задается указатель на строку нового инишника, который SI читает через NewIni=. Указатель - это 4-байтное число, равное адресу ОЗУ по которому располагается строка в оперативке.

Всё дело в том, что указатель должен ссылаться на строку которая должна быть внутри адресного пространства SI (внутри кода либо внутри занятой её оперативки). То есть если переменная со строкой находится в скрипте или каком-то другом экзешнике, то передав SI указатель на эту переменную ничего не получится. У Si нет прав внедриться в чужой процесс чтоб прочитать переменную из чужого адресного пространства.

Кроме того, в скрипте невозможно создать указатель на переменную. Ну не работает мортскрипт с указателями.

Вот из-за этих 2 ограничений можно сразу забыть о передаче произвольного инишника из скрипта.


Самый простой способ сказать SI чтоб она прочитала новый инишник - это поправить её старый инишник и заставить перечитать его с помощью
Код:
PostMessage("имя окна", HexToNumber("8001"), 0, 0 )
Раньше даже так делать было нельзя, то есть в 3 параметре передавать ноль вместо указателя. Это я подправил код SI и теперь она увидев 0 заменяет 0 на указатель старого инишника. Кстати имя старого инишника она не хранила, поэтому попутно пришлось заставить SI хранить имя текущего инишника в оперативе.
_SIL_ вне форума  
2 пользователя(ей) сказали cпасибо:
 
Время генерации страницы 0.03032 секунды с 11 запросами