Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правая кнопка мыши, и рабочий стол. 
:(
    Опции темы
JohnnY
Дата 23.8.2005, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 20.8.2005
Где: Калининград

Репутация: нет
Всего: нет



Я хотел узнать как можно сделать так чтобы при нажатии правой кнопки мыши на рабочем столе в моей программе выполнялось какое-либо действие???
PM MAIL WWW   Вверх
FRAGNATIC
Дата 23.8.2005, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



hook те в помощь
Добавлено @ 00:56
Код

ibrary Mouse2Hook;
Uses Windows,Messages, Controls;
const
  WM_MESSAGE_FROM_MY_HOOK = WM_USER + $AA;

Var SysHook:HHook=0; 

Function SysMsgProc(Code:Integer; WParam:LongInt; LParam:LongInt):LongInt; stdcall; 
Var Msg:TMessage;
Begin 
 IF Code=HC_ACTION then 
  Case TMsg(Pointer(LParam)^).Message OF
   WM_RBUTTONDOWN,WM_RBUTTONUP,WM_RBUTTONDBLCLK:
   begin
     TMsg(Pointer(LParam)^).Message:=WM_NULL;
     PostMessage(FindWindow('TForm1',nil), WM_MESSAGE_FROM_MY_HOOK, Mouse.CursorPos.X, Mouse.CursorPos.Y);
   end;
   else Result:=CallNextHookEx(SysHook,Code,WParam,LParam);
  End;
end;

procedure Hook(Flag:Boolean); export; stdcall; 
Begin 
 IF Flag then SysHook:=SetWindowsHookEx(WH_GETMESSAGE,@SysMsgProc,HInstance,0) Else 
  Begin
   UnhookWindowsHookEx(SysHook);
   //SysHook:=0;
  End; 
End; 

exports Hook; 

{$R *.res} 

begin 
end.


код проги
Код

-------------------
const
  WM_MESSAGE_FROM_MY_HOOK = WM_USER + $AA;

type 
  MyProcType = procedure (Flag: Boolean); stdcall;
----------------
  private
    procedure WM_MSG_FROM_HOOK(var msg: TMessage); message WM_MESSAGE_FROM_MY_HOOK;
-------------------------
procedure TForm1.WM_MSG_FROM_HOOK(var msg: TMessage);
begin
  //SetForegroundWindow(application.Handle);
  делай чё те надо тут)
  //PostMessage(Handle,WM_NULL,0,0);
end;

Добавлено @ 01:00
правда это везде будет похать не тока на раб столе! Но для раб стола мож переделать сделав проверку или ещё чёнить! думаю справишся сам)
PM MAIL   Вверх
RaIDeR
Дата 23.8.2005, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: нет
Всего: 4



Самый простой способ это использовать ф-цию GetAsyncKeyState,
но не самый надёжный ... один плюсь - отвязка от dll.
(с использованием таймера, интервал поставь по-меньше)

Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (GetAsyncKeyState(2) = - 32767) then Memo1.Lines.Add('click');
end;

PM MAIL   Вверх
FRAGNATIC
Дата 23.8.2005, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Цитата
но не самый надёжный

скорее совсем не надёжный)
PM MAIL   Вверх
RaIDeR
Дата 23.8.2005, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: нет
Всего: 4



Цитата

скорее совсем не надёжный)

Срабатывает со второго клика, - c момента получения окном фокуса(если первый клик был тоже правый, а так всё ок smile )

Это сообщение отредактировал(а) RaIDeR - 23.8.2005, 01:35
PM MAIL   Вверх
Rrader
Дата 24.8.2005, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Надо внедриться в explorer.exe и засабклассить рабочий стол. smile Тогда можно будет отслеживать все...


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
FRAGNATIC
Дата 24.8.2005, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Цитата
Тогда можно будет отслеживать все...

с помощью хука можно так же отслеживать всё!
PM MAIL   Вверх
Rrader
Дата 24.8.2005, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Цитата

с помощью хука можно так же отслеживать всё!

Как ты будешь определять, что сообщения послал Рабочий стол? smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
FRAGNATIC
Дата 24.8.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Цитата
что сообщения послал Рабочий стол?

можно определять над чем находится курсор мыши!
и есть ещё куча вариантов!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.