Как получить Handle окна

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Как получить Handle окна

Сообщение Alex2013 » 17.10.2019 19:31:38

Да давно такого густо наваристого флейма не было ... :wink:
Но вообщем интересно так как задачи действительно немного не тривиальные .
Извиняюсь за лень вообщем "все уже есть". :idea:
Как получить дескриптор консольного окна
(Второй способ самый надежный и годится не только для консоли )
Но идее все решается "могучим ураганом" в одну строчку (Не уверен что сработает для "голой консоли" ) ...
Handle := GetWindow(WindowProc, gw_HWndFirst);
Alex2013
долгожитель
 
Сообщения: 1574
Зарегистрирован: 03.04.2013 11:59:44

Re: Как получить Handle окна

Сообщение Снег Север » 18.10.2019 06:43:30

Alex2013, "нетривиальные" они только если MSDN не читать.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2250
Зарегистрирован: 27.11.2007 16:14:47

Re: Как получить Handle окна

Сообщение Сквозняк » 18.10.2019 06:47:10

Ещё флейма подкину :D Про команды, но про отладку всё того же. В самой замечательной для линуксоида винде, то есть в wine обнаружил, что команда START не такая не то что как в семёрке, она не такая как даже в ХРюше! Более правильная, но оттого часто несовместимая с виндовым cmd. В винде, если используешь после START кавычки, то всё, звиздец, ты должен перед запускаемым файлом писать имя окна с любым мусором, типа "" или "wefkwefklmwefn". Без этого START решит что твой запускаемый файл это название окна, а идущие после параметры, это бинарник! Круто, да, не могли промаркировать окно ключиком, вместо этого заставили всех его использовать. А линуксовый вайн никакого имени окна знать не знает и думает что это и есть бинарник. Если у кого-то под рукой есть свежий вайн, то интересно узнать, как в нём сейчас START работает, интересует копипаста первых строчек его справки. Чтобы получить её, в консоли надо набрать
Код: Выделить всё
wine cmd
help start

У меня выдаёт вот это
Код: Выделить всё
Запускает программу или открывает документ приложением,
связанным с файлами с данным расширением.

Использование:
start [options] имя_файла_программы [...]
start [options] имя_файла_документа

Опции:
/M[inimized] Запустить программу свёрнутой.
/MAX[imized] Запустить программу на весь экран.
/R[estored]  Запустить программу в окне обычного размера.
/W[ait]      Ожидать завершения программы и выйти с её кодом выхода.
/Unix        Запустить с помощью windows explorer, используя Unix-имя файла.
/ProgIDOpen  Открыть документ, используя указанный progID.
/?           Вывести эту справку и выйти.

Вот думаю, или забить на вайн, или писать универсальные мусорные команды пита
Код: Выделить всё
start "открываемый бинарь" "открываемый бинарь" --=файлы_всякие  --=файлы_всякие

То есть промаркировать открываемые файлы чтобы одна из записей "открываемый бинарь" ушла в мусор. Работать должно, но если в новых вайнах команду синхронизировали, то подумаю, стоит ли заморачиваться.
Сквозняк
энтузиаст
 
Сообщения: 705
Зарегистрирован: 29.06.2006 22:08:32

Re: Как получить Handle окна

Сообщение Alex2013 » 18.10.2019 07:30:55

Снег Север писал(а):Alex2013, "нетривиальные" они только если MSDN не читать.

И часто это все в лазарусе "под стандартным LCL" используется ?
Alex2013
долгожитель
 
Сообщения: 1574
Зарегистрирован: 03.04.2013 11:59:44

Re: Как получить Handle окна

Сообщение Снег Север » 18.10.2019 08:21:08

Alex2013 писал(а):И часто это все в лазарусе "под стандартным LCL" используется ?

Если писать "hello world", то редко. Я не знаю сколько чего пишут на лазаре, а на делфи пишут такого много. Я сам писал и не одно приложение, как я упоминал выше. Поскольку работа с системными функциями в делфи и лазаре ничем не отличаются, не вижу предмета для спора.
Вон топикстартер выше снова истерит, что wine работает не так, как оригинальная винда... :D
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2250
Зарегистрирован: 27.11.2007 16:14:47

Re: Как получить Handle окна

Сообщение Alex2013 » 18.10.2019 15:03:41

Имхо : ИМХО если приходится сталкиваться с системными функциями слишком часто, то скорее всего вы что-то не так делаете.

Есть свежий пример: небольшая библиотека FastDIB предлагающая альтернативу TCanvas ( с закосом под "чистое WinAPI" ) мне там интересен модуль FastFX с набором довольно редких фильтров и эффектов.. Нет, мне вполне понятно почему там стараются отчасти подражать LCL/VCL и делать часть работы через handle и TBMInfo но зачем в конверторы Bitmap2FastDIB и CopyBitmap2FastDIB пихать чудовищные AttachToHandle и LoadFromHandle( ) я В УПОР НЕ ПОНИМАЮ .

Да, там есть вариант с компрессией RLE8 но зачем GetObject GetDIBits и т.д. из WInApi напрягать ? Из за возможности одним махом обработать изображения с разным BPP ? Тоже отмазка как-то сомнительная .
Знаешь что в результате получилось, а то что я наблюдал только в кривом Wine ! Случайным образом кадр то рисуется нормально, то поворачивается вверх тормашками... Что я сделал вместо "патентованной конверсии" ?

Написал две строчки кода в начале использования FastDIB ...
Код: Выделить всё
  FBmp:=TFastDIB.Create;  FBmp.SetSize(B.Width,B.Height,24); BitmapTest(b,pf24bit);
  with b.RawImage do   Move(Data^,FBmp.Bits^,DataSize);

...и одну в конце
Код: Выделить всё
b.BeginUpdate; with b.RawImage do Move(FBmp.Bits^,Data^,DataSize); b.EndUpdate; FBmp.Free;

Вот что мешало автору библиотеки FastDIB написать кучку простых и понятных процедур в стиле Bitmap2FastDIB_ХХbpp вот таким незамысловатым но АБСОЛЮТНО НАДЕЖНЫМ образом ? По моему ничего кроме выпендрежа ! :idea:
Alex2013
долгожитель
 
Сообщения: 1574
Зарегистрирован: 03.04.2013 11:59:44

Re: Как получить Handle окна

Сообщение Сквозняк » 18.10.2019 20:38:19

Снег Север писал(а):Вон топикстартер выше снова истерит, что wine


Кое-кого, не будем указывать, кого, галлюцинации не отпускают. В простом обсуждении технических вопросов мерещатся толпы зомби покушающиеся на дорогого Билла Гейтса и весь офис Мелкософта.
Сквозняк
энтузиаст
 
Сообщения: 705
Зарегистрирован: 29.06.2006 22:08:32

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: V.Pozyvnoy и гости: 2

Рейтинг@Mail.ru