Вверх ↑
Этот топик читают: Гость
Ответов: 86
Рейтинг: 1
#16: 2009-11-26 13:14:13 ЛС | профиль | цитата
Переименовываем exe в scr, копируем в c:windowssystem32
Выбираем заставку, она запускается, в нижнем окошке вписываем полученный хэндл, нажимаем пимпу.

code_15815.txt
------------ Дoбавленo в 05.05:
------------ Дoбавленo в 06.43:
Еще непонятка: каким образом закрывается заставка, при выборе другой заставки?
Известно, что процесс заставки запущен пока открыто окно "Свойства: Экран" вкладка "Заставка" и выбрана какая-либо заставка.
Так вот, кто закрывает заставку при выборе иной заставке или закрытии окна свойств?
И вообще, как передать команду уже запущенному процессу? Сдается мне что это компонент "Посылка сообщений окну", но как он работает не знаю.
Помогите, кто знает.
карма: 1

0
файлы: 1code_15815.txt [860B] [124]
Гость
Ответов: 17029
Рейтинг: 0
#17: 2009-11-27 09:21:33 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2025-01-17 15:25:24
карма: 0

0
Разработчик
Ответов: 4698
Рейтинг: 426
#18: 2009-11-27 09:24:00 ЛС | профиль | цитата
И правильно что лепится, это такая функция форума для удобства
карма: 10
0
Ответов: 2125
Рейтинг: 159
#19: 2009-11-27 11:23:30 ЛС | профиль | цитата
SanSey писал(а):
Так вот, кто закрывает заставку при выборе иной заставке или закрытии окна свойств?

Как кто? Тот, кто запускал
Уже запущенному процессу ничего не передаётся, он просто убивается, и создаётся новый.
карма: 1

0
Ответов: 86
Рейтинг: 1
#20: 2009-11-27 12:34:34 ЛС | профиль | цитата
tsdima, в том-то и дело, что убиваются заставки из комплекта винды, а вот моя - не убивается.
Вот и непонятно, может внутри надо организовать какой-нибудь обработчик внешних (или еще каких-то) команд.
карма: 1

0
Ответов: 2125
Рейтинг: 159
#21: 2009-11-27 13:34:46 ЛС | профиль | цитата
Все заставки из комплекта винды закрываются сами, если по ним мышкой поелозить, или клавишу нажать. Подозреваю, что окно свойств посылает окну заставки сообщение о нажатии клавиши (хотя может и мышь эмулирует).
------------ Дoбавленo в 13.47:
Не блин, там всё гораздо запутаннее
Скринсейвер создаёт своё окно как дочернее, по отношению к маленькому окну preview. А когда нужно убить этот процесс, окно свойств просто посылает ему (возможно, всем дочерним окнам мониторчика) WM_CLOSE.
Вобщем, с нашим КОЛом не получится отловить. Хотя можно в InlineCode создавать окно, и следить за тем, пока его не прикроют.
карма: 1

0
Главный модератор
Ответов: 3000
Рейтинг: 396
#22: 2009-11-27 14:16:37 ЛС | профиль | цитата
http://hiasm.com/forum.html?q=3&p=91048#p91048
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 2125
Рейтинг: 159
#23: 2009-11-27 14:39:29 ЛС | профиль | цитата
Может вот это поможет:

Add(MainForm,2953706,77,119)
{
Left=10
Top=10
Width=70
Height=70
BorderStyle=0
TaskBar=1
Point(onMouseMove)
Point(Handle)
link(onCreate,5453874:doRead,[])
link(onMouseMove,2953706:doClose,[(123,146)(123,106)(65,106)(65,146)])
}
Add(InlineCode,11939531,224,133)
{
WorkPoints=#6:doInit|
DataPoints=#8:MyHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|9: public|22: MyHandle:THI_Event;|44: procedure doInit(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.doInit;|5:begin|54: SetParent(ReadInteger(dt,MyHandle,0),ToInteger(dt));|4:end;|0:|4:end.|
link(MyHandle,2953706:Handle,[(230,121)(146,121)(146,163)(83,163)])
}
Add(Application,16631368,161,63)
{
}
Add(ArrayRW,5453874,168,133)
{
Index=Integer(1)
link(onRead,11939531:doInit,[])
link(Array,16631368:Params,[])
}
Только почему-то при смене заставки не реагирует на WM_CLOSE, пока на другое окно не переключишься. Но это загадка, зарытая глубоко в КОЛе

------------ Дoбавленo в 14.41:
Кстати, в preview, по идее, на мышь реагировать не должна, только на WM_CLOSE.
------------ Дoбавленo в 14.44:
Кстати, может добавить в WinTools точку doSetParent, чтобы вышеприведённый пример без IC делать?
карма: 1

0
23
Сообщение
...
Прикрепленные файлы
(файлы не залиты)