在dpr中加入
var
p:hwnd;
begin
p:=CreateMutex(nil,true,'dqmisApplication');
if GetLastError<>Error_Already_exists then
begin
   //你自己的程序,比如创建显示窗体什么的了
end
else
      ReleaseMutex(p);
end;

解决方案 »

  1.   

    {$R *.RES}var
     Mutex:THandle;begin  Mutex := CreateMutex (nil,True,'SingleApp');
      if GetLastError <> ERROR_ALREADY_EXISTS then
      begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
      end
      else
      MessageBox( 0,'已经运行!','Info',mb_ok);
    end.
      

  2.   

    哦,对,上面的代码是写在dpr文件中的,并且在最后一行end.前
    加入ReleaseMutex (Mutex );语句释放;
      

  3.   

    做屏保不是那么简单的,以我的经验,须考虑一下几点:
    1、只运行一个范例,方法很多,楼上有,不赘述;
    2、通知系统屏保已经启动,用SENDMESSAGE(),同时禁止系统所有热键(可惜只在WIN9X下有效,NT/2000下……,所以我现在已经不做屏保了。);
    3、在KEYPRESS和MOUSEMOVE中解除屏保状态,包括:SENDMESSAGE()通知系统,恢复热键;在MOUSEMOVE中判断是否发生移动(注意加判断);判断密码是否正确(读注册表,否则不通用),以决定是否退出程序;……
    4、程序应全屏并ALWAYS ONTOP!
    5、程序应有两个参数(启动时),以决定是设置还是运行!!
    ……
    我劝你,别费劲做了!98连微软都抛弃了!!
      

  4.   

    z_x_b(长弓落日金沙丘) 言之有理