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

Adam Boduch

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;
FAQ

5 komentarzy

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

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

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 ;-)

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

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