全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1159
推到 Plurk!
推到 Facebook!

關於Service問題

尚未結案
white
一般會員


發表:18
回覆:7
積分:5
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-21 18:26:06 IP:218.164.xxx.xxx 未訂閱
請問各位高手二個問題.謝謝您! [1].假設一個NT Service已經在運行,該Service內有一個Form1是保持在Hide狀態,有什麼方法可叫起那個Form1變成Show狀態. [2].我有一個程式是在NT Server下運行的.ServiceExecute像底下這樣,現在要加入一個Form1,當service一啟動後會Show出來.請問我該如何做.可否給個方向! void __fastcall TBaccaratServer1::ServiceExecute(TService *Sender) { srand(GetTickCount()); DataModule1->ConnectMySQL(true,"localhost","test","root","1234"); myServer* p=myServer::CreateSocket(1234); while(!Terminated) { ;略~~~ ServiceThread->ProcessRequests(false); } }
------
white
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-29 09:01:57 IP:203.73.xxx.xxx 未訂閱
引言: 請問各位高手二個問題.謝謝您! [1].假設一個NT Service已經在運行,該Service內有一個Form1是保持在Hide狀態,有什麼方法可叫起那個Form1變成Show狀態. [2].我有一個程式是在NT Server下運行的.ServiceExecute像底下這樣,現在要加入一個Form1,當service一啟動後會Show出來.請問我該如何做.可否給個方向! void __fastcall TBaccaratServer1::ServiceExecute(TService *Sender) { srand(GetTickCount()); DataModule1->ConnectMySQL(true,"localhost","test","root","1234"); myServer* p=myServer::CreateSocket(1234); while(!Terminated) { ;略~~~ ServiceThread->ProcessRequests(false); } }
white 你好:
(1)一般最常見的做法,是當 Service 被啟動的時候,在工作列(右下角)產生一
   個小 Icon,然後 Double Click 這個小 Icon 來決定你所隱藏的 Form 是否
   該 Show
//--------------------------------------------------------------------
// 在右下角新增 Icon 的方法,可用 Win32 API Shell_NotifyIcon,請參考以
// 下的範例程式碼, Unit2.cpp
NOTIFYICONDATA IconData; // 設為全域變數
void __fastcall TForm2::AddMyIcon(void)
{
   IconData.cbSize=sizeof(NOTIFYICONDATA);
   IconData.hWnd=Handle;
   IconData.uID=1;
   IconData.uFlags=NIF_MESSAGE | NIF_ICON | NIF_TIP;
   IconData.uCallbackMessage=WM_MYSERVICEMESSAGE;
   IconData.hIcon=this->Icon->Handle;
   strcpy(IconData.szTip, "MyService1");
   Shell_NotifyIcon(NIM_ADD, &IconData);
}
//--------------------------------------------------------------------
// 刪除右下角 Icon 的方法,請參考以下的範例程式碼, Unit2.cpp
void __fastcall TForm2::DelMyIcon(void)
{
   Shell_NotifyIcon(NIM_DELETE, &IconData);
}
//--------------------------------------------------------------------
// 另外,還必須為你的 Form2 新增接收自訂 Message 的功能
// Unit2.h
#define WM_MYSERVICEMESSAGE WM_USER 1
class TForm2 : public TForm
{
__published:
   // 略...
protected:
   MESSAGE void __fastcall MyService1Message(TMessage &Msg);
BEGIN_MESSAGE_MAP
   VCL_MESSAGE_HANDLER(WM_MYSERVICEMESSAGE, TMessage, MyServiceMessage);
END_MESSAGE_MAP(TForm);
private:
public:
   __fastcall TForm2(TComponent* Owner);
   void __fastcall AddMyIcon(void);
   void __fastcall DelMyIcon(void);
};
// Unit2.cpp
MESSAGE void __fastcall TForm2::MyService1Message(TMessage &Msg)
{
   if(Msg.LParam==WM_LBUTTONDBLCLK)
   {
      Show();
   }
}
(2)想要在 Service 一啟動的時候就把 Form2 Show 出來的話,請參考以下程式
   碼範例
// Unit1.cpp
#include "Unit2.h"
TForm2 *f2=NULL;
void __fastcall TMyService1::ServiceExecute(TService *Sender)
{
   while(!Terminated)
   {
      Sleep(10);
      ServiceThread->ProcessRequests(false);
   }
}
void __fastcall TMyService1::ServiceStart(TService *Sender, bool &Started)
{
   Started=true;
   f2=new TForm2(Svcmgr::Application);
   f2->Show();
}
void __fastcall TMyService1::ServiceStop(TService *Sender, bool &Stopped)
{
   Stopped=true;
   delete f2;
}
(3)做以上動作之前,記得先把 Service 的 Interactive 屬性設為 true
備註: 以下連結中有一個完整的 Servcie Application 範例程式,不妨參考看看
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
white
一般會員


發表:18
回覆:7
積分:5
註冊:2003-02-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-03 22:07:47 IP:218.164.xxx.xxx 未訂閱
感謝版主熱心幫忙解答,受益良多. 謝謝! white
------
white
系統時間:2024-06-29 21:03:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!