關於Service問題 |
尚未結案
|
white
一般會員 發表:18 回覆:7 積分:5 註冊:2003-02-17 發送簡訊給我 |
請問各位高手二個問題.謝謝您! [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 發送簡訊給我 |
引言: 請問各位高手二個問題.謝謝您! [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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |