Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/23: Рейтинг темы: голосов - 23, средняя оценка - 4.87
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592

Изменение прозрачности чужого окна

27.08.2010, 10:52. Показов 4693. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите плиз как сделать чужое окно полу прозрачным, вообще трекбаром менять прозрачность другого окна
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2010, 10:52
Ответы с готовыми решениями:

Плавное изменение прозрачности кнопки
Привет! Мне нужен исходник программы в котором существует только две кнопки. Как должен работать эта программа: когда программа запускается...

Handle чужого окна
Всем привет. Проблема в следующем: Есть окно посторонней программы, на ней расположено 2 поля для ввода текста (возможно не edit) и...

Обрезка части чужого окна
Как из чужого окна взять какую-то часть. Ну, к примеру в Google Chrome. Взять часть панели которая показывает страницы. Возможно ли...

17
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
27.08.2010, 13:28
поищите в интернете API функции по изменению прозрачности окон по их хендлу, а дальше просто поймайте хендл окна прозрачность которого вы хотите изменить.
PS возможные ключевые слова: SendMessage и FindWindow
1
КотЪ
 Аватар для Zabiyak
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
27.08.2010, 15:19
dll, работа с окном программы
2
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
27.08.2010, 16:33  [ТС]
Цитата Сообщение от Zabiyak Посмотреть сообщение
спасибо за готовый вариант )
такой вопросик в примере ищется окно по заголовку функцией FindWindow, а как получить хендл активного окна?

Добавлено через 11 минут
погуглил, нашел GetForegroundWindow.
Но, как не крути получается активное окно моей проги )) т.е. что бы сделать активное окно прозрачным я должен нажать на кнопку, тем самым делая активным мою прогу (

Добавлено через 5 минут
как вариант можно по клику на окно запоминать его handle а потом уже делать прозрачным, но как отследить клик по окну?
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
27.08.2010, 20:09
такой вопросик в примере ищется окно по заголовку функцией FindWindow, а как получить хендл активного окна?

погуглил, нашел GetForegroundWindow.
Но, как не крути получается активное окно моей проги )) т.е. что бы сделать активное окно прозрачным я должен нажать на кнопку, тем самым делая активным мою прогу (

как вариант можно по клику на окно запоминать его handle а потом уже делать прозрачным, но как отследить клик по окну?
Зачем извращаться, ищи по тексту/классу окна + можешь добавить проверку по GetWindowRect если нужно...
а чтобы не делать активным свое окно - можно убрать кнопку и активировать нужную процедуру по хот-кею.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
27.08.2010, 20:43  [ТС]
Цитата Сообщение от Markus_13 Посмотреть сообщение
хот-кею
это как?

Добавлено через 2 минуты
ааа понял

Добавлено через 12 минут
а как же поставлю на хот-кей вызов функции из длл? если по событию OnKeyDown то опять же форма активная должна быть

Добавлено через 2 минуты
что делает функция GetWindowRect ?
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
27.08.2010, 22:07
что делает функция GetWindowRect ?
А в хелпе прочитать, не?

а как же поставлю на хот-кей вызов функции из длл? если по событию OnKeyDown то опять же форма активная должна быть
например через хук
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
27.08.2010, 22:43  [ТС]
Цитата Сообщение от Markus_13 Посмотреть сообщение
А в хелпе прочитать, не?
читал не понял )) я просил доступным языком
например через хук
вы считаете это проще? )

Добавлено через 29 минут
для хука дdll'ку писать (
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
27.08.2010, 23:46
читал не понял )) я просил доступным языком
4 результат из выдачи гугла:

Функция GetWindowRect отыскивает размеры рамки ограничивающей прямоугольник определяемого окна. Размеры даны в экранных координатах, которые расположены относительно левого верхнего угла экрана.

Синтаксис:
Delphi
1
2
3
4
5
BOOL GetWindowRect
(
HWND hWnd,      // дескриптор окна
LPRECT lpRect       // адрес структуры для координат окна
);
Параметры:
hWnd Идентифицирует окно.
lpRect Указывает на структуру RECT которая принимает экранные координаты левых верхних и нижних правых углов окна.

Возвращаемые значения:
Если функция завершилась успешно, возвращается значение отличное от нуля. Если функция потерпела неудачу, возвращаемое значение - ноль.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
28.08.2010, 00:06  [ТС]
Функция GetWindowRect отыскивает размеры рамки ограничивающей прямоугольник определяемого окна. Размеры даны в экранных координатах, которые расположены относительно левого верхнего угла экрана.
да да читал )) понял )) я не сразу сообразил о какой рамки речь идет )

Добавлено через 1 минуту
но как это поможет, в любом случаи нужно отлавливать событие клика, но писать dll для такой маленькой проги, думаю лишнее
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.08.2010, 01:19
в любом случаи нужно отлавливать событие клика
я так и не понял - зачем?
И что же всетаки мешает тебе просто найти окно???
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
28.08.2010, 11:34  [ТС]
Markus_13 мне нужно не найти какое-то определенное окно, а не большую утилитку которая делала бы прозрачным выбранное мной окно.
Что ж мне нужно вводить заголовок нужного мне окна в едит, а если заголовок длинный, не удобно однако.
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.08.2010, 12:03
Delphi
1
2
Markus_13 мне нужно не найти какое-то определенное окно, а не большую утилитку которая делала бы прозрачным выбранное мной окно.
Что ж мне нужно вводить заголовок нужного мне окна в едит, а если заголовок длинный, не удобно однако.
Я бы такое делал через хук...
Если так уж лень, можно через таймер проверять нажато ли определенное сочетание клавиш...
Имхо так лучше будет, чем с "перехватом клика по окну" как ты писал выше...
И если ну прям очень надо через кнопку - еще как вариант можно сделать что-то вроде:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var w:hWnd;
 
procedure Button1click(...);
begin
Timer1.Enabled:=true;
end;
 
procedure Timer1timer(...);
begin
Timer1.Enabled:=false;
w:=GetForegroundWindow;
//далее оперируем с окном
...
end;
0
 Аватар для igoriy
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.08.2010, 15:30
Цитата Сообщение от anonimus Посмотреть сообщение
да да читал )) понял )) я не сразу сообразил о какой рамки речь идет )

Добавлено через 1 минуту
но как это поможет, в любом случаи нужно отлавливать событие клика, но писать dll для такой маленькой проги, думаю лишнее
А почему обязательно писать dll? включи код из DLL в свой код и не надо писать отдельно .
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.08.2010, 17:02
А почему обязательно писать dll? включи код из DLL в свой код и не надо писать отдельно .
igoriy, ну-ну, покажи мастер-класс, напиши хук без длл...
почему-то я уверен что ты этого не сделаешь =)
0
 Аватар для igoriy
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.08.2010, 17:33
Вот код и исходник.Наводишь мышь на чужое окно и нажимаешь на клаве кнопочку T
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Timer1: TTimer;
    Edit4: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure SetAlpha(Handle: THandle; Alpha: integer);
  private
        procedure ShowHwndAndClassName(CrPos: TPoint);
 
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
procedure TForm1.SetAlpha(Handle: THandle; Alpha: integer);
begin
  SetWindowLongA(Handle,GWL_EXSTYLE,GetWindowLongA(Handle,GWL_EXSTYLE) or $80000);
  SetLayeredWindowAttributes(Handle, 0, Alpha, $2);
 
end;
 
procedure TForm1.ShowHwndAndClassName(CrPos: TPoint);
 var
  hWnd: THandle;
  aName: array [0..255] of Char;
  rName: array [0..255] of Char;
begin
  hWnd := WindowFromPoint(CrPos); // получить дескриптор
  Edit1.Text := IntToStr(hWnd);
  GetClassName(hWnd, aName, 255);  // получить имя класса
  GetWindowText(hWnd,rName,255);  // получить название
  Edit2.Text:= string(aName) ;
  Edit3.Text:= string(rName) ;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  rPos: TPoint;
begin
 // получить координаты курсора и передать функции  ShowHwndAndClassName
  if Boolean(GetCursorPos(rPos)) then ShowHwndAndClassName(rPos);
 
  if getasynckeystate($54)<>0//клавиша T
  then
  begin
 SetAlpha(StrToInt(Edit1.Text),StrToInt(Edit4.text));//Edit4.text - прозрачность 0..255
  end;
end;
Вложения
Тип файла: rar Новая папка.rar (302.4 Кб, 41 просмотров)
1
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
28.08.2010, 17:54  [ТС]
igoriy сенькс
0
 Аватар для igoriy
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.08.2010, 18:03
anonimus можно обойтись без клавиатуры если вот сюда
Delphi
1
procedure TForm1.Timer1Timer(Sender: TObject);
вставить
Delphi
1
2
3
  if getasynckeystate($01)<>0//левая клавиша мыши
  then Timer2.Enabled:= True
  else Timer2.Enabled:= False;
и добавить второй таймер с такой обработочкой
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Timer2Timer(Sender: TObject);
begin
 Timer2.Interval:= 100;
 if n= 0 then n:= 255;
  n:= n-1;
  Edit4.Text:= IntToStr(n);
  SetAlpha(StrToInt(Edit1.Text),StrToInt(Edit4.text))
end;
то получиться пока держешь на чужом окне левую клавишу мыши оно становиться все прозрачнее и прозрачнее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.08.2010, 18:03
Помогаю со студенческими работами здесь

Название кнопки чужого окна
Ситуация такая: нужно получить надпись кнопки из программы, написанной на шарпе Делаю так: var SearchedWnd : HWND; str: string; ...

Смена раскладки клавиатуры чужого окна
ShowWindow(h,SW_SHOW); BringWindowToTop(h); SetForegroundWindow(h); //PostMessage(h, WM_INPUTLANGCHANGEREQUEST,1,...

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

Чтение информации из чужого окна в 64-bit OS
Привет! Процедура проверяет открыто ли окно Диспетчера задач, и если открыто - считывает из него список процессов в мой Memo1. Процедура...

Ввод данных в поля login;pass чужого окна
Доброго времени... Есть такое окно: Нужно в поле Username\Password вписать значение из переменных и нажать на кнопку. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru