Главная страница
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.01 c
1-57446
softland
2002-03-02 12:38
2002.03.18
Работа с TShellListView


4-57557
BigFoot
2002-01-19 10:04
2002.03.18
NetUserAdd and NetUserSetInfo


1-57344
snoup
2002-03-04 12:41
2002.03.18
мне для чата надо что бы были смайлики их я хочу выразить ввиде TImage затем когда ты кликаешь на TImage её картинка переходит с твоим сообщением в TRichEdit как это сделать


1-57432
phenix
2002-03-03 12:44
2002.03.18
по существу (delphi 6)


7-57537
Serg!
2001-12-13 14:20
2002.03.18
Подскажите плз каким образом можно узнать кол-во процессоров на компе и их загрузку