用 Delphi 开发一款桌面程序,不使用VCL,完全使用 windwos sdk的方式。要求如下: 1、程序包含多个窗口,但都不能在任务栏上显示图标;2、程序窗口始终显示在桌面上,不能被最小化。即使用户按下 WIN+D,程序窗口依然保持显示在桌面上。3、窗口始终置底,就是说即使用户点击我们的窗口,窗口不能被前置遮挡住其他程序的窗口。
时间: 2024-02-15 16:04:39 浏览: 25
好的,按照您的要求,我为您提供一份 Delphi 使用 Windows SDK 开发的示例代码。这个示例代码包含两个窗口,一个主窗口和一个子窗口。主窗口不会在任务栏上显示图标,子窗口始终显示在桌面上且不能被最小化,而且始终置底。
首先,我们需要在 Delphi 中创建一个新的项目。在项目中添加两个窗口,一个主窗口和一个子窗口。然后,我们需要在主窗口的 OnCreate 事件中设置窗口样式,使其不在任务栏上显示。代码如下:
```
procedure TForm1.FormCreate(Sender: TObject);
begin
// 设置窗口样式,不在任务栏上显示
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
```
接下来,我们需要在主窗口的 OnShow 事件中创建子窗口,并设置子窗口的样式,使其始终显示在桌面上且不能被最小化。代码如下:
```
procedure TForm1.FormShow(Sender: TObject);
var
hwndChild: HWND;
begin
// 创建子窗口
hwndChild := CreateWindowEx(WS_EX_TOOLWINDOW or WS_EX_TOPMOST or WS_EX_TRANSPARENT or WS_EX_LAYERED,
PChar('Static'), nil, WS_POPUP or WS_VISIBLE,
0, 0, Screen.Width, Screen.Height,
Handle, 0, HInstance, nil);
// 设置子窗口样式,始终显示在桌面上且不能被最小化
SetWindowLong(hwndChild, GWL_EXSTYLE, GetWindowLong(hwndChild, GWL_EXSTYLE) or WS_EX_TOOLWINDOW or WS_EX_TOPMOST);
end;
```
最后,我们需要在子窗口的 OnCreate 事件中设置子窗口的样式,使其始终置底。代码如下:
```
procedure TForm2.FormCreate(Sender: TObject);
begin
// 设置窗口样式,始终置底
SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
end;
```
这样,我们就实现了一个包含两个窗口的 Delphi 桌面程序,主窗口不会在任务栏上显示图标,子窗口始终显示在桌面上且不能被最小化,而且始终置底。