線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1688
推到 Plurk!
推到 Facebook!

如何讓工作管理員的程式 Show出 Form??

答題得分者是:jimmy_wei
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-01 15:55:38 IP:60.248.xxx.xxx 未訂閱
Dear All     我有設一個自動排定工作在每日早上 8:00 會執行一個程式 Send_Message.exe,但是早上8:00 我的Windows 2000 還沒 Login ,當我過8:00 Login 後我的程式已經執行了,但是桌面看不到;此程式是我撰寫的,這程式是類似鬧鐘提醒的程式,我要在裡面加入如何的Cord才會Show From 呢 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=20222317&CC=452263"> ======================= 謝謝各位大德不吝賜教!! 小弟感激不進 =======================
------

南無藥師琉璃光如來
保佑您
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-02 13:10:17 IP:210.69.xxx.xxx 未訂閱
就算後來才 LOGIN, Send_Message.exe 執行後的畫面應該會保留才對阿, 除非是執行完畢立刻關閉的程式 不然寫個 LOG, 去看 LOG 就知道執行結果
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-03 01:39:12 IP:211.74.xxx.xxx 未訂閱
寫個程式,用ShowWindow(程式的Handle, SW_SHOW)看看Form會不會跑出來吧~~
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-03 09:11:20 IP:60.248.xxx.xxx 未訂閱
Dear minjiu :    謝謝你,我有試著用 ShowWindow(SendMsgForm.Handle, SW_SHOW) or ShowWindow(Application.Handle, SW_SHOW); 但是還是不行,程式還是沒秀出Form< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-03 10:05:14 IP:210.243.xxx.xxx 未訂閱
引言: Dear minjiu : 謝謝你,我有試著用 ShowWindow(SendMsgForm.Handle, SW_SHOW) or ShowWindow(Application.Handle, SW_SHOW); 但是還是不行,程式還是沒秀出Form< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
如果是我的話我會從下面幾點查起 1. 先確定自己的程式碼無誤, 也就是自行執行Send_Message.exe看看程式是否有正常執行, Form是否有正常顯示出來 2. 若第一點驗證無誤, 用Spy 等視窗監視軟體看看自己的Form是否存在於使用者桌面, 若不存在, 表示有可能被帶到Winlogon桌面(當使用者未登入時, 但程式工作時間已到, 此時程式由誰帶起?? 被帶到哪個桌面??), 若是如此就不難解釋你登入後看不到Form但程式卻在工作管理員看的到. 發表人 - zard 於 2005/02/03 10:19:30
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-03 10:24:40 IP:61.222.xxx.xxx 未訂閱
補充: 事實上,主要是使用者桌面尚未建立。 而應用程式卻已執行,故無法正確顯示視窗。 除非執行的動作,在LOGIN後執行。 或者在程式中加入 檢查桌面是否已經建立的動作。 當桌面建立後,在 ShowWindow。 這樣就可以了。
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-04 08:54:26 IP:60.248.xxx.xxx 未訂閱
謝謝大家 Zard & Wameng : 應該像你們講的一樣. 哪我該如何處理ㄋ< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-04 09:10:28 IP:211.23.xxx.xxx 未訂閱
引言: 謝謝大家 Zard & Wameng : 應該像你們講的一樣. 哪我該如何處理ㄋ< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > ======================= 如wameng大大所言, 你可以加上判斷使用者桌面是否存在的碼試試.
procedure TForm1.Button1Click(Sender: TObject);
var
  hDesktop: HDESK;    begin
  hDesktop := OpenDesktop('Default', 0, FALSE, DESKTOP_ENUMERATE);
  if hDesktop = 0 then
  begin
    // 使用者桌面不存在
  end
  else
  begin
    // 使用者桌面存在
    CloseDesktop(hDesktop);
  end;
end;
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-02-04 09:58:50 IP:61.222.xxx.xxx 未訂閱
補充(建議):    您可以在程式一執行時,不斷的重複檢查(如Zard該段程式碼) 例如: While 沒有找到桌面 do Sleep(100); 直到找到桌面再執行下一行。    
program Project1;    uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};    {$R *.RES}    begin
  .............<- 在此添加迴圈判斷。
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-02-04 10:03:49 IP:60.248.xxx.xxx 未訂閱
Dear Zard : 謝謝你的指教,我有照你的方法去試,但是我要如何Login Windows 後程式會Show Form 呢 如下: < class="code"> hDesktop := OpenDesktop('Default', 0, FALSE, DESKTOP_ENUMERATE); if hDesktop = 0 then begin // 使用者桌面不存在 ///Memo2.Text := '程式桌面不存在'; SendMsgForm.Show; ShowWindow(SendMsgForm.Handle, SW_SHOW); end else begin // 使用者桌面存在 CloseDesktop(hDesktop); SendMsgForm.Show; ShowWindow(SendMsgForm.Handle, SW_SHOW); end; ======================= 謝謝各位大德不吝賜教!! 小弟感激不進 =======================
------

南無藥師琉璃光如來
保佑您
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-02-04 10:15:54 IP:210.243.xxx.xxx 未訂閱
把wameng和我的結合在一起.
program Project1;    uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};    {$R *.RES}    Function CheckDesktop(): Boolean;
begin
var
  hDesktop: HDESK;    begin
  Result := FALSE;
  hDesktop := OpenDesktop('Default', 0, FALSE, DESKTOP_ENUMERATE);
  if hDesktop = 0 then
  begin
    // 使用者桌面不存在
  end
  else
  begin
    // 使用者桌面存在
    CloseDesktop(hDesktop);
    Result := TRUE;
  end;
end;    begin
  while Not CheckDesktop then Sleep(100);      Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-02-22 10:25:59 IP:60.248.xxx.xxx 未訂閱
Dear Zard : 謝謝你的回答 我將此段放到 class="code"> If ApplicationUse('Send_Message.exe',AP_pid) then begin KillSelectedProcess(AP_pid); end; Application.Initialize; Application.CreateForm(TSendMsgForm,SendMsgForm); Application.Run; 讓重複的Kill 但是我試了之後,Logout 在Logining 還是沒有出現此程式的Form < > 真不知如何< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進 =======================
------

南無藥師琉璃光如來
保佑您
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-02-22 17:01:38 IP:220.130.xxx.xxx 未訂閱
有另一種情況要檢查一下, 當你下ShowWindow後, 因為你後頭的程式是一組迴圈, 不斷地檢查東西時, 要記得在適當的地方下Application.ProgressMessage; 讓全部畫面重新刷新一次, 否則有關畫面處理的部份都會沒顯示出來。
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-02-24 17:15:07 IP:60.248.xxx.xxx 未訂閱
我試了還是不行ㄋ< > 不知如何是好< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進 =======================
------

南無藥師琉璃光如來
保佑您
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-02-24 19:16:08 IP:210.68.xxx.xxx 未訂閱
其實吶!! 應該是不行的!! 您在還沒登入之前程式就開好了。 沒錯程式是有開起來,但是並不是開在您目前正在使用的terminal, 而是另一個terminal,感覺就像是terminal連進去三個user,但是三 個人都有獨立使用的感覺,你在工作管理員裡可以看到開了那些程 式,但是你本身這個terminal卻看不到其它的程式!! 可惜你的電腦不會通靈,因為這種情況真的很像和地府的人溝通!! 所以給你其它的解法你參考一下。 1.把排程裡的程式改放在啟動下。 2.把你的程式改寫成service。 以上僅代表本台立場,希望各位大大不吝賜教!!
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-02-24 21:57:37 IP:218.175.xxx.xxx 未訂閱
引言:我有設一個自動排定工作在每日早上 8:00 會執行一個程式 Send_Message.exe,但是早上8:00 我的Windows 2000 還沒 Login ,當我過8:00 Login 後我的程式已經執行了,但是桌面看不到;此程式是我撰寫的,這程式是類似鬧鐘提醒的程式,我要在裡面加入如何的Cord才會Show From 呢
如果是系統執行的 請使用另類解決方式 把Send_Message.exe壓縮成winrar自解壓縮檔 把原本系統執行的部份 經自解壓縮檔程序就把系統的執行緒執行完 變成由OS下的登入者 如果你的OS是server級版本 如未登入要執行 請寫成service 重點在於 1 程式執行是由系統 2 還是由登入者執行程式 如1 寫service 如2 利用 rar自解壓縮檔 讓原系統執行部份完成 再執行部份=登入者後的執行 類似問題 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61310 忘記說一下 rar自解壓縮檔是要設定決對路徑解壓後 自動執行程序 發表人 - conundrum 於 2005/02/24 22:06:22
系統時間:2024-05-18 6:41:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!