> По-моему, здесь надо добавить что-то типа: > > push bp > mov bp, sp > > > push 1 > > push 0 > > call RegisterServiceProcess; > > pop bp Че-то я не понял смысла bp в стек, в bp загоняем sp, а затем его затираем тем, что в стеке?
Кстати, спрятать надо так, чтоб по Ctrl-Alt-Del не было видно. Просто спрятать не проблема...
Когда Hide вызывается из обработчика TForm1.Button1Click - все прячется прекрасно и нигде ничего не видно. Но когда пытаюсь вызвать Hide из другого места - ниче не получается:-(((((((
Хелп!
А зачем тебе ассемблер?29.03.03 23:18 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 29.03.03 23:19 Количество правок: 1
procedure totalhide;
var rsp:function(pid:dword;dwtype:dword):dword;stdcall;
begin
rsp:=getprocaddress(getmodulehandle('kernel32.dll'),'RegisterServiceProcess');
if @rsp<>nil then rsp(0,1);
end;
[Pascal] Не могу спрятать28.03.03 17:22 Автор: Sandy <Alexander Stepanov> Статус: Elderman
> end; > > Когда Hide вызывается из обработчика TForm1.Button1Click - > все прячется прекрасно и нигде ничего не видно. Но когда > пытаюсь вызвать Hide из другого места - ниче не > получается:-((((((( > Хелп!
[Pascal] Не могу спрятать28.03.03 19:34 Автор: Fighter <Vladimir> Статус: Elderman
> По-моему, здесь надо добавить что-то типа: > > push bp > mov bp, sp > > > push 1 > > push 0 > > call RegisterServiceProcess; > > pop bp Че-то я не понял смысла bp в стек, в bp загоняем sp, а затем его затираем тем, что в стеке?
Кстати, спрятать надо так, чтоб по Ctrl-Alt-Del не было видно. Просто спрятать не проблема...
[Pascal] Не могу спрятать29.03.03 19:55 Автор: dead Статус: Незарегистрированный пользователь
> Че-то я не понял смысла bp в стек, в bp загоняем sp, а > затем его затираем тем, что в стеке?
Посмотри ассемблерный код, который генерируется компилятором, когда ты вызываешь процедуру Hide из обработчика OnClick и сравни с тем, который генерируется, когда ты вызываешь эту же процедуру из другого места.
[Pascal] Всё нормально. И действительно, ассемблер тут не нужен ;-)30.03.03 09:34 Автор: HandleX <Александр М.> Статус: The Elderman
В событии OnCreate формы вызывать hide не получится, не работает это... Я запускал в OnCreate новый поток, там дожидался WaitForInputIdle(), и только тогда делал Hide. Хотя можно и в OnPaint, но это как-то некрасиво ;-)
У меня какая фигня тут30.03.03 16:10 Автор: Fighter <Vladimir> Статус: Elderman
Все прячется прекрасно, но по ctrl-alt-del программа видна, даже после того, как я регистрирую ее как процесс. Не видна только в том случае если Hide (сорс см. раньше) вызывается из обработчика OnButtonClick. А мне надо, чтоб пряталось само, при запуске. :((((((
Ну вот в файл проекта и пишешь тот код что я выше привел.30.03.03 17:15 Автор: Killer{R} <Dmitry> Статус: Elderman
А еще можешь в сунуть вызов процедуры прятания в OnCreate, тольконе_вызывайHide() формы. Назови свою процедуру по другому (надеюсь умеешь добавлять процедуры иначе как определением событий объектов).
Когда попробовал запустить программулину на другой машине (все тоже, только там Делфи нет), то все спряталось отлично! 8). Может Делфи не дает спрятаться до конца? На моей маши ничего не помогает.
2 Killer{R}. Не совсем понял вопрос:
> А еще можешь в сунуть вызов процедуры прятания в OnCreate, > тольконе_вызывайHide() формы. Назови свою процедуру по > другому (надеюсь умеешь добавлять процедуры иначе как > определением событий объектов).
Re: Интересная штука31.03.03 16:50 Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 31.03.03 16:52 Количество правок: 2
- советую не пользоваться ассемблером, если можно без него обойтись. В приведенном кусочке наверное еще стоит сохранить/восстановить EBX;
- если не ошибаюсь, то процесс который находится под отладкой другого процесса не всегда можно сделать сервисом. Поэтому наверное у тебя из-под delphi это не работает;
- и еще, кажется RegisterServiceProcess требует чтобы очереди сообщений были пусты;