解决方案 »
- 在动态库中使用XML的问题?
- delphi调用存储过程的问题
- 急急!!!医院影像信息信号到达工作站的电脑上,怎么样在DELPHI中捕捉将信号转化为图像??求救!!
- 简单问题,进来变可得分?
- 怎样来实现?请多关照
- 在线等,请教!把Delphi的应用程序转换为ActiveForm组件后,怎么调试这个ocx组件?
- 在如下控件单击事件中要如何写代码?
- 请问怎样监测网卡的当前传输速率?
- 请大家进来坐坐,一起谈谈自己----一个程序员的周末“休息”是如何度过的
- form动态创建时,怎么触发button的单击事件?
- idhttp如何post xml数据,
- FastReport 4.9.31,划线、变量、套打问题
希望窗口在不设置HWND_TOPMOST时也可以不响应“显示桌面”
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
protected
procedure CreateParams(var Params: TCreateParams); override;
public
end;var
Form1: TForm1;implementationuses Unit2;{$R *.dfm}{ TForm1 }procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := WS_POPUP or WS_BORDER;
Params.ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST or WS_EX_NOACTIVATE or WS_EX_WINDOWEDGE;
Params.WndParent := GetDesktopWindow;
end;procedure TForm1.btn1Click(Sender: TObject);
begin
TForm2.ShowForm(Handle);
end;end.Form2的代码:unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm2 = class(TForm)
private
FParHandle: THandle;
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AHandle: THandle); reintroduce;
class procedure ShowForm(AHandle: THandle);
end;implementation{$R *.dfm}{ TForm2 }constructor TForm2.Create(AHandle: THandle);
begin
FParHandle := AHandle;
inherited Create(Application);
end;procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := FParHandle;
end;class procedure TForm2.ShowForm(AHandle: THandle);
var
Form2: TForm2;
begin
Form2 := TForm2.Create(AHandle);
Form2.ShowModal;
end;end.
也是思路啊。。你还可以注册win+D 热键。。如果是wind+D 就显示?
Openicon(application.Handle);
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender : TObject);
private
{ Private declarations }
fOldAppParentHandle : THandle;
fProgManHandle : THandle;
protected
procedure WMSysCommand(var Message : TWMSysCommand); message WM_SYSCOMMAND;
procedure AppRestore (Sender : TObject);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
fOldAppParentHandle := GetParent(Application.Handle);
fProgManHandle := FindWindow('Progman', nil);
Windows.SetParent(Application.Handle, fProgManHandle);
Application.OnRestore := AppRestore;
end;
procedure TForm1.WMSysCommand(var Message : TWMSysCommand);
begin
case (Message.CmdType and $FFF0) of
SC_MINIMIZE :
Windows.SetParent(Application.Handle,fOldAppParentHandle);
SC_RESTORE :
Windows.SetParent(Application.Handle, fProgManHandle );
end; {case}
inherited;
end;procedure TForm1.AppRestore(Sender : TObject);
begin
Windows.SetParent(Application.Handle, fProgManHandle);
end;
end.
你是想让该窗口永远在桌面上么?
如果是的话,vc里面可以截获最小化消息,然后再恢复位置,可能会有闪烁。
目前就想到这个方法。。
这里发言,表示您接受了CSDN社区的用户行为准则。
请对您的言行负责,并遵守中华人民共和国有关法律法规,尊重网上道德。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。
#include "windows.h"HHOOK hhkLowLevelKybd;LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
HHOOK hkKbd;
hkKbd=SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MessageBox( NULL,
TEXT("禁用所用键,按确定结束禁用。"),
TEXT("禁用所用键"), MB_OK);
UnhookWindowsHookEx(hkKbd);
return 0;
}LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
int i;
BOOL bControlKeyDown = 0; switch (nCode)
{
case HC_ACTION:
if(pkbhs->vkCode==VK_DELETE&& (pkbhs->flags & LLKHF_ALTDOWN) &&VK_CONTROL )
return 1;
for(i=1;i<255;i++)
if(pkbhs->vkCode==i)
return 1;
break;
default:
return CallNextHookEx (hhkLowLevelKybd, nCode, wParam, lParam);
}
return 0;
}