Programowanie w języku Delphi » FAQ

Jak pobrać uchwyt okna nad którym znajduje się kursor

Aby pobrać uchwyt okna nad którym znajduje się kursor, wystarczy skorzystać z funkcji API - WindowFromPoint oraz GetCursorPos. Oto kod dla Win32 oraz dla .NET:

// .NET
uses Windows, System.Text; // <-- potrzebny moduł
 
var
  P : TPoint;
  H : THandle;
  Buffer : StringBuilder;
 
begin
{ utworzenie klasy }
  Buffer := StringBuilder.Create(128);
{ pobranie pozycji kursora }
  GetCursorPos(P);
{ pobranie uchwytu okna }
  H := WindowFromPoint(P);
{ dla przykładu - pobranie tekstu okna nad którym znajduje się kursor }
  GetWindowText(H, Buffer, Buffer.Capacity);
  { Buffer.ToString zawiera tekst okna }
  Buffer.Free;
end;
 
// Win32
 
uses Windows;
 
var
  P : TPoint;
  H : THandle;
  Buffer : array[1..128] of Char;
 
begin
{ pobranie pozycji kursora }
  GetCursorPos(P);
{ pobranie uchwytu okna }
  H := WindowFromPoint(P);
{ dla przykładu - pobranie tekstu okna nad którym znajduje się kursor }
  GetWindowText(H, Buffer, SizeOf(Buffer));
  { Buffer zawiera tekst okna }
end;

5 komentarzy

Bruno(M) 2005-08-11 12:55

Można także skożystać z kodu \"Jak wyciągnąć hasło ukryte pod gwiazdkami?\" ze stronki http://www.tomex.kom.pl/index.[...]&program=delphi&faq=26

Krecik 2004-03-06 14:38

Adam: prawda, że zamierzasz napisać książkę o .NET w Delphi? :>

Setesh 2004-03-05 18:56

Wersja Dla BCB :
np:
Dodajemy Komponent TTimer i :
Unit1.h :

public:        // User declarations
  //TPoint P;
  tagPOINT P;
  THandle H;
  char Buffer[127];

Unit1.cpp :

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  GetCursorPos(&P);
  int a = GetWindowText(WindowFromPoint(P), Buffer, sizeof(Buffer));
  Caption = IntToStr(a);
}

Działa dobrze ;-)

Adam Boduch 2004-03-05 16:47

hehe :) Wez sie nie odzywaj jak, nie wiesz o czy mowisz... :) Łatwo powiedziec jest do dupy, jak nie wiesz co to jest dokladnie... :-/

koxak 2004-03-05 12:03

nie ma jak to Win32 ,NET jest do d**y nawet nie ma tam [delphi]showmessage('')[/delphi]