我有一段通讯后台程序,从数据库生成通讯包,并发送。并循环实现。用DELPHI写的,如何在后台运行呢? 并提供托盘显示,以及系统监控的功能。

解决方案 »

  1.   

    你说的后台就是把它从任务栏里搞掉吧?参考以下:
    var es:integer;es:=getwindowlong(application.handle,GWL_EXSTYLE);
    es:=es or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW;
    setwindowlong(application.handle,GWL_EXSTYLE,ES);放工程文件里!另外要隐藏进程:
    FORMCREATE事件:
    var pid:DWORD;
    begin
    pid:=GetCurrentProcessID();
    if RegisterServiceProcess(pid,1)=0 then
     messagebox(handle,'can't hide!','error',MB_OK);
    end;
      

  2.   

    我的意思原想生成一个EXE文件,由CREATEPROCESS等方法调用就好。因为用户退出,我的进程还需要处于活动状态!可以考虑用托盘的方法,(怎么找呀这个控件)并不是隐藏它。只是在用户启动它后,退出,该程序仍然活动。
      

  3.   

    应该创建一个SERVICE或者SERVICE APPLICATION就可以了。
    这样如果在NT 或2000下还能随系统自动运行
      

  4.   

    这样的SERVICE如何获得数据库的参数呢?如何传数据库连接参数
      

  5.   

    SERVICE 和 SERVICE APPLICATION 有什么区别?
      

  6.   

    procedure TfrmSEND.FillDataStructure;
    begin
       with IconData do begin
          cbSize := sizeof(TNOTIFYICONDATA);
          wnd :=Self.Handle ;
          uID := 0; // is not passed in with message so make it 0
          uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
          hIcon := Self.Icon.Handle;
          StrPCopy(szTip,'NET SEND短信发送程序');//托盘图标标题
          uCallbackMessage := WM_TOOLTRAYICON;
       end;
    end;
    Shell_NotifyIcon(NIM_DELETE,@IconData);//删除托盘图标Shell_NotifyIcon(NIM_Add,@IconData);   //添加托盘图标
      

  7.   

    1:隐藏运行:在implementation后添加声明:
     function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
     RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏
     RegisterServiceProcess(GetCurrentProcessID, 0);//显示
      这样用ALT+DEL+CTRL看不见进程
    2:修改dpr文件:application.showmainform:=false;//不显示窗口
      

  8.   

    这样做了,程序其实还是前台运行呀。就是说启动这个进程的用户LOGOUT的时候,进程就死亡了吧?
      

  9.   

    应该创建一个SERVICE或者SERVICE APPLICATION就可以了。
    这样如果在NT 或2000下还能随系统自动运行