Delphi изменить размеры чужого окна

Delphi изменить размеры чужого окна

Размещение сквозной ссылки

Delphi. Действия с посторонними окнами: Перемещение, изменение размеров, скрытие.

Как «словить» окно? Под словом «словить» я имею ввиду то, как обнаружить наличие окна (любого окна) среди других окон. Функция «ловли окна» очень часто используется в том случае если вам необходимо совершить над ним (окном) какое-нибудь действие: закрыть, переместить, спрятать, изменить размеры и т.д. Еще раз скажу, что все эти действия будут совершаться над «чужими» окноми, т.е. не над теми которые ва разрабатываете, а над окнами других приложений. Итак вы уже поняли ( я надеюсь ) для чего нужно «словить» окно. Ниже представлен фрагмент кода, позволяющий определить наличие окна в системе:

if findwindow(nil, ‘1.txt — Блокнот’) <>0 then showmessage (‘Окно присутствует’);

Если вы поместите эту строчку в процедуру обработки события нажатия на кнопку (или в другое место ),запустите программу и нажмете на кнопку, ваша программа выдаст сообщение «Окно присутствует» если вы перед этим запустили блокнот и сохранили документ под названием 1.txt Иными словами программа смотрит есть ли окно с таким заголовком какой вы указали (он выделен вот таким цветом) и если оно есть — выдает сообщение, в противном же случае ничего не произойдет.

Теперь когда, вы знаете как использовать функцию ловли окна, попробуем передвинуть его:

//Поместите этот код в процедуру обработки события нажатия на кнопку

Запустите Блокноти сохраните пустой(или не пустой) документ под именем 1.txt (Обратите внимание, что заголовок окна будет 1.txt — Блокнот) Теперь запустите программу и нажмите на кнопку. Если все сделано правильно, то окно блокнота передвинится в левый верхний угол экрана. Теперь давайте разберем, как вы это сделали.

Первая строчка — функция «ловли» окна. Она проверяет есть ли окно с таким заголовком. Если есть, то выполняется следующая (вторая) строчка:

первый параметр — заголовок окна, с которым надо что-либо сделать ( в данном случае — передвинуть). Заголовок передается функцией «ловли» окна

findwindow(nil,’1.txt — Блокнот’) , где 1.txt — Блокнот заголовок окна

Второй параметр — положение окно ( т.е. его Z-расположение ) он нам сейчас не нужен. Просто считайте, что он должен быть HWND_BOTTOM

Третий параметр — координыты окна по «Оси X» в пикселах.

Четвертый параметр — координыты окна по «Оси Y» в пикселах

(т.е. этими координмтами вы указываете куда двигать окно).

Пятый — размер окна по горизонтали

Шестой — размер окна по вертикали

И, наконец, седьмой параметр, он имеет несколько значений. Вот основные из них:

SWP_HIDEWINDOW — после проделаных действий над окном ( перемещением и изменением размера ) окно прячется

SWP_NOSIZE — если указан этот параметр, то 5й и 6й параметры учитываться не будут, т.е. окно менять размер не будет (этот параметр указан в нашем примере )

SWP_NOMOVE — если указан этот параметр, то 3й и 4й параметры учитываться не будут, т.е. окно не будет перемещаться.

SWP_SHOWWINDOW — после проделаных действий над окном ( перемещением и изменением размера ) окно будет показано ( работает только если окно было спрятано)

Теперь можно и текст изменить. Вот, например, есть у вас какое-нибудь окно, допустим заголовок у него все тот же — 1.txt — Блокнот. Как же из своей программы поменять заголовок у этого окна? А очень просто:

//Поместите этот код в процедуру обработки события нажатия на кнопку

setwindowtext (findwindow(nil,’1.txt — Блокнот’),’Окно By Vasya Pupkin’)

Запустите программу, нажмите на кнопку и. о чудо — окно названо вашим именем 🙂

Функция setwindowtext имеет 2 параметра :

Первый — заголовок окна, у которого будем менять заголовок. (Простите за каламбур). Он определяется через функцию «ловли» окна:

findwindow(nil,’1.txt — Блокнот’) , где 1.txt — Блокнот и есть тот самый (начальный) заголовок окна

Второй — новый заголовок (типа String)

Есть еще одна интересная функция, которая может вам пригодиться. Это — Showwindow. Используя ее вы сможете прятать ( и, естественно, показавать обратно) окна. Использование этой функции еще легче, чем использование предыдущих:

После выполнения программы окно «1.txt — Блокнот» будет спрятано (но не закрыто!). У этой функции тоже 2 параметра:

Первый — заголовок окна. Он определяется через функцию «ловли» окна:

findwindow(nil,’1.txt — Блокнот’) , где 1.txt — Блокнот заголовок окна

Второй — указания, что делать:

SW_HIDE -Прятать окно

SW_MAXIMIZE -Максимизировать окно

SW_MINIMIZE -Минимизировать окно

SW_SHOW -показать окно (Его надо вызывать если вы хотите показать уже спрятанное окно)

Еще один способ передачи комманд окнам — это использование функции Postmessage . Например, чтобы закрыть окно с заголовком «1.txt — Блокнот» вставьте этот код в процедуру обработки события нажатия на кнопку:

postmessage(findwindow(nil,’1.txt — Блокнот’), wm_quit,0,0);

Если у вас было запущено окно с заголовком 1.txt — Блокнот, то оно закроется.

Postmessage имеет несколько параметров, и в различных случаях они разные. Вот некий шаблон использования Postmessage:

postmessage( findwindow(nil,’заголовок окна’), wm_команда, парам3, парам4);

В первом параметре — findwindow(nil,’заголовок окна’) вы передаете заголовок окна.

Второй пареметр — комманда, указывающая какое действие должно совершиться над окном ( в данном примере эта комманда — WM_QUIT, она закрывает окно). Все эти комманды начинаются на WM_ (wm_size, wm_quit, и т.д.)

Третий и четвертый параметры(парам3 и парам4) — это параметры wm_комманды. Чтобы получить сведения о этих параметрах( да и о самих wm_коммандах) откройте справку Delphi ( ПУСК=>Программы=> Borland Delphi => HELP=> MS SDK Help Files=> Win32 Programmer’s Reference ) откройте вкладку «Указатель» и наберите WM_ и вы увидете целый список этих комманд. Если вы хотите узнать параметры для данной wm_комманды, откройте справку по этой wm_комманде и там вы увидете, какие должны быть параметры.

Источник

Взаимодействие с чужими окнами

Взаимодействие с чужими окнами

Содержание материала

Представьте себе, глупый пользователь сидит как ни в чём небывало с умным видом уже в какой раз пытается составить документ в Microsoft Word’e, но вдруг окно начинает бешено скакать по экрану, в его заголовке выводятся непристойные сообщения, оно то сворачивается, то разворачивается, меняя постоянно свои размеры, а под конец совсем исчезает, унося в небытиё весь текст, который с таким трудом набил ламерюга. а если так себя в любой момент может повести любая программа. впечатления от этого останутся на долго.

Для того, чтобы сделать что-нибудь над каким-либо окном нужно сначала получить его дескриптор, т.е. его положение в оперативной памяти. Для этого нужно использовать функцию FindWindow. Ей нужно указать всего два параметра: сначала класс искомого окна, затем его заголовок. Ну с заголовком проблем вообщем-то нет — его мы видим, но вот как определить класс. ведь он скрыт от глас пользователя. В действительности мы может указать только заголовок окна, а вместо класса ставим nil.

Для начала запустите стандартную программу «Блокнот» — и что же мы видим? В блокноте в заголовке окна отслеживается имя текущего файла. Изначально, т.к. файла нет в использовании, заголовок блокнота выглядит так: «Безымянный — Блокнот». Постараемся по этому критерию найти окно блокнота. Выглядеть это будет так:

if FindWindow( nil , ‘Безымянный — Блокнот’ ) <> 0 then

ShowMessage( ‘Окно найдено’ )

ShowMessage( ‘Окно НЕнайдено’ );

Как мы видим из кода, если наша программа найдёт окно блокнота, мы увидим сообщение, гласящее об этом.

Далее попробуем передвинуть это окно

h := findwindow( nil , ‘Безымянный — Блокнот’ );

SetWindowPos(h, HWND_BOTTOM, 1 , 1 , 20 , 20 , swp_nosize);

Опять находим блокнот. Его дескриптор помещаем в переменную класса HWND[С английского Handle Window — дескриптор окна]. Далее используем функцию SetWindowPos для задания позиции. В качестве параметров нужно указать:

Дескриптор окна, которое хотим переместить

Идентификатор окна, которое предшествует перемещаемому окну в Z-последовательности. Z-последовательность это порядок, в котором формировались окна. Данный параметр указывает с какого именно окна необходимо начинать писк. В качестве значений может принимать либо дескриптор какого-либо окна в системе, либо одно из нижеследующих значений:

HWND_BOTTOM Начало Z-последовательности

HWND_NOTOPMOST Первое окно которое располагается не «поверх все окон»

HWND_TOP Вершина Z-последовательности

HWND_TOPMOST Первое окно которое располагается «поверх все окон»

Позиция окна по горизонтали

Позиция окна по вертикали

Спецификаторы изменения позиции и размеров окна[флаги]. Для задания значения можно комбинировать следующие константы

SWP_DRAWFRAME Прорисовка фрейма вокруг окна.

SWP_FRAMECHANGED Посылает сообщение WM_NCCALCSIZE окну, даже если размер его не был изменён. Если этот флаг не указан, сообщение WM_NCCALCSIZE будет посылаться, только после изменения размеров окна.

SWP_HIDEWINDOW Скрывает окно.

SWP_NOACTIVATE Не активизирует окно. Если же этот флаг не будет поставлен, окно активизируется и будет перемещено поверх всех окон. А вот встанет ли окно даже выше тех окон, которым задано HWND_TOPMOST или нет зависит от параметра hWndInsertAfter.

SWP_NOCOPYBITS Если этот спецификатор не будет установлен, тогда содержимое клиентской области окна будет скопировано и вставлено во вновь отобразившееся окно после его перемещения.

SWP_NOMOVE Сообщает, что нужно игнорировать параметры задания позиции окну.

SWP_NOOWNERZORDER Сообщает, что не следует изменять позицию окна владельца в Z-последовательности.

SWP_NOREDRAW Не перерисовывает окно.

SWP_NOREPOSITION Такой же как и SWP_NOOWNERZORDER.

SWP_NOSENDCHANGING Мешает окну получить сообщение WM_WINDOWPOSCHANGING.

SWP_NOSIZE Сообщает, что нужно игнорировать параметры задания размеров окну.

SWP_NOZORDER Сохраняет текущее положение в Z-последовательности (игнорирует сообщение hWndInsertAfter parameter).

SWP_SHOWWINDOW Отображает окно.

Если данная функция выполнится успешно, она возвратит отличное от нуля значение. Ну, вот, теперь мы можем передвигать и изменять в размерах чужие окна. Для того, чтобы изменить заголовок окна напишем следующий код:

SetWindowText(FindWindow( nil , ‘Безымянный — Блокнот’ ),

‘Дарова, ламерюга, типа ты попал. ‘ );

Функции setwindowtext нужно указать только два параметра: это дескриптор нужного окна и новое значение для заголовка. Вот вообщем-то и всё!

Есть ещё одна интересная функция ShowWindow, которая позволяет скрывать или отображать окна. Использовать её нужно так::

ShowWindow(FindWindow( nil , ‘Безымянный — Блокнот’ ), sw_hide);

В скобках указываем сначала над каким именно окном хотим издеваться, а затем что именно мы хотим с ним сделать. В качестве возможных действий можем указать:

SW_HIDE Скрывает окно и активизирует другое.

SW_MAXIMIZE Разворачивает окно.

SW_MINIMIZE Сворачивает окно.

SW_RESTORE Активизирует и выводит окно. Если окно было развёрнуто или свёрнуто — восстанавливает исходный размер и позицию.

SW_SHOW Активизирует и выводит окно с его оригинальным размером и положением.

SW_SHOWDEFAULT Активизирует с установками, заданными в структуре STARTUPINFO, которая была передана при создании процесса приложением запускающим нужную программу.

SW_SHOWMAXIMIZED Выводит окно в развёрнутом виде.

SW_SHOWMINIMIZED Выводит окно в виде пиктограммы на панели задач.

SW_SHOWMINNOACTIVE Выводит окно в свёрнутом виде на панели задач и не передаёт ему фокус ввода, т.е. окно, которое до этого было активно остаётся активно по прежнему.

SW_SHOWNA Отображает окно в его текущем состоянии. Активное окно остаётся активным по прежнему.

SW_SHOWNOACTIVATE Выводит окно в его последнем положении и с последними используемыми размерами. Активное окно остаётся активным по прежнему.

SW_SHOWNORMAL Выводит окно. Если оно было свёрнуто или развёрнуто — восстанавливает его оригинальные размеры и позицию

Но вся сложность действий заключается в том, что в заголовке Блокнота отслеживается имя текущего файла и использовать значение «Безымянный — Блокнот» мы можем не всегда : (. Тем более это не только в случае с блокнотом. Но есть выход: ведь функции FindWindow для поиска окна мы указываем не только заголовок нужного окна, но ещё его класс. Какой же это выход скажете вы, заголовок окна мы видим, значит знаем, что указывать — а класс окна. в действительности тоже может найти приложив немного усилий!

В пакет Delphi входим специальная утилита для отслеживание всех активных процессов, она называется WinSight32. Вот ею мы и воспользуемся. Запустите её, покопайтесь в списке процессов, ищите строку где значится текущий заголовок нужного окна, например Блокнота, и в левой части этой строки в фигурных скобках вы найдёте имя класса окна. Для блокнота это будет «Notepad». Теперь зная имя класса окна мы можем переписать поиск окна таким способом:

ShowWindow(FindWindow( ‘Notepad’ , nil ), sw_hide);

Теперь мы вместо заголовка окна указываем значение nil, игнорируя данный параметр.

Есть ещё один замечательный способ передачи команд окнам.- функция PostMessage. Ей в качестве параметров нужно указать:

Дескриптор окна, которому посылается сообщение или следующие значения:

HWND_BROADCAST Сообщение будет послано всем окнам верхнего уровня системы, включая неактивные и невидимые окна, overlapped-окна, и PopUp-окна, но сообщение не будет посылаться дочерним[Child] окнам.

NULL Ведёт себя как функция PostThreadMessage с переданным ей dwThreadId параметром.

Первый параметр сообщения

Второй параметр сообщения

Например, если послать сообщение wm_quit блокноту — окно будет закрыто без вывода всяких сообщений о необходимости сохранения!

PostMessage(FindWindow( ‘Notepad’ , nil ), wm_quit, 0 , 0 );

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!

Источник

Delphi изменить размеры чужого окна

Представленная ниже страница, лишь часть огромного сайта посвященного различной компьютерной документации, на сайте собрано более 800 мб информации. Если Вы не нашли в этой статье, то что Вы ищите попробуте посмотреть здесь, cпросить на форуме или поискать необходимую Вам информацию в нашем каталоге ссылок сайтов компьтерной тематики.

Если же Вы хотите приобрести бумажную копию представленных здесь
материалов, обращайтесь в наш книжный магазин.

С уважением,
команда разработчиков eManual.ru

Delphi Действия с посторонними окнами: Перемещение, изменение размеров, скрытие.

FileArea.co.il Delphi Действия с посторонними окнами: Перемещение, изменение размеров, скрытие.
Программы • Железо • Драйверы • Хостинг • Энциклопедия рекламы

Delphi Действия с посторонними окнами: Перемещение, изменение размеров, скрытие.

Как «словить» окно? Под словом «словить» я имею ввиду то, как обнаружить наличие окна (любого окна) среди других окон. Функция «ловли окна» очень часто используется в том случае если вам необходимо совершить над ним (окном) какое-нибудь действие: закрыть, переместить, спрятать, изменить размеры и т.д. Еще раз скажу, что все эти действия будут совершаться над «чужими» окноми, т.е. не над теми которые ва разрабатываете, а над окнами других приложений. Итак вы уже поняли ( я надеюсь ) для чего нужно «словить» окно. Ниже представлен фрагмент кода, позволяющий определить наличие окна в системе:

if findwindow(nil, ‘1.txt — Блокнот’) <>0 then showmessage (‘Окно присутствует’);

Если вы поместите эту строчку в процедуру обработки события нажатия на кнопку (или в другое место ),запустите программу и нажмете на кнопку, ваша программа выдаст сообщение «Окно присутствует» если вы перед этим запустили блокнот и сохранили документ под названием 1.txt Иными словами программа смотрит есть ли окно с таким заголовком какой вы указали (он выделен вот таким цветом) и если оно есть — выдает сообщение, в противном же случае ничего не произойдет.

Теперь когда, вы знаете как использовать функцию ловли окна, попробуем передвинуть его:

//Поместите этот код в процедуру обработки события нажатия на кнопку

Запустите Блокноти сохраните пустой(или не пустой) документ под именем 1.txt (Обратите внимание, что заголовок окна будет 1.txt — Блокнот) Теперь запустите программу и нажмите на кнопку. Если все сделано правильно, то окно блокнота передвинится в левый верхний угол экрана. Теперь давайте разберем, как вы это сделали.

Первая строчка — функция «ловли» окна. Она проверяет есть ли окно с таким заголовком. Если есть, то выполняется следующая (вторая) строчка:

первый параметр — заголовок окна, с которым надо что-либо сделать ( в данном случае — передвинуть). Заголовок передается функцией «ловли» окна

findwindow(nil,’1.txt — Блокнот’) , где 1.txt — Блокнот заголовок окна

Второй параметр — положение окно ( т.е. его Z-расположение ) он нам сейчас не нужен. Просто считайте, что он должен быть HWND_BOTTOM

Третий параметр — координыты окна по «Оси X» в пикселах.

Четвертый параметр — координыты окна по «Оси Y» в пикселах

(т.е. этими координмтами вы указываете куда двигать окно).

Пятый — размер окна по горизонтали

Шестой — размер окна по вертикали

И, наконец, седьмой параметр, он имеет несколько значений. Вот основные из них:

SWP_HIDEWINDOW — после проделаных действий над окном ( перемещением и изменением размера ) окно прячется

SWP_NOSIZE — если указан этот параметр, то 5й и 6й параметры учитываться не будут, т.е. окно менять размер не будет (этот параметр указан в нашем примере )

SWP_NOMOVE — если указан этот параметр, то 3й и 4й параметры учитываться не будут, т.е. окно не будет перемещаться.

SWP_SHOWWINDOW — после проделаных действий над окном ( перемещением и изменением размера ) окно будет показано ( работает только если окно было спрятано)

Теперь можно и текст изменить. Вот, например, есть у вас какое-нибудь окно, допустим заголовок у него все тот же — 1.txt — Блокнот. Как же из своей программы поменять заголовок у этого окна? А очень просто:

//Поместите этот код в процедуру обработки события нажатия на кнопку

setwindowtext (findwindow(nil,’1.txt — Блокнот’),’Окно By Vasya Pupkin’)

Запустите программу, нажмите на кнопку и. о чудо — окно названо вашим именем 🙂

Функция setwindowtext имеет 2 параметра :

Первый — заголовок окна, у которого будем менять заголовок. (Простите за каламбур). Он определяется через функцию «ловли» окна:

findwindow(nil,’1.txt — Блокнот’) , где 1.txt — Блокнот и есть тот самый (начальный) заголовок окна

Второй — новый заголовок (типа String)

Есть еще одна интересная функция, которая может вам пригодиться. Это — Showwindow. Используя ее вы сможете прятать ( и, естественно, показавать обратно) окна. Использование этой функции еще легче, чем использование предыдущих:

После выполнения программы окно «1.txt — Блокнот» будет спрятано (но не закрыто!). У этой функции тоже 2 параметра:

Первый — заголовок окна. Он определяется через функцию «ловли» окна:

findwindow(nil,’1.txt — Блокнот’) , где 1.txt — Блокнот заголовок окна

Второй — указания, что делать:

SW_HIDE -Прятать окно

SW_MAXIMIZE -Максимизировать окно

SW_MINIMIZE -Минимизировать окно

SW_SHOW -показать окно (Его надо вызывать если вы хотите показать уже спрятанное окно)

Еще один способ передачи комманд окнам — это использование функции Postmessage . Например, чтобы закрыть окно с заголовком «1.txt — Блокнот» вставьте этот код в процедуру обработки события нажатия на кнопку:

postmessage(findwindow(nil,’1.txt — Блокнот’), wm_quit,0,0);

Если у вас было запущено окно с заголовком 1.txt — Блокнот, то оно закроется.

Postmessage имеет несколько параметров, и в различных случаях они разные. Вот некий шаблон использования Postmessage:

postmessage( findwindow(nil,’ заголовок окна ‘), wm_команда, парам3, парам4 );

В первом параметре — findwindow(nil,’ заголовок окна ‘) вы передаете заголовок окна.

Второй пареметр — комманда, указывающая какое действие должно совершиться над окном ( в данном примере эта комманда — WM_QUIT, она закрывает окно). Все эти комманды начинаются на WM_ (wm_size, wm_quit, и т.д.)

Третий и четвертый параметры(парам3 и парам4) — это параметры wm_комманды. Чтобы получить сведения о этих параметрах( да и о самих wm_коммандах) откройте справку Delphi (ПУСК=>Программы=> Borland Delphi => HELP=> MS SDK Help Files=> Win32 Programmer’s Reference) откройте вкладку «Указатель» и наберите WM_ и вы увидете целый список этих комманд. Если вы хотите узнать параметры для данной wm_комманды, откройте справку по этой wm_комманде и там вы увидете, какие должны быть параметры.

Источник

Читайте также:  Чем раньше украшали окна
Поделиться с друзьями
Adblock
detector