Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизКак подсчитать количество открытых окон? Найти похожие ветки
← →
Mozgan (2007-01-27 20:20) [0]Помогите пожалуйста, как можно подсчитать количество открытых (запущенных) окон класса IEFrame? Точнее сколько на данный момент открыто окон Internet Explorer?
← →
FAskerQ © (2007-01-27 20:37) [1]Можно таким вот убогим способом
var
Wnd: hWnd;
buff: array[0..MAX_PATH] of Char;
i: integer;
begin
i:= 0;
Wnd := GetWindow(Handle, GW_HWNDFIRST);
while Wnd <> 0 do
begin
if IsWindowVisible(Wnd) then
begin
GetClassName(Wnd, buff, SizeOf(buff));
if buff = "IEFrame" then
i:= i + 1;
end;
Wnd := GetWindow(Wnd, GW_HWNDNEXT);
end;
Caption:= IntToStr(i);
← →
Mozgan (2007-01-27 20:41) [2]Друг мой!
1000 и 1000 благодарности тебе! Спасибо тебе большое, я над этой темой бился несколько дней, но ничего толком не выходило. Всегада только одно окно...
Ещё раз спасибо! Щас буду изучать код!
← →
Mozgan (2007-01-27 21:02) [3]Уважаемый FAskerQ!
Спасибо за пример, теперь ясно как определять и посчитывать.
Но возник ещё од ин вопрос. Как я могу закрыть эти (открытые) окна?
Вот кусок, который хочу использовать:
windows.PostMessage(findwindow("IEFrame",nil),wm_close,0,0);
← →
Mozgan (2007-01-27 21:52) [4]Я конечно извиняюсь за повторы, но не могли бы вы подсказать как можно закрыть все-таки все открытые окна?
← →
antonn © (2007-01-27 23:18) [5]вот функция, принудительно закрывает все окна - устоять не возможно :)
function CloseAllWindow(RParam: Longword): Boolean;
var TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then begin
tpResult := LookupPrivilegeValue(nil,SE_SHUTDOWN_NAME,TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,False,TTokenPvg, cbtpPrevious,rTTokenPvg,pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RParam, 0);
end;
пример использования CloseAllWindow(EWX_POWEROFF or EWX_FORCE)
← →
FAskerQ © (2007-01-28 00:47) [6]
> antonn © (27.01.07 23:18) [5]
Жестокий вы человек однако
> Mozgan (27.01.07 21:02) [3]
Можно таким вот убогим способомvar
Wnd: hWnd;
buff: array[0..MAX_PATH] of Char;
lpdwProcessId: DWORD;
PrHandle: THandle;
begin
Wnd := GetWindow(Handle, GW_HWNDFIRST);
while Wnd <> 0 do
begin
if IsWindowVisible(Wnd) then
begin
GetClassName(Wnd, buff, SizeOf(buff));
if buff = "IEFrame" then
begin
GetWindowThreadProcessId(Wnd, lpdwProcessId);
PrHandle:= OpenProcess(PROCESS_TERMINATE, false, lpdwProcessId);
TerminateProcess(PrHandle, 0);
end;
end;
Wnd := GetWindow(Wnd, GW_HWNDNEXT);
end;
← →
Mozgan (2007-01-28 20:04) [7]FAskerQ!
Огоромное спасибо за помощь и наглядный пример, он помог ПРАВИЛЬНО исвоить материал. И самостоятельно решить ряд задач, которые придумал сам!
Ещё раз спасибо!
antonn! Тебе тоже большое спасибо! Не обижайса, ты не жестокий человек, просто твой вариант для меня был чуть-чуть трудоемок для понимания. Начинающий же. Спасибо!
← →
$P|@Sh (2007-01-28 21:02) [8]Mozgan, ты прям сама вежливость :-DDDDDD
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c