Newsgroup: it.comp.lang.delphi
Titolo: Catturare l'apertura di una nuova finestra in windows

Il programma in taskbar dovrebbe riuscire a catturare l'apertura diq
ualunque finestra catturandone l'handle.
Servirebbe qualcosa tipo: "if nuovafinestra.creata then
handle:=nuovafinestra.handle" dove .creata è boolean e handle....è l'handle
della nuova finestra.
Poi dall'andle dovrei ricavare il titolo della finestra...ma questo è
un'altro discorso eventualmente ci penso dopo..:o)
GRazie
--
Giulio Pipitone (
www.fighters4web.com
 )
#sito per la lotta agli abusi in rete#

 ualunque finestra catturandone l'handle.
Finestre di cosa?
Della stessa applicazione?
Di qualsiasi applicazione?
Nel secondo caso credo debba usare un hook.
Bye
A.

ualunque finestra catturandone l'handle.
Devi usare un hook system-wide di tipo WH_SHELL.
Per un esempio pratico di uso degli hook:
http://www.geocities.com/andrealaforgia/keylogger.zip
Il meccanismo da applicare, nel tuo caso, e` simile.

Ho scaricato il keylogger e l'ho guardato ma quando bisogna installare
l'hook...seguo il percorso e....
procedure InstallKeyboardSystemWideHook; stdcall; external 'KLLIB.DLL';
...beh ma così cosa me ne faccio? :((
Ho provato ad aprire il DLL ma non ne vuole sapere......mi ritrovo con un
"hook" (non ne ho mai fatti cmq) nascosto in un dll....che faccio?
--
Giulio Pipitone (
www.fighters4web.com
 )
#sito per la lotta agli abusi in rete#
"Andrea Laforgia" <x@x.x> ha scritto nel messaggio
news:3fo80vsiobovg244t...@4ax.com...


 ...beh ma così cosa me ne faccio? :((
Toh, questo è un esempio bello e pronto di hook della shell.
- file di progetto -
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ClipBrd;
type
  TForm1 = class(TForm)
    CaricaHook: TButton;
    RimuoviHook: TButton;
    ListBox1: TListBox;
    procedure CaricaHookClick(Sender: TObject);
    procedure RimuoviHookClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure MessageHandler(var Messaggio:TMsg; var ToHandle: boolean);
    { Private declarations }
  public
    { Public declarations }
  end;
Procedure Load;   stdcall; External 'ShellDLL.DLL';
Procedure Remove; stdcall; External 'ShellDLL.DLL';
var
  Form1: TForm1;
  WM_NOTIFY: Cardinal;
implementation
{$R *.DFM}
procedure TForm1.MessageHandler(var Messaggio:TMsg; var ToHandle: boolean);
begin
  if (Messaggio.message = WM_NOTIFY) then
      ListBox1.items.add(ClipBoard.AsText);
      ClipBoard.Clear;
end;
procedure TForm1.CaricaHookClick(Sender: TObject);
begin
  Load();
end;
procedure TForm1.RimuoviHookClick(Sender: TObject);
begin
  Remove();
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MessageHandler;
  WM_NOTIFY := RegisterWindowMessage('MyMessage');
end;
end.
--
- file di libreria -
library shellDLL;
uses
  SysUtils,
  ClipBrd,
  Messages,
  Windows;
{$R *.RES}
var
hHook : THandle;
WM_NOTIFY: Cardinal;
Function GetCaption ( WindowsHandle: THandle ): String;
Var WText : PChar;
begin
  GetMem(WText,GetWindowTextLength(WindowsHandle));
  GetWindowText(WindowsHandle,WText,GetWindowTextLength(WindowsHandle)+ 1);
  Result:=String(WText);
  FreeMem(WText);
end;
Function ShellProc(nCode:Integer; WPar : Wparam; LPar :Lparam) : Integer;
Stdcall;
var TempString: String;
Begin
   if (nCode = HSHELL_WINDOWCREATED) then begin
        With Clipboard do begin
             Clear;
             TempString := IntToStr(wPar) + ' - ' + GetCaption(WPar);
             SetTextBuf(PChar(TempString));
        end;
        PostMessage(HWND_BROADCAST,WM_NOTIFY,0,0);
   end;
   if (nCode < 0) then
      Result := CallNextHookEx(hHook,nCode,WPar,LPar);
end;
Procedure Load; stdcall;
Begin
   hHook:=SetWindowsHookEx(WH_SHELL,@ShellProc,hInstance,0);
end;
Procedure Remove; stdcall;
Begin
   UnHookWindowsHookEx(hHook);
end;
Exports
Load,Remove;
begin
     WM_NOTIFY:=RegisterWindowMessage('MyMessage');
end.
--
- Carlo -

....
GRazie mille...ci emtterň un po' ac apirlo ma domani mi ci metto con tempoe
pazienza...:-D
Ciao.


 Ciao.
Ciao
Andrea