如何隱藏其他執行檔 |
尚未結案
|
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
yachu721 您好: 答案是肯定的,以下範例以 "記事本" 程式為例,執行程式前 (或執行程式後亦可) 啟動 "記事本" 程式,然後點選程式的 Button1 即可切換 "記事本" 程式的隱藏與顯示狀態:
void __fastcall TForm2::Button1Click(TObject *Sender) { HWND H1 = FindWindow(NULL, "未命名 - 記事本"); // 取得目標視窗的 Handle if (IsWindowVisible(H1)) { //如果該視窗呈顯示的狀態 ::ShowWindow(H1, SW_HIDE); // 設為隱藏狀態 } else { ::ShowWindow(H1, SW_SHOW); // 設為顯示狀態 } }7 天天敲鍵盤 v 時時按滑鼠 8 |
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
yachu721 您好:
引言:每次都麻煩您了~~ 您真是無所不知呀~~~謝謝~~謝謝~~呵呵~我沒那麼神啦< >,只不過您最近的幾個問題,我恰恰好都有過相關經驗罷了,就算我沒看到您的提問,相信也會有其他人提供適當的參考資訊讓您解決問題的< >。 引言:還有一個小疑問 在視窗上已隱藏 但工具列是否也有辦法隱藏呢如果您是指 "由自己的程式去關閉另一支程式的工具列",那麼就理論上而言,如果您能知道要處理的那個可視對象之 Handle 值,就應該可以設定它的顯示與否?以下我以 WordPad 為例,程式執行後可以點擊 Button1 來切換 WordPad 工具列的隱藏與顯示狀態: void __fastcall TForm1::Button1Click(TObject *Sender) { HWND H1 = FindWindow(NULL, "文件 - WordPad"); // 找尋 WordPad if (H1 != NULL) { // 如果找到目標視窗的話 // 取得工具列底層的 ControlBar 的 HWND HWND hControlbar = FindWindowEx(H1, NULL, "AfxControlBar42u", NULL); if (hControlbar) { // 如果找到的話 // 取得工具列的 HWND HWND hToolbar = FindWindowEx(hControlbar, NULL, "ToolbarWindow32", NULL); if (hToolbar) { // 如果找到的話 if (IsWindowVisible(hToolbar)) { // 如果是顯示狀態 ::ShowWindow(hToolbar, SW_HIDE); // 設定成隱藏狀態 } else { ::ShowWindow(hToolbar, SW_SHOW); // 設定成顯示狀態 } } } } }發表人 - RedSnow 於 2005/11/19 20:29:58 |
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
RedSnow大大您好
引言: 呵呵~我沒那麼神啦,只不過您最近的幾個問題,我恰恰好都有過相關經驗罷了,就算我沒看到您的提問,相信也會有其他人提供適當的參考資訊讓您解決問題的您真是客氣了~~ 真的是覺得不吝於教導別人 真是優呀 先跟大大您說抱歉 我沒搞清楚我的狀況 讓您多費神了 當使用您第一篇的方法的時候 在視窗上有達到隱藏的功能 但是在 class="code"> ///////防止程式重覆執行 Application->Title = FormMain->Caption; HANDLE PrevInstHandle; Mutex = OpenMutex(SYNCHRONIZE, false, Application->Title.c_str()); if (Mutex != NULL) { String AppTitle = Application->Title; Application->ShowMainForm = false; SetWindowText(Application->Handle, NULL); PrevInstHandle = FindWindow("TApplication", AppTitle.c_str()); if (IsIconic(PrevInstHandle)) ShowWindow(PrevInstHandle, SW_RESTORE); else { BringWindowToTop(PrevInstHandle); SetForegroundWindow(PrevInstHandle); } Application->Terminate(); } else Mutex = CreateMutex(NULL, false, Application->Title.c_str()); ///////防止程式重覆執行 發表人 - yachu721 於 2005/11/19 21:44:51 發表人 - yachu721 於 2005/11/19 21:53:32 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
yachu721 您好: 建議您下回要描述這種情形時,最好是將 "工具列" 寫成 "工作列" 會比較好,要不然就直接寫英文的 ToolBar (工具列) 或是 TaskBar (工作列),這樣子比較不容易造成誤解。 回到您的問題來,您這次的問題的處理對象是自己寫的程式,那麼您是想要在該程式中自身去處理 "隱藏時不顯示於工作列" 這個動作,還是仍要比照 "記事本" 那個範例,由另一支程式來處理? 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/11/20 00:01:37
|
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
RedSnow大大您好
引言: 建議您下回要描述這種情形時,最好是將 "工具列" 寫成 "工作列" 會比較好,要不然就直接寫英文的 ToolBar (工具列) 或是 TaskBar (工作列),這樣子比較不容易造成誤解。不好意思 讓您多費心了 下次會改進 ccc 引言: 回到您的問題來,您這次的問題的處理對象是自己寫的程式,那麼您是想要在該程式中自身去處理 "隱藏時不顯示於工作列" 這個動作,還是仍要比照 "記事本" 那個範例,由另一支程式來處理?請問大大 仍是要比照"記事本"那個範例來處理 有方法可以解決嗎 發表人 - yachu721 於 2005/11/20 00:37:49 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
yachu721 您好:
引言:那是否該在B程式內作一個Timer來偵測A所送出的訊息 還是有比較好的方法呢無需用到 Timer 的,透過 Application 的 OnMessage 或是 WndProc 都可以攔截、檢查訊息,站上也有不少的資料可供參考,您多試試看那一個比較合用吧。 引言:您是說使用TrayIcon元件來達成隱藏的效果嗎我沒有使用該元件,不過該程式確實是有用到 SystemTray (因為該程式有用到 SystemTray 所以才會有 "不顯示於工具列" 的需求),我沒測試過其它的狀況,不過既然程式是您自己寫的,您想如何處理都可以的,對吧~ 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/11/20 21:29:19 |
yachu721
初階會員 發表:51 回覆:98 積分:44 註冊:2003-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |