如何讓工作管理員的程式 Show出 Form?? |
答題得分者是:jimmy_wei
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
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 發送簡訊給我 |
|
minjiu
中階會員 發表:27 回覆:119 積分:69 註冊:2002-06-26 發送簡訊給我 |
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 謝謝大家 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 發送簡訊給我 |
補充(建議): 您可以在程式一執行時,不斷的重複檢查(如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 發送簡訊給我 |
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 發送簡訊給我 |
把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 發送簡訊給我 |
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 發送簡訊給我 |
|
elvis114
一般會員 發表:37 回覆:53 積分:18 註冊:2003-06-17 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
其實吶!!
應該是不行的!!
您在還沒登入之前程式就開好了。
沒錯程式是有開起來,但是並不是開在您目前正在使用的terminal,
而是另一個terminal,感覺就像是terminal連進去三個user,但是三
個人都有獨立使用的感覺,你在工作管理員裡可以看到開了那些程
式,但是你本身這個terminal卻看不到其它的程式!!
可惜你的電腦不會通靈,因為這種情況真的很像和地府的人溝通!! 所以給你其它的解法你參考一下。
1.把排程裡的程式改放在啟動下。
2.把你的程式改寫成service。 以上僅代表本台立場,希望各位大大不吝賜教!!
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
引言:我有設一個自動排定工作在每日早上 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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |