Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Координаты мыши в "чужом" приложении.   Найти похожие ветки 

 
Nix   (2004-11-03 01:56) [0]

Необходимо из другого, активного, приложения по double click получать координаты мыши.
Пожалуйста, помогите разобраться.


 
++MASTER++ ©   (2004-11-03 13:15) [1]

Уважаемый Nix, ловите события мышки вне вашего приложения, например:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, StdCtrls;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Button_StartJour: TButton;
    Button_StopJour: TButton;
    ListBox1: TListBox;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    procedure Button_StartJourClick(Sender: TObject);
    procedure Button_StopJourClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FHookStarted : Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  JHook: THandle;

// WH_JOURNALPLAYBACK Hook Function

//Syntax

// JournalPlaybackProc
// nCode: Integer;  
// wParam: WPARAM;  
// lParam: LPARAM  
// ): LRESULT;  

function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
var
  Char1: PChar;
  s: string;
begin
  {this is the JournalRecordProc}
  Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut));
  {the CallNextHookEX is not really needed for journal hook since it it not
 really in a hook chain, but it"s standard for a Hook}
  if Code < 0 then Exit;

  {you should cancel operation if you get HC_SYSMODALON}
  if Code = HC_SYSMODALON then Exit;
  if Code = HC_ACTION then
  begin
    {
   The lParam parameter contains a pointer to a TEventMsg
   structure containing information on
   the message removed from the system message queue.
   }
    s := "";

    if EventStrut.message = WM_LBUTTONUP then
      s := "Left Mouse UP at X pos " +
        IntToStr(EventStrut.paramL) + " and Y pos " + IntToStr(EventStrut.paramH);

    if EventStrut.message = WM_LBUTTONDOWN then
      s := "Left Mouse Down at X pos " +
        IntToStr(EventStrut.paramL) + " and Y pos " + IntToStr(EventStrut.paramH);

    if EventStrut.message = WM_RBUTTONDOWN then
      s := "Right Mouse Down at X pos " +
        IntToStr(EventStrut.paramL) + " and Y pos " + IntToStr(EventStrut.paramH);

    if (EventStrut.message = WM_RBUTTONUP) then
      s := "Right Mouse Up at X pos " +
        IntToStr(EventStrut.paramL) + " and Y pos " + IntToStr(EventStrut.paramH);

    if (EventStrut.message = WM_MOUSEWHEEL) then
      s := "Mouse Wheel at X pos " +
        IntToStr(EventStrut.paramL) + " and Y pos " + IntToStr(EventStrut.paramH);

    if (EventStrut.message = WM_MOUSEMOVE) then
      s := "Mouse Position at X:" +
        IntToStr(EventStrut.paramL) + " and Y: " + IntToStr(EventStrut.paramH);

    if s <> "" then
       Form1.ListBox1.ItemIndex :=  Form1.ListBox1.Items.Add(s);
  end;
end;

procedure TForm1.Button_StartJourClick(Sender: TObject);
begin
  if FHookStarted then
  begin
    ShowMessage("Mouse is already being Journaled, can not restart");
    Exit;
  end;
  JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);
  {SetWindowsHookEx starts the Hook}
  if JHook > 0 then
  begin
    FHookStarted := True;
  end
  else
    ShowMessage("No Journal Hook availible");
end;

procedure TForm1.Button_StopJourClick(Sender: TObject);
begin
  FHookStarted := False;
  UnhookWindowsHookEx(JHook);
  JHook := 0;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  {the journal hook is automaticly camceled if the Task manager
 (Ctrl-Alt-Del) or the Ctrl-Esc keys are pressed, you restart it
 when the WM_CANCELJOURNAL is sent to the parent window, Application}
  Handled := False;
  if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then
    JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  {make sure you unhook it if the app closes}
  if FHookStarted then
    UnhookWindowsHookEx(JHook);
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
4-1099339625
Djuice
2004-11-01 23:07
2004.12.19
Help help help!!! КАК ЗАВЕРШИТЬ ПРОЦЕСС В ВИНДЕ, НАПРИМЕР explore


1-1102429934
Антоныч
2004-12-07 17:32
2004.12.19
Вопрос по экземплярам классов


14-1101665452
syte_ser78
2004-11-28 21:10
2004.12.19
Не прикол, правда интересно


1-1102318940
Виктор
2004-12-06 10:42
2004.12.19
Правильное унаследование свойств классов.


8-1096018445
PashkaCool
2004-09-24 13:34
2004.12.19
Как исключить из BitMap синий цвет?