在Delphi中我调用setwindowlong(applition.handle,gwl_exstyle,
ws_ex_toolwindow)可以让Delphi程序不在任务栏中显示,我现在在此程序中调用 WinExec(Pchar('路径名',SW_MINIMIZE))启动另一程序,并用FindWindow(nil,'程序名')取得其窗口的句柄,但我再次调用setwindowlong(另一窗口句柄,gwl_exstyle,ws_ex_toolwindow)时,该程序在任务栏上却仍能找到,而该程序窗口右上角的最小化和最大化不见了,只剩下关闭程序('X')这一项。
附setwindowlong的api资料:
函数功能:该函数改变指定窗口的属性。函数也将在指定偏移地址的一个32位值存入窗口的额外窗口存。
函数原型:LONG SetWindowLong(HWN hWnd,int nlndex.LONG dwNewLong);
参数:hWnd:窗口句柄,及间接声明的该窗口所属的类。
nlndex:给出了要设置的值的零起点的偏移地址。有效值为从0到额外窗口存储空间的字节数一4。 测试代码:
procedure TForm1.Button1Click(Sender: TObject);
var hwndcalculator: HWND;
begin
hwndcalculator := FindWindow(nil,'计算器');
SetWindowLong(hwndcalculator,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
对于setwindowlong(HWN hWnd,int nlndex.LONG dwNewLong)的nlndex参数的说明我看不明白(我是个新手),我试着换成别的参数但好像都不行。另外使用setwindowlong我可以让我的delphi程序不在任务栏上显示,而且在获得了窗口的句柄之后我可以关闭计算器。
请问这段代码的功能能不能实现?如果哪位大虾知道的话请指教,多谢!!!
ws_ex_toolwindow)可以让Delphi程序不在任务栏中显示,我现在在此程序中调用 WinExec(Pchar('路径名',SW_MINIMIZE))启动另一程序,并用FindWindow(nil,'程序名')取得其窗口的句柄,但我再次调用setwindowlong(另一窗口句柄,gwl_exstyle,ws_ex_toolwindow)时,该程序在任务栏上却仍能找到,而该程序窗口右上角的最小化和最大化不见了,只剩下关闭程序('X')这一项。
附setwindowlong的api资料:
函数功能:该函数改变指定窗口的属性。函数也将在指定偏移地址的一个32位值存入窗口的额外窗口存。
函数原型:LONG SetWindowLong(HWN hWnd,int nlndex.LONG dwNewLong);
参数:hWnd:窗口句柄,及间接声明的该窗口所属的类。
nlndex:给出了要设置的值的零起点的偏移地址。有效值为从0到额外窗口存储空间的字节数一4。 测试代码:
procedure TForm1.Button1Click(Sender: TObject);
var hwndcalculator: HWND;
begin
hwndcalculator := FindWindow(nil,'计算器');
SetWindowLong(hwndcalculator,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
对于setwindowlong(HWN hWnd,int nlndex.LONG dwNewLong)的nlndex参数的说明我看不明白(我是个新手),我试着换成别的参数但好像都不行。另外使用setwindowlong我可以让我的delphi程序不在任务栏上显示,而且在获得了窗口的句柄之后我可以关闭计算器。
请问这段代码的功能能不能实现?如果哪位大虾知道的话请指教,多谢!!!
var hwndcalculator: HWND;
begin
hwndcalculator := FindWindow(nil,'计算器');
SetWindowLong(hwndcalculator,GWL_HWNDPARENT,WS_EX_TOOLWINDOW);
end;要分!~~
zhguiqiang你的问题我想了一下,如果在同一个程序中的话可以这么做:
procedure TForm1.Button1Click(Sender: TObject);
begin
enablewindow(handle,false);//窗口1不可用
form2.show;
end;procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
enablewindow(form1.handle,true);//可用
end; 如果是两个Delphi程序的话可以用FindWindow取得另一程序窗口的句柄,再用ShowWindow显示另一程序;用同样的办法在另一Delphi程序中添加相应代码。
如果另一个不是Delphi程序的话,那我就没办法了,你最好发个帖问一下。