Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.03.2010, 23:02
Tovarisch Tovarisch вне форума
Прохожий
 
Регистрация: 18.03.2008
Сообщения: 33
Репутация: 10
По умолчанию Как вызвать PopUpMenu при свернутом окне.

Есть хук, перехватывает нажатие клавиш и выводит на экран PopUpMenu, хук в dll, но есть форма из который я его запускаю. Так вот меню видно только если рабочая форма в фокусе, причем реакция на сочетание клавиш есть, проверял на showmessage все как надо отображает, а если гдето позади то меню не видно, но хук зависает в ожидании ответа от меню, тоесть оно гдето есть. Из мсдн я понял что TrackPopupMenu просто както активирует меню, а само меню привязано к окну, причем там же написано что вызов меню обязательно должен происходить при активном окне. Может ктото подскажет есть ли вариант вызвать таки это меню, если создаю я его в длл.
Пока попробую передать WM_DRAWITEM в рабочее окно.
Вот код:
Код:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
library PasteHook;
 
 
uses
  Windows, Messages, ActnPopup,clipbrd, Menus, SysUtils, dialogs;
 
 
 
 
 
{$R *.res}
 
type
   blank = class
    procedure OnPopClick(Sender: TObject);
    constructor Create;
    destructor Destroy; override;
   end;
 
  var
  SysHook : HHook = 0;
  State: Boolean = False;
  PasteMenu: TPopUPMenu;
  Blank1: Blank;
  HW: HWND;
 
 
 
 
 
 
 
procedure Blank.OnPopClick(Sender: TObject);
var
  str: string;
begin
  str:=copy((Sender as Tmenuitem).Caption,2,255);
  Clipboard.asText:=str;
  SendMessage(HW,WM_PAste,0,0);
  HW:=0;
end;
 
constructor blank.Create;
begin
 
end;
 
destructor Blank.Destroy;
begin
inherited;
end;
{==============================================================================}
Function FilterFunc(Code:integer; wParam, lParam:DWORD):DWORD; stdcall;
var
MousePos:TPoint;
begin
 
if code = HC_ACTION then
  begin
    if (wParam = 112and ((GetKeyState(VK_Control) and 32768) = 32768) then
      begin
        HW:= GetFocus;
        GetCursorPos(MousePos);
        PasteMenu.Popup(MousePos.X,Mousepos.Y);
        Result:=CallNextHookEx(SysHook, Code, wParam, lParam);
      end;
  end
else
  begin
    Result:=CallNextHookEx(SysHook, Code, wParam, lParam);
  end;
                    
end;
{==============================================================================}
procedure AccHook();
begin
  if State = False then
    begin
      SysHook := SetWindowsHookEx(WH_KeyBoard,@FilterFunc, HInstance, 0);
      State:= True;
      // OnPasteEvent:=Event;
      Blank1:= Blank.Create;
      PasteMenu:= TPopUpMEnu.Create(nil);
      PasteMenu.Items.Add(NewItem('123', 0,False,True, Blank1.OnPopClick,0,'name'));
    end
  else
    begin
      UnhookWindowsHookEx(SysHook) ;
      Blank1.Destroy;
      SysHook := 0;
      State := False;
    end;
 
 
end;
{==============================================================================}
 
 
 
exports AccHook index 1;
 
begin
end.

Dll гружу статичекси из формы там вызывается AccHook, кнопка да эдит никакого кода.

Последний раз редактировалось Tovarisch, 13.03.2010 в 23:04.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:42.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025