Форум: "Система";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Внизкак отловить собщение завершения работы windows? Найти похожие ветки
← →
_mandrake_ (2003-06-19 15:45) [0]Есть консольная програма которая висит в памяти и закрывает окно если оно содержит запрещенный заголовок (например - "Косынка"). Как ее закрыть по окончанию сеанса windows, а то форточки виснут.
← →
DVM (2003-06-19 15:49) [1]Консольным приложениям сообщения не посылаются. Сообщения посылаются окнам.
← →
_mandrake_ (2003-06-19 15:59) [2]Очень рад.
Как лечить то?
← →
DVM (2003-06-19 16:02) [3]Я встречал как сделать, сам не помню. В сборнике "Советы от Валентина Озерова" есть ответ на Ваш вопрос.
← →
MacroDenS (2003-06-19 16:08) [4]попробуй так:
var
h:HWND;
begin
h:=FindWindow(nil, "Косынка");
SendMessage(h, wm_close,0,0);
end;
← →
_mandrake_ (2003-06-19 16:14) [5]Извините если не ясно выразился но косынку програма закрывает. Проблема в том как закрыть мою програму (которая закрывает косынку ;-) если пользователь решил закрыть windows?
← →
MacroDenS (2003-06-19 16:26) [6]Я так понял, ты написал прогу, которая косит касынку и все что пожелаешь, но ввиду того, что любопытный юзверь может нажать CTRL+ALT+DEL и в списке запущенных программ найти и обезвредить твой хуч, ты поставил ему обработку OnClose-> Action:=caNone;
и сообветственно при стандартной выгрузке винды, она не может закрыть твой хуч и висит. Так?
Тады, тебе просто нужно найти здесь на сайте одну темку про CTRL+ALT+DEL, в которой расписывается как убирать свою прогу из списка. Если время есть, то завтра могу скинуть (седня уже времени нет в своих архивах копаться).
Но есть один маленький трабл, в 95/98 все будет ОК, но в 2000 и выше твою прогу по процессам можно выцепить и закрыть....
← →
jel (2003-06-19 17:08) [7]Сдается мне что без окна, пусть даже невидимого удачи в этом деле не видать. Или оформи свою закрывашку в виде сервиса.
← →
jel (2003-06-19 17:15) [8]И в догонку - если нужно разрешить рапуск только определенных программ - то Windows это умеет и ничего придумывать не надо.
Подробности например тут - http://www.coast.ru/utils/faq/winnt/746.html
← →
_mandrake_ (2003-06-19 17:53) [9]to MacrodenS : почти так но окон у меня нету (по ctrl-alt-del и так не видно) вот вся прога -
program comctl32;
uses
SysUtils,
Windows, Messages;
var Form1: TForm;
function SomeFunc(Handle: HWND; Info: Pointer): BOOL; stdcall;
var
Text: array [0..256] of Char;
begin
GetWindowText(handle, text, 200);
if (Text <> "") then
begin
if Pos("Косынка",StrPas(Text)) > 0 then
SendMessage(handle,WM_Close,0,0);
end;
Result:= True;
end;
begin
While true do
begin
sleep (10000);
EnumWindows(@somefunc,0);
( или любой другой, разрешенный к запуску)to MacrodenS : почти так но окон у меня нету (по ctrl-alt-del и так не видно) вот вся прога -
program comctl32;
uses
SysUtils,
Windows, Messages;
var Form1: TForm;
function SomeFunc(Handle: HWND; Info: Pointer): BOOL; stdcall;
var
Text: array [0..256] of Char;
begin
GetWindowText(handle, text, 200);
if (Text <> "") then
begin
if Pos("Косынка",StrPas(Text)) > 0 then
SendMessage(handle,WM_Close,0,0);
end;
Result:= True;
end;
begin
While true do
begin
sleep (10000);
EnumWindows(@somefunc,0);
end;
end.
to jel : "Следует учитывать, что ничто не мешает пользователям переименовать любой *.exe файл в winword.exe (или любой другой, разрешенный к запуску) и обойти это ограничение."
а юзверя у меня злосные...
← →
VMcL (2003-06-19 19:04) [10]>_mandrake_ (19.06.03 17:53)
Перепиши цикл While так, чтобы он обрабатывал сообщения (для ознакомления посмотри TApplication.ProcessMessages+ProcessMessage) и лови сообщение о завершении работы ВыньДы.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c