Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.18;
Скачать: CL | DM;

Вниз

КАК ПРОГАММУ НЕ ИМЕЮЩУУ ФОРМЫ, ОСТАВИТЬ РЕЗИДЕТНОЙ????   Найти похожие ветки 

 
Dimaond Cat ©   (2002-01-31 18:50) [8]

Что такое умный цикл я не знаю, на мой взгляд все циклы тупые, на то они и циклы :о), нам же нужен цикл способный не занимать все процессорное время отпущенное программе (стандартная для циклов ситуация), и такой есть, также нужно еще много чего, но обовсем этом написано ниже

program Rezident;

uses
Windows,
Messages;
//я так думаю , что резедентной программе ресурсы не нужны поэтому убираем "{$R *.RES}"

const
AppName = "Rezident"; //Это будет название нашего окна и его класса
//через него мы сможем по Findwindow найти нашу программу
//и через sendmessage посылать ей управляющие сообщения

function WndFunc(Wnd: HWND; Msg: Cardinal; wParam, lParam: integer): Cardinal; stdcall;
begin
case Msg of
WM_DESTROY: // Через Task Manager возможно нормальное завершение программы.
begin
Result := 0;
showmessage("Программа Rezident закрывается");
PostQuitMessage(0)
end;
WM_USER: // допустим через такое сообщение проходит управление программой
begin
Result := 1;
showmessage("получено сообщение");
end
// остальные сообщения пусть перевариваются стандартным обработчиком
else Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end
end;

//собственно начало программы
var
WndClassEx: TWndClassEx; // структура окна
Msg: TMsg absolute WndClassEx; // Экономим 28 байт.

begin { main }
with WndClassEx do
// Инициализируем только необходимое. Например, форма курсора для невидимого окна безразлична.равно как и сама структура окна
begin
cbSize := SizeOf(TWndClassEx);
lpfnWndProc := @WndFunc;
lpszClassName := AppName;
end;
WndClassEx.hInstance := HInstance;
// Если класс окна зарегистрирован и окно создано, то запускаем цикл выборки сообщений.
if (RegisterClassEx(WndClassEx) <> 0) and (CreateWindowEx(0, AppName, AppName, WS_OVERLAPPEDWINDOW,
0, 0, 0, 0, 0, 0, HInstance, nil) <> 0) then
while GetMessage(Msg, 0, 0, 0) do
begin
//для того чтобы твоя программа не закрывалась необходимо не дать ей
//дойти до "end." этот цикл не дает ей этого делать,
//а также позволяет управлять твоей программой с помощью сообщений
TranslateMessage(Msg);
DispatchMessage(Msg)
end

end.



а вот так примерно можно управлять "резидентом" из другой программы

procedure TForm1.Button1Click(Sender: TObject);
begin
if 0=sendmessage(findwindow("Rezident","Rezident"),wm_user,0,0) then showmessage("Программа не найдена");
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
sendmessage(findwindow("Rezident","Rezident"),wm_destroy,0,0) ;
end;


И кстати поскромнее надо быть, всякие там слышь умник и т.д. не катят



Страницы: 1 вся ветка

Текущий архив: 2002.03.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
6-57469
Ghost.
2001-12-29 09:09
2002.03.18
Сервер SOCKS4/5


14-57492
M-A-B
2002-02-01 12:14
2002.03.18
СОМ-порт


3-57339
Softmaster
2002-02-17 12:23
2002.03.18
Помощь по концепции.


1-57464
Nuce
2002-03-04 02:26
2002.03.18
PaintBox?Наболело...


1-57439
Plumbum
2002-03-03 00:27
2002.03.18
Как конвертировать компоненту из D4 в D6?