![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Client |
![]()
Сообщение
#1
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
погуглив, получил такой код
function enumproc(wnd:hwnd; lparam:lparam):BOOL; stdcall;Выводит очень большой список, а мне нужно только список тех окон, которые открыты. Мне надо найти окно по части имени, вот и решил перебрать все окна ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
IsWindowVisible в помощь ...
|
Client |
![]()
Сообщение
#3
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
спасибо, все работает
![]() ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Можно еще отсечь все дочерние окна, будет еще лучше работать:
if IsWindowVisible(wnd) and (GetWindow(wnd, GW_OWNER) = 0) then |
Client |
![]()
Сообщение
#5
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
выводит всего лишь одно "лишнее" окно Program Manager (а что это за окно?)
еще раз спасибо, все получилось ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Client, вот для кого я писал, "Как не нужно писать программы"? Я ж там объяснял, что лишние операторы @ - зло, и от них надо избавляться. А ты опять делаешь "это"
![]() И еще. Зачем в коллбек-функции ты должен обращаться к элементу формы? Не надо этого делать. Ты ж все равно не используешь второй параметр, передаешь туда 0? Так используй... Все просто: function EnumProc(wnd: HWND; myLParam: LPARAM): BOOL; stdcall; |
Client |
![]()
Сообщение
#7
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата что лишние операторы @ Помню, что это как поинтер и с ним компилятор успакаивается ![]() Про "чудо-параметр". тип LParam вроде тот же Integer. Но через него передается целый массив строк ![]() Это указатель что-ли? по описанию Цитата Устанавливает 32-разрядное, определяемое программой значение, которое будет передано в функцию повторного вызова. Прям уличная магия ![]() Спасибо за помощь и объяснения! Сообщение отредактировано: Client - 2.07.2010 16:22 |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата LParam вроде тот же Integer. Но через него передается целый массив строк Стоп, стоп, стоп. Во-первых, не массив строк, а TStrings, то есть дельфийский класс. То есть, указатель на него. Который имеет ту же длину, что и LPARAM. Так что никакой магии - только ловкость рук ![]() Во вторых: Цитата А про массив и PChar даже не знал, как увидел такой пример, так и делал по-нему. А к первоисточнику обратиться не пробовал? Вот описание функции MSDN -> GetClassName. Что видим?Цитата int WINAPI GetClassName( ![]() ![]() |
Client |
![]()
Сообщение
#9
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
про массивы это я преувеличил маленька..
![]() Цитата Так что никакой магии - только ловкость рук т.е. можно передать указатель хоть на что?Цитата LPTSTR видел? Увидел. только мало о чем говорило ![]() И что значат __out и __in в описании? это же СИ -шное описание, т.е. это зарезервированые слова? или только для информативности? Цитата Опять магия? Определенно магия, только вот какая - черная или нет... ![]() ![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата т.е. можно передать указатель хоть на что? Угу. По крайней мере на любой класс VCL и RTL.Цитата а зачем столько "типов" LPSTR, LPCSTR, LPTSTR и еще много )) А затем, что они все обозначают разные вещи. По крайней мере в С (что ни говори, а WinAPI изначально пишется под С, так что надо пользоваться теми типами, которые пришли оттуда). Я не просто так всегда говорю: пользуйтесь правильными типами переменных, а не просто подходящими. Сегодня WPARAM - это Integer, завтра положение может поменяться.В частности, LPSTR - указатель на строку LPCSTR - константный указатель на строку LPTSTR - указатель на массив TCHAR-ов LPCTSTR - константный указатель на массив TCHAR-ов В зависимости от того, Юникодный или нет проект - все 4 типа могут быть различными... Цитата И что значат __out и __in в описании? это же СИ -шное описание, т.е. это зарезервированые слова? или только для информативности? Без понятия, я не пользуюсь Microsoft-овскими компиляторами, а для себя сделал очень просто:#define __inт.е., ассоциировать __in, __out и еще несколько таких параметров с пустотой, чтоб не выдавало ошибок при компиляции, так что теперь у меня "бесплатный" довесок, показывающий, входной это параметр функции, или выходной... ![]() |
Client |
![]()
Сообщение
#11
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата Угу. По крайней мере на любой класс VCL и RTL. ПонятноЦитата По крайней мере в С Подозревал, что так и есть ![]() Цитата а для себя сделал очень просто хитро, хитро ![]() |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Мне, кстати, проще. Меня Ада приучила к точному описанию типов - никаких отступлений, никаких авто-преобразований. Вот, смотри:
1) попробуем написать CallBack-функцию, используя не нужные типы, а замену: ![]() Что видим? Не получилось обмануть компилятор, это не тот прототип, программа компилироваться отказалась. 2) Чуть-чуть поправим программу, сделаем правильный прототип, но вызовем EnumWindows как процедуру, без обработки возвращаемого значения: ![]() Что? Опять не то, "Нельзя использовать функцию EnumWindows как процедуру" 3) Ну хорошо, уговорили, пускай она возвращает результат... ![]() Вот теперь все в порядке, откомпилировано... Вот так и привыкаешь аккуратно использовать типы ![]() |
Client |
![]()
Сообщение
#13
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
здорово
![]() буду стараться замечать больше мелочей и запоминать. P.S. а что за IDE? Сообщение отредактировано: Client - 2.07.2010 20:49 |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 12.07.2025 5:35 |