Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot (+5 невидимых)

 eXeL@B —› Программирование —› Добавить в системное меню пункт не совего окна
Посл.ответ Сообщение

Ранг: 16.9 (новичок)
Активность: 0.020
Статус: Участник

Создано: 23 мая 2009 07:07
· Личное сообщение · #1

Вопрос в следующем:

как перехватить WM_SYSCommand окна, где был клик мыши

есть такой код в либе:

Code:
  1. Type
  2.   MouseStruc = ^TMouseStruc;
  3.   TMouseStruc = packed record
  4.     PT : TPoint;
  5.     WND : HWnd;
  6.     wHitTestCode : UINT;
  7.     dwExtraInfo : DWORD;
  8. End;
  9. function LowLevelMouseProc(Code: Integer; wParam: DWORD; lParam: DWORD): Longint; stdcall;
  10. begin
  11.     if (wParam =  WM_LBUTTONDOWN) then
  12.     begin
  13.       MStruct := Pointer (LParam);
  14.       if MStruct^.wHitTestCode = 2 Then
  15.       Begin
  16.          ...
  17.       End;
  18.     end;


Хук - WH_MOUSE

Но проблема в том, что в MOUSEHOOKSTRUCTюwHitTestCode не приходит HTCAPTION = 2

может есть другой способ добавления в сисменю?

Заранее спс


3920_23.05.2009_CRACKLAB.rU.tgz - 0.rar



Ранг: 16.9 (новичок)
Активность: 0.020
Статус: Участник

Создано: 23 мая 2009 07:23 · Поправил: 50Hz_220B_1200W
· Личное сообщение · #2

Нашел на просторах инета :

Код: (cpp)
HOOKPROC hkprcSysMsg;
static HINSTANCE hinstDLL;
static HHOOK hhookSysMsg;
hinstDLL = LoadLibrary((LPCTSTR) "c:\windows\sysmsg.dll");
hkprcSysMsg = (HOOKPROC)GetProcAddress(hinstDLL, "SysMessageProc");
hhookSysMsg = SetWindowsHookEx(WH_GETMESSAGE,hkprcSysMsg,hinstDLL,0);

Этот хук надо ставить надо на WH_GETMESSAGE, DLL можно и не загружать если в небольшой программке сделать все сегменты FIXED через def-файл,
и там не нужно будет вызывать даже MakeProcInstance - всё будет и так работать.


как заюзать не знаю.



Ранг: 16.9 (новичок)
Активность: 0.020
Статус: Участник

Создано: 06 июня 2009 16:51 · Поправил: 50Hz_220B_1200W
· Личное сообщение · #3

Хун на WH_CBT

Добавляю в системное меню пункт : AppendMenu (HM, MF_STRING, 99, 'MyMenu');

в ДЛЛ:
Code:
  1. function MyProc (Code: Integer; wParam: DWORD; LParam : DWORD): Longint; stdcall;
  2. ...
  3.  
  4.   If Code = HCBT_Syscommand Then
  5.   
  6.     If LoWord (WParam) = 99 Then
  7.     Begin
  8.      ...
  9.       Result := 0;
  10.     ..
  11.     End
  12.    Else
  13.   Result := CallNextHookEx(Hook, Code, wParam, LParam);


проблема в том, что на LoWord (WParam) не приходит "99" при выборе моего пункта меню,
подскажите плз, где ошибся?



Ранг: 14.2 (новичок), 6thx
Активность: 0.010
Статус: Участник

Создано: 06 июня 2009 19:08
· Личное сообщение · #4

Попробуй так:
if Message.CmdType = 99 then
showmessage('');


 eXeL@B —› Программирование —› Добавить в системное меню пункт не совего окна
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати