Delphi - Tetszőleges alkalmazás „kilyukasztása”

forráskód letöltése
Saját alkalmazásunk Form-jainál tetszőleges körvonalat, alakzatot szabhatunk meg különféle régiók létrehozásával. Mostani példánkban ugyanezt a lehetőséget próbáljuk elérni más alkalmazások esetében. Így például bármely futó alkalmazás ablaka megváltoztatható.
Egy Timer komponens segítségével rendszeres időközönként ellenőrizzük, hogy melyik az aktuálisan futó program. Ehhez a GetForegroundWindow függvényt használjuk, mely visszaadja az aktív program ablakának azonosítóját. Ezt felhasználva lekérjük annak méretét a Getwindowrect függvénnyel egy TRect típusba.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  handle:=GetForegroundWindow;
  Getwindowrect(handle, r);
Ezt követően létrehozunk egy téglalap alakú régiót, felhasználva a lekérdezett ablak méretet, majd létrehozunk egy másik kör alakú régiót is.
  region1:=CreateRectRgn(0, 0, r.right-r.left, r.bottom-r.top);
  region2:=CreateEllipticRgn(0, 0, 80, 80);
E két régiót kombináljuk oly módon, hogy a téglalap alakú régióból kivágásra kerüljön a másodikként létrehozott kör alakú régió.
  CombineRgn(region1, region1, region2, RGN_DIFF);
Végső lépésként a SetWindowRgn függvény meghívásával az aktív ablakra beállítjuk ezt a régiót.
  SetWindowRgn(handle, region1, true);
end;