Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
artyoms
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 167
1

Узнать мигает ли окно

31.10.2013, 17:09. Просмотров 884. Ответов 8
Метки нет (Все метки)

Можно узнать - мигает ли дочернее окно (не активное) у чужой программы? как при FlashWindow
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 17:09
Ответы с готовыми решениями:

Свернутое окно мигает если в Listbox добавляются строки
помогите реализовать пожалуйста, я уже не знаю как(

Как узнать предыдущее окно из моей проги?
Была помойму то ли в винапи то ли в самой делфи такая фича, можно было узнапть...

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

Нужно закрыть модальное окно и сделать активным вызвавшее его окно
Мне нада средствами Win API закрыть модальное окно и сделать активным вызвавшее...

Где окно студии там и окно приложения ?
Доброго времени суток! Задался таким вопросом, есть ли в RAD Studio 2010 и...

8
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26336 / 17666 / 6998
Регистрация: 22.10.2011
Сообщений: 31,081
Записей в блоге: 6
31.10.2013, 17:53 2
Лучший ответ Сообщение было отмечено как решение

Решение

RegisterShellHookWindow и ловить от известного HWND сообщение HSHELL_FLASH
4
artyoms
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 167
31.10.2013, 18:55  [ТС] 3
А есть у кого-нибудь какие нибудь примерчики, по теме или ближе к теме как использовать в делфи, мб ссылки там на статьи, чтобы разобраться
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26336 / 17666 / 6998
Регистрация: 22.10.2011
Сообщений: 31,081
Записей в блоге: 6
31.10.2013, 23:56 4
Цитата Сообщение от artyoms Посмотреть сообщение
как использовать в делфи
Очень просто:

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
68
69
70
71
72
73
74
75
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    procedure WndProc(var Message: TMessage); override;
  end;
 
var
  Form1: TForm1;
 
function RegisterShellHookWindow(Wnd : HWND) : BOOL; stdcall; external user32;
function DeregisterShellHookWindow(Wnd : HWND) : BOOL; stdcall; external user32;
 
implementation
 
{$R *.dfm}
 
var
  WM_SHELLHOOKMESSAGE : UINT;
 
function SetShellHook(hwndHook : HWND) : Boolean;
begin
  Result := False;
  WM_SHELLHOOKMESSAGE := RegisterWindowMessage('SHELLHOOK');
  if WM_SHELLHOOKMESSAGE <> 0 then
  begin
    if RegisterShellHookWindow(hwndHook) then
      Result := True;
  end;
end;
function UnSetShellHook(hwndHook : HWND) : Boolean;
begin
  Result := DeregisterShellHookWindow(hwndHook);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not SetShellHook(Handle) then
    ShowMessage('Не удалось установить хук');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnSetShellHook(Handle);
end;
 
const
  HSHELL_FLASH = $8006;
 
procedure TForm1.WndProc(var Message: TMessage);
begin
  if Message.Msg <> WM_SHELLHOOKMESSAGE then
    inherited
  else
    case Message.WParam of
      HSHELL_FLASH :
        Memo1.Lines.Add(Format('Мигающее окно: HWND = %d', [Message.LParam]));
    end;
end;
 
end.
1
artyoms
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 167
01.11.2013, 11:11  [ТС] 5
Так, ок, с RegisterShellHookWindow и DeregisterShellHookWindow всё понятно.
В этом коде как я понял мы обрабатываем сообщения получаемые только от собственного окна ?
Если да, то как сделать обработчик событий для окна на которое мы повесим хук, допустим на блокнот.

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.FormCreate(Sender: TObject);
var window:hwnd;
begin
  window:=FindWindow('NotePad', nil);
  Form1.Memo1.Lines.Add(inttostr(window));
  UnSetShellHook(window);
  if (SetShellHook(window)) = true then
       ShowMessage('Хук установлен') else
       ShowMessage('Не удалось установить хук');
end;
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26336 / 17666 / 6998
Регистрация: 22.10.2011
Сообщений: 31,081
Записей в блоге: 6
01.11.2013, 11:26 6
Цитата Сообщение от artyoms Посмотреть сообщение
В этом коде как я понял мы обрабатываем сообщения получаемые только от собственного окна ?
Значит, не все понятно... Приведенный выше код показывает хендл любого окна, которое мигает. Хоть блокнот, хоть (как было в моем случае) антивирус... А хендл, передаваемый в SetShellHook - показывает, куда слать уведомление о мигании, какое окно будет его обрабатывать...
1
artyoms
1 / 1 / 0
Регистрация: 28.10.2012
Сообщений: 167
01.11.2013, 14:49  [ТС] 7
да, теперь точно стало понятно) осталось непонятно только
Delphi
1
2
const
  HSHELL_FLASH = $8006;
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26336 / 17666 / 6998
Регистрация: 22.10.2011
Сообщений: 31,081
Записей в блоге: 6
01.11.2013, 15:18 8
Это значение константы HSHELL_FLASH, которого нет в дельфийском модуле Windows.
1
Titmouse
2 / 2 / 1
Регистрация: 06.02.2013
Сообщений: 29
13.03.2015, 13:13 9
День добрый, я хотел бы отслеживать создание новых окон.
Тут чтобы отслеживать мигание использовали HSHELL_FLASH.
Для создания окон , я нашел HSHELL_WINDOWCREATED.
В эту переменную нужно положить значение, чтобы его отслеживать (HSHELL_FLASH = $8006), я прав?
Какое значение необходимо присвоить!? Где об этом можно почитать!?

Буду рад вашей помощи.
0
13.03.2015, 13:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2015, 13:13

мигает PaintBox
Нужно написать прогу, в которой хаотично двигаются квадраты разного размера....

Мигает картинка
Мигает изображение в opengl Проект прилагается

Мигает Label со временем
На форму поместил Image и Label. В Label выводится отсчет времени до...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru