屏保后放mp3的问题? (50分)

  • 主题发起人 主题发起人 小城月光
  • 开始时间 开始时间

小城月光

Unregistered / Unconfirmed
GUEST, unregistred user!
各位富翁:
我想屏保后放mp3,通过重载wndproc方法
procedure TForm1.wndproc(var message: Tmessage);
begin
inherited;
if message.msg= WM_SYSCOMMAND then
begin
if message.WParam =SC_SCREENSAVE then
showmessage('haohao!');//假如放mp3
end;
end;
发现一个问题,屏保启动时一定要打开程序form1界面才执行showmessage,否则程序即使是最小化也不执行showmessage,为什么?
另外播放mp3时,我用
ShellExecute(handle,'open','E:/音乐/朴树/new boy.MP3','-s','',SW_SHOWNORMAL);
这样只能放一首,假如要放很多首,应该怎么办?谢谢!
 
后面这个问题你完全可以通过媒体控件来实现播放的,这样的话就由列表了
 
问题1,可能Form最小化时候,开始屏幕保护,并不会发消息给Form窗体。。实在不行可以
用全局消息钩子。。

问题2,看你那边播放器是什么?支持选中多个播放的应该可以,否则的话创建那播放器的播放列表,然后。。
 
楼上的两位大侠:
我做了一个全局钩子,不过好像还是不行

var
HookHandle: HHOOK;

function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
if (Code = HC_ACTION) then
if PMsg(Msg)^ .Message = wm_syscommand then
if PMsg(Msg)^.wParam =sc_screensave then
begin
showMessage('已经截获该消息');//在form最小化的时候,仍然不能截获消息,showmessage不能执行,似乎一定要form是一个top-level窗口才能截获消息,为什么?
end;
Result := CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);//用sendmessage在testhookproc中不能截获信息,一定要用postmessage可以截获消息,showmessage可以执行,但是执行后必须按ok键关闭showmessage窗口后,才能启动屏保,怎样让屏保不受影响直接启动?
end;
 
加入一个tiemer控件,执行调用过程后,让tiemer失效这样也行吧
 
利用Delphi强大的功能,再加上你的精彩设想可以很容易作出一个屏幕保护程序。下面就教你如何实现:

  一、创建窗体并加入控件。

  1、窗体

  名称:Form1

  属性:BorderStyle:  

bsNone;Color:clBlack;

     WindowState:wsMaximized;

  2、标签

  名称: Label1;

  属性: Caption:这是一个屏幕保护程序;

     Autosize:True ;Color:clBlack;Font:

红色;

  3、时钟

  名称: Timer1;

  属性: Interval :100;

  二、为了使该程序在每台计算机上都以同样大小显示,需要设置屏幕运行时的尺寸。

  在Form1的Form1create事件中加入以下代码。

   procedure TForm1.formCreate(Sendet:Tobject);

  begin

   if EnumDisplaySettings(nil, 0, lpDevMode) then

   begin

    lpDevMode.dmFields := DM_PELSWIDTH

    Or DM_PELSHEIGHT;

    lpDevMode.dmPelsWidth :=640;

    lpDevMode.dmPelsHeight := 480;

    ChangeDisplaySettings(lpDevMode, 0);

   end

   end;

  其中lpDevMode是TDeviceMode类型的全局变量。

  三、实现击键和鼠标移动后退出程序。

  在form1的FormKeyDomng事件中加入:

  procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

  begin

   Form1.Close;

  end;

  在Form1的FormMousrMove事件中加入以下代码:

  procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

  begin

   if (bz=0) then

   begin

   xx:=x;

   yy:=y;

   bz:=1;

   end

   else if( x〈〉xx)or(y〈〉yy) then

   Form1.close;

  end;

  其中,xx,yy和bz是integer类型的全局变量。

  四、实现Label的来回移动。

  在Timer1 的Timer1Timer事件中加入以下代码:



  procedure TForm1.Timer1Timer(Sender: TObject);

  begin

   t:=t+1;

   if t〈=Form1.Width+Label1.Width then

  begin

   Label1.Left :=Form1.Width-t;

  end

   else

  t:=0;

  end;

  其中t是integer类型的全局变量。

  如果你还想为你的屏幕保护程序加上背景音乐,首先把mmsystem单元添加到implementation单元部分的uses子句中,然后在Form1的formShow事件中加入playsound(′c:/1.wav′,0,snd-async or snd-loop)(“1.wav”是你将要播放的音乐文件,假定位于c:/ )。

  运行你的程序,将会看到“这是一个屏幕保护程序”从右到左在屏幕上循环滚动,并伴有音乐。最后将编译好的.exe文件,改名为.scr文件,拷贝到计算机Windows目录下,通过Windows的屏幕属性选择运用该程序作为计算机的屏幕保护程序,到此整个屏幕保护程序制作设定完毕。
 
楼上的这位,辛苦你了,写了这么多,不过好像没有看清楚我的问题[:)]
 
最小化干吗 直接隐藏不就行了~~~~~~
 
是要隐藏,但是最小化都收不到消息,隐藏就更收不到了
 
...........如果你只是要不看到Form的话.............把界面弄成透明~~~`
 
再写一个控制台程序。
 
后退
顶部