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

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

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

Author24 — интернет-сервис помощи студентам
подскажите плиз как сделать чужое окно полу прозрачным, вообще трекбаром менять прозрачность другого окна
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2010, 10:52
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено через 1 минуту
но как это поможет, в любом случаи нужно отлавливать событие клика, но писать dll для такой маленькой проги, думаю лишнее
0
{c0Der}
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.08.2010, 01:19 11
в любом случаи нужно отлавливать событие клика
я так и не понял - зачем?
И что же всетаки мешает тебе просто найти окно???
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
28.08.2010, 11:34  [ТС] 12
Markus_13 мне нужно не найти какое-то определенное окно, а не большую утилитку которая делала бы прозрачным выбранное мной окно.
Что ж мне нужно вводить заголовок нужного мне окна в едит, а если заголовок длинный, не удобно однако.
0
{c0Der}
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.08.2010, 12:03 13
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
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.08.2010, 15:30 14
Цитата Сообщение от anonimus Посмотреть сообщение
да да читал )) понял )) я не сразу сообразил о какой рамки речь идет )

Добавлено через 1 минуту
но как это поможет, в любом случаи нужно отлавливать событие клика, но писать dll для такой маленькой проги, думаю лишнее
А почему обязательно писать dll? включи код из DLL в свой код и не надо писать отдельно .
0
{c0Der}
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
28.08.2010, 17:02 15
А почему обязательно писать dll? включи код из DLL в свой код и не надо писать отдельно .
igoriy, ну-ну, покажи мастер-класс, напиши хук без длл...
почему-то я уверен что ты этого не сделаешь =)
0
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.08.2010, 17:33 16
Вот код и исходник.Наводишь мышь на чужое окно и нажимаешь на клаве кнопочку 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
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
28.08.2010, 17:54  [ТС] 17
igoriy сенькс
0
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
28.08.2010, 18:03 18
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
28.08.2010, 18:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2010, 18:03
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru