我想在后台调用某个程序,要求隐藏其界面,请问怎样才能做到。(300分)

  • 主题发起人 MR.ZHANG
  • 开始时间
M

MR.ZHANG

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在后台调用某个程序,要求隐藏其界面,请问怎样才能做到。要求:在任务管理器的应用程序中找不到该程序,只能在进程中保留。请问怎样做?
我可以给500分
 
做为一种服务程序自启动
 
我希望能提供完整的解决方案,不能一带而过!
 
如果调用的程序是普通的程序这样就可以了
WinExec(PCHAR('NotePad.exe'),SW_HIDE);
 
你可以这样做成一个服务
   .服务的代码必须要有一个一般的main或者WinMain函数。这个函数应该会马上调用
StartServiceCrtlDispatcher函数。通过调用这个函数,你可以让SCM得到
ServiceMain函数的指针,这样在SCM要启动该服务时,就可以调用它

   .在SCM要启动服务的时候,就会调用ServiceMain函数。例如,如果管理员在服务
管理器中按下启动的按钮,SCM就会在一个独立的线程中执行ServiceMain函数。
ServiceMain应该调用RegisterServiceCtrlHandler函数,这样可以注册一个
Handler函数,以便SCM对服务进行控制。Handler函数的名字可以是任意的,不过
它会在Handler下的文档中列出来。RegisterServiceCtrlHandler函数会返回一个
句柄,在服务需要发送状态信息给SCM时,可以通过该句柄进行。

   .ServiceMain函数也必须启动做该服务实际工作的线程。在服务停止前,
ServiceMain函数是不应该有返回的。当它返回的时候,服务已经停止了。

   .Handler函数包含了一个switch语句,用来分析由SCM传送过来的请求。默认的情况,
SCM可以发送以下任何的的控制常数:

     SERVICE_CONTROL_STOP - 要服务停止


     SERVICE_CONTROL_PAUSE - 要服务暂停

     SERVICE_CONTROL_CONTINUE - 要服务继续

     SERVICE_CONTROL_INTERROGATE - 要服务马上报告它的状态

     SERVICE_CONTROL_SHUTDOWN - 告诉服务即将关机

  也可以创建自定义的常数(值在128到255之间),并且通过SCM发送给服务
 
ligia:不行,任务栏中还有小图标。
 
你调用的是什么程序,我调用 notePad.exe没有出现.
WinExec(PCHAR('NotePad.exe'),SW_HIDE);
 
notepad这种最简单的程序当然可以了,其他的比如MS SQL Server Agent或者是ccproxy.exe就不行了。
 
我说了简单的程序可以,复杂就不行了.如果这个程序存在自动恢复,
自动创建动态标题及TrayIcon.什么办法也白搭.
 
triton谢谢您发给我的程序!
 
ShellExecute
 
顶部