如何判断屏幕保护程序是否正在运行?(50分)

  • 主题发起人 主题发起人 wuyi
  • 开始时间 开始时间
W

wuyi

Unregistered / Unconfirmed
GUEST, unregistred user!
要在各种屏保下通用。
 
看API:
SystemParametersInfo
的帮助吧,
其中有SPI_GETSCREENREADER
PI_GETSCREENSAVEACTIVE
的选项。
 
固然是高手,只是我不知道在delphi如何传递boolean变量的指针,请给一下
示例!
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);
 
哪里需要传BOOL指针,DELPHI已经封装了,直接用就是了
 
//下面是我用的例子,
//在98下成功

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
{
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);

Windows NT 5.0 and later, Windows 98: Determines whether
a screen saver is currently running on the window station
of the calling process. The pvParam parameter must point to
a BOOL variable that receives TRUE if a screen saver is
currently running, or FALSE otherwise. Note that only the
interactive window station, "WinSta0", can have a screen saver
running.
}
procedure TForm1.Button1Click(Sender: TObject);
var
b:integer;
begin
b:=0;
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,0,@b,0);
memo1.lines.add(inttostr(b));
if b<>0 then
showmessage(inttostr(b));
end;

end.
 
amo:
程序确实能运行,但返回的b值老是0,不管屏保是否运行。
 
amo的程序是button的click事件,此时肯定没有运行屏保,
当然b=0
 
我当然是改过程序了,当然屏保是在运行的时候是0。
 
忘了说明了,
我用了个timer,其ontimer是指向buttonclick的。
你再将程序运行,
等屏保出来后就行了。
 
我测试过amo的程序,用timer代替buttonclick,结果是正确的.

另外提醒一点,在设置屏幕保护时的那个"预览",点击后并不是真正运行"屏幕保护",
我猜你可能用"预览"来做测试了.
 
; 各位说得在理,系统自动启动的屏保返回的结果是正确的,而当我
直接运行该屏保时结果就不对,不知什么原因?有没有其它解决方案?
分将另加.
 
>>直接运行该屏保
什么意思? 用鼠标双击? 那当然不行!
 
直接运行?屏保是一种执行文件,直接运行与EXE没什么两样,想让SystemParametersInfo知道可是太难了。 :)
 
to menxin:
屏保是一种执行文件,但它的后缀不是不一样吗?那干嘛不用.exe就行了?
 
后退
顶部