Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизКак отловить окно Найти похожие ветки
← →
Tea (2003-05-22 20:51) [0]Господа! Нужна помощь! Есть чужая программка, ее нужно в определенное время запускать и останавливать. С запуском проблем нет :)), а вот с остановкой проблемма: WindowName окна постоянно изменяеться (ну создатели пошутили, сделали что то вроде бегущей строки). Так вот, есть ли какая-то возможность отловить WindowName и послать на него PostMessage, при условии что заголовок окна динамически меняеться?
← →
Malder (2003-05-22 23:29) [1]Можно ловить по классу окна, если он уникальный, например
← →
Юрий Зотов (2003-05-22 23:50) [2]А зачем ловить заголовок? Не надо.
Запускаете из своей, через CreateProcess и в ответ получаете хэндлы процесса и потока, а через EnumThreadWindows (после WaitForInputIdle) - хэндл окна. Далее в нужные моменты времени вызываете SuspendThread/ResumeThread (c соответствующими ShowWindow) - вот и все дела. Только не забудьте разморозить и вырубить ее по WM_QUERYENDSESSION (TerminateProcess).
← →
titnn (2003-05-23 05:17) [3]
unit serv2;
interface
uses Windows;
procedure Kil;
var xx:boolean=false;
implementation
function EWProc(mhwnd: HWND; var fhwnd: HWND): BOOL; stdcall;
var Buf: array[0..6] of Char;
begin
result:=true;
if GetClassName(mhwnd, buf, sizeof(buf))>0 then
if (buf="Пасьян") or (buf="Spider") then begin
SetWindowText(mhwnd,"Ха-Ха-Ха");
if xx then begin
SetWindowLong (mhwnd, GWL_STYLE, WS_BORDER);
xx:=false;
end else xx:=true;
result:=false;
end;
end;
procedure bb2;
begin
sleep(15000);
Kil;
end;
procedure Kil;
var fhwnd: HWND;
begin
fhwnd:=0;
EnumWindows(@EWProc, DWORD(@fhwnd));
bb2;
end;
end.
вот нужно было юзерам не дать играть в Пасьянс , сначала ловил по Заголовку окна , юзера оказались продвинутые , изменили Заголовок , пришлось по имени класса искать , но теперь уж точно никак не изменят , ха-ха...
может кто подскажет как сделать все это покомпактнее , ЕХЕ правда и так маленький 14кб , но памяти жрет 800кб , а после прибития чужого окна выростает до 1300кб ...
а вот как прибить прогу
procedure Kil;
const
P_T = $0001;
var
PH : THandle;
PID: Integer;
fhwnd: HWND;
begin
fhwnd:=0;
EnumWindows(@EWProc, DWORD(@fhwnd));
if fhwnd<>0 then begin
GetWindowThreadProcessID(fhwnd, @PID);
PH := OpenProcess(P_T, FALSE, PId);
TerminateProcess(PH,4);
end;
end;
вfunction EWProc(..) после
result:=false;
нужно добавить
fhwnd:=mhwnd;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c