windows içinde 3 kere tıklamayı anlamak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

windows içinde 3 kere tıklamayı anlamak

Mesaj gönderen fox »

iyi günler formu araştırdım ama genellikle uygulmaya mousedown/up ile tuş yollanması gösterilmiş benim aradığım tıklanmayı algılamak ve forumdan şöyle bir kod buldum

Kod: Tümünü seç

type
  TForm1 = class(TForm)
    procedure aloooo(var Message:Tmessage); message WM_RButtonDown;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.aloooo(var Message: Tmessage);
begin
ShowMessage('asd');
end;
bu sağ tık olayı ama o problem değil 3 tık işinide timerle ayarlamayı düşünüyorum ama burada probelem olan şey formun içindeki sağ tık ı algılıyor ben istiyorum ki windowstaki sağ tıkı algılasın
Projemide açıklayayım bir kaç taktik gelirse daha iyi olacağını düşünüyorum. online sözlük yapıyorum mesala ingilizce bir döküman okurken takıldığım sözcüğe çift tıklayıp onu seçtikten sonra 3. clickte clipboarda alıp idhttp.get ile sayfaya yollayıp içeriğini pos() copy metoduyla alıcağım burada clipboarda almadan daha profesyonel bir şekilde yapmamız mümkünmüdür?
depresif
Üye
Mesajlar: 16
Kayıt: 09 Mar 2008 03:08

Re: windows içinde 3 kere tıklamayı anlamak

Mesaj gönderen depresif »

mousehook diye araştırırsanız neticeye varabilirsiniz

kolay gelsin
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

Re: windows içinde 3 kere tıklamayı anlamak

Mesaj gönderen fox »

depresif yazdı:mousehook diye araştırırsanız neticeye varabilirsiniz

kolay gelsin
SAĞOL
Kodu buldum isteyen olursan buyrun

Kod: Tümünü seç

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; 

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. 
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

Re: windows içinde 3 kere tıklamayı anlamak

Mesaj gönderen fox »

yine yazıyorum biraz kendi kendime konuşur gibi oldu ama kusura bakmayın bu mouse hook olayının kilitlenmesi olağan birşeymidir. mesela bilgisayarı açtığımda açınca bir problem yok ama biraz geçince açınca bilgisayar kilitleniyor bu hook çalışmıyor ayrıcana kılavyenin üstündeki ses alçaltma/yükseltme işlemiyor. başka programlarla çakışma ihtimali olurmu? Her şeyi tam ayarladım şimdi yamuk yapmaya başladı. cevabınızı bekliyorum
Cevapla