IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> перебор окон, открытых
Client
сообщение 1.07.2010 21:16
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


погуглив, получил такой код
function enumproc(wnd:hwnd; lparam:lparam):BOOL; stdcall;
var
s,ss:array [1..30] of char;
s1:string [30];
begin
GetClassName(wnd,@s,20);
GetWindowText(wnd,@ss,20);
form3.Memo1.Lines.Add(ss);
Result:=true;
end;


procedure TForm3.Button1Click(Sender: TObject);
var
wnd,wnd1,wnd2:hwnd;
s: array [1..30] of char;
begin
Memo1.Clear;
EnumWindows(@enumproc,0)
end;
Выводит очень большой список, а мне нужно только список тех окон, которые открыты. Мне надо найти окно по части имени, вот и решил перебрать все окна smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 1.07.2010 23:10
Сообщение #2


Гость






Client, вот для кого я писал, "Как не нужно писать программы"? Я ж там объяснял, что лишние операторы @ - зло, и от них надо избавляться. А ты опять делаешь "это" smile.gif А почему тебе понадобился @? Потому, что если массив начинается НЕ с нулевого элемента, а с первого, как у тебя, то его уже нельзя привести к PChar/PWideChar автоматически, и тебе приходится "затыкать компилятору рот".

И еще. Зачем в коллбек-функции ты должен обращаться к элементу формы? Не надо этого делать. Ты ж все равно не используешь второй параметр, передаешь туда 0? Так используй... Все просто:

function EnumProc(wnd: HWND; myLParam: LPARAM): BOOL; stdcall;
const
maxLen = 30;
var
s, ss: array[0 .. maxLen] of char;
begin
if IsWindowVisible(wnd) and (GetWindow(Wnd, GW_OWNER) = 0) then
begin
GetClassName(wnd, s, maxLen);
GetWindowText(wnd, ss, maxLen);
if ss <> '' then TStrings(myLParam).Add(ss);
end;
Result := true;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
Memo1.Clear;
EnumWindows(@enumproc, LPARAM(Memo1.Lines))
end;

 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 14.07.2025 6:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"