Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
7-57539
Monk
2001-12-17 21:28
2002.03.18
Ультразвук и микрофон!


1-57398
Alex
2002-03-01 20:21
2002.03.18
Dll


3-57322
Malder
2002-02-17 18:50
2002.03.18
Управление доступом к базе данных InterBase


4-57575
md_test
2002-01-18 11:35
2002.03.18
WindowFromPoint возвращает handle на елемент окна (label, panel), а как узнать handle самого окна, на котором лежит етот елемент


1-57352
xpyctuk
2002-03-04 15:22
2002.03.18
ISAPI приложение - WebModule, Свойства Request and Response





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский