从另一个应用程序更改表单边框

时间:2014-10-14 17:32:22

标签: c++ c delphi window border

我现在正试图用gamelauncher窗口解决问题.. 所以我的问题是:

如何更改另一个进程窗口的表单属性(我需要使用带圆角的表单)?或者甚至可以在同一个过程中,因为我可以将DLL注入/挂钩。

Click to see what I mean I want to do

2 个答案:

答案 0 :(得分:1)

您需要做的是:

1) Get the window handle of the window你想“破解”。

2)创建圆形区域。我通常会为此目的使用CreatePolyRgn() API。

3)使用SetWindowRgn() API将区域应用于表单。

*)请注意,某些应用程序会控制其区域并覆盖您的设置。 (但不太可能。)

答案 1 :(得分:1)

procedure TForm6.btn1Click(Sender: TObject);
var
  hWndX : HWND;
  hRegX: HRGN;
begin
  hWndX := FindWindow(nil,PChar('YourWindowName'));
  if hWndX <> 0  then
  begin
    hRegX := CreateEllipticRgn(1, 1, 300, 300);
    SetWindowLong(hWndX, GWL_STYLE, GetWindowLong(hWndX, GWL_STYLE) and not WS_BORDER and not WS_SIZEBOX and not WS_DLGFRAME );
    SetWindowPos(hWndX, hWndX, Left, Top, Width, Height, SWP_FRAMECHANGED);
    SetWindowRgn(hWndX, hRegX, True);
  end
  else
  MessageBox(Handle,PChar('Cant find the window andle'),PChar('Error!'),0)
end;

所有这些API调用在所有语言中看起来都是一样的。