Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.039 c
2-1170070648
rosl
2007-01-29 14:37
2007.02.18
следующий номер автоинкриментного поля


15-1168099871
Алексей С.
2007-01-06 19:11
2007.02.18
Алгоритм проведения соревнования по олимпийскаой системе.


9-1143825829
Yegorchic
2006-03-31 21:23
2007.02.18
Поворот FreeForm


15-1169661034
AntiUser
2007-01-24 20:50
2007.02.18
Интересные новости (ИМХО)


6-1158228046
KyRo
2006-09-14 14:00
2007.02.18
Тайм аут индифтп клиента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский