任务栏的宽度,高度和位置

Nel*_*eph 3 delphi

我需要获得任务栏的宽度和高度.我还需要任务栏的位置.我怎么能得到这个?

Cos*_*und 9

根据你所需要的是信息,你可能想看看Forms.TScreen.WorkAreaRect,因为工作区域确定这样减去不仅任务栏上,而且任何其他"栏"可能会限制可用的桌面空间.

您可以简单地使用Screen.WorkAreaRect代码,因为Screen: TScreen变量在Forms单元中声明并由VCL初始化.


小智 7

好吧,因为这个问题是关于如何获得任务栏坐标的,所以我决定通过使用带有ABM_GETTASKBARPOS消息参数的SHAppBarMessage函数发布另一个版本的方法来实现这一点.

我发布了两个版本; 一个有一个没有给定任务栏句柄.请注意,如果要发送ABM_GETTASKBARPOS消息,则应在APPBARDATA结构中指定hWnd成员,如ABM_GETTASKBARPOS描述中所述.所以第一个版本对于这种情况是安全的.第二个虽然有效,但它是正式错误的.

uses ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
  Data: TAppBarData;
begin
  Data.hWnd := FindWindow('Shell_TrayWnd', nil);
  Data.cbSize := SizeOf(TAppBarData);

  if Data.hWnd <> 0 then
    if SHAppBarMessage(ABM_GETTASKBARPOS, Data) = 1 then
      ShowMessage(
                      'Left: ' + IntToStr(Data.rc.Left) + 'px ; ' +
                      'Top: ' + IntToStr(Data.rc.Top) + 'px ; ' +
                      'Width: ' + IntToStr(Data.rc.Right - Data.rc.Left) + 'px ; ' +
                      'Height: ' + IntToStr(Data.rc.Bottom - Data.rc.Top) + 'px'
                  );
end;
Run Code Online (Sandbox Code Playgroud)

请注意,此版本(未指定TAppBarData.hWnd成员)可以正常工作,但根据MSDN,它是错误的.

procedure TForm1.Button2Click(Sender: TObject);
var
  Data: TAppBarData;
begin
  Data.cbSize := SizeOf(TAppBarData);

  if SHAppBarMessage(ABM_GETTASKBARPOS, Data) = 1 then
    ShowMessage(
                    'Left: ' + IntToStr(Data.rc.Left) + 'px ; ' +
                    'Top: ' + IntToStr(Data.rc.Top) + 'px ; ' +
                    'Width: ' + IntToStr(Data.rc.Right - Data.rc.Left) + 'px ; ' +
                    'Height: ' + IntToStr(Data.rc.Bottom - Data.rc.Top) + 'px'
                );
end;
Run Code Online (Sandbox Code Playgroud)