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

如何隱藏其他執行檔

尚未結案
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-18 23:11:33 IP:203.67.xxx.xxx 未訂閱
請問大大 假設有兩個執行檔 是否有辦法在一個執行檔中 控制另一個執行檔隱藏或顯示 若有辦法程式碼又為何呢
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-19 10:11:55 IP:59.115.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-19 13:50:10 IP:203.67.xxx.xxx 未訂閱
RedSnow大大您好 每次都麻煩您了~~ 您真是無所不知呀~~~謝謝~~謝謝~~ 還有一個小疑問 在視窗上已隱藏 但工具列是否也有辦法隱藏呢 發表人 - yachu721 於 2005/11/19 14:28:23
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-19 20:28:37 IP:61.230.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-19 21:29:26 IP:203.67.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-19 23:58:54 IP:59.115.xxx.xxx 未訂閱
yachu721 您好:    建議您下回要描述這種情形時,最好是將 "工具列" 寫成 "工作列" 會比較好,要不然就直接寫英文的 ToolBar (工具列) 或是 TaskBar (工作列),這樣子比較不容易造成誤解。    回到您的問題來,您這次的問題的處理對象是自己寫的程式,那麼您是想要在該程式中自身去處理 "隱藏時不顯示於工作列" 這個動作,還是仍要比照 "記事本" 那個範例,由另一支程式來處理 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/11/20 00:01:37
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-20 00:34:00 IP:203.67.xxx.xxx 未訂閱
RedSnow大大您好  
引言: 建議您下回要描述這種情形時,最好是將 "工具列" 寫成 "工作列" 會比較好,要不然就直接寫英文的 ToolBar (工具列) 或是 TaskBar (工作列),這樣子比較不容易造成誤解。
不好意思 讓您多費心了 下次會改進 ccc
引言: 回到您的問題來,您這次的問題的處理對象是自己寫的程式,那麼您是想要在該程式中自身去處理 "隱藏時不顯示於工作列" 這個動作,還是仍要比照 "記事本" 那個範例,由另一支程式來處理?
請問大大 仍是要比照"記事本"那個範例來處理 有方法可以解決嗎 發表人 - yachu721 於 2005/11/20 00:37:49
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-20 13:53:28 IP:61.230.xxx.xxx 未訂閱
yachu721 您好:    我比照 "記事本" 那個範例的方式做過測試,以程式 A 去直接處理另一支程式使用到類似寫法 (不可重覆執行) 的程式 B,結果是不可行。 但是程式 B 本身有處理最小化時,不顯示圖示於系統工作列的設計,因此我改成在程式 A 用 SendMessage 的方式對程式 B 送出最小化的系統訊息,當程式 B 收到該訊息後,就由自身去處理最小化及隱藏起來的動作,這樣子就不會顯示於系統工具列上面了。 7 天天敲鍵盤 v 時時按滑鼠 8
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-20 14:37:26 IP:203.67.xxx.xxx 未訂閱
RedSnow大大您好 最後在問大大幾個問題 CCC  
引言:因此我改成在程式 A 用 SendMessage 的方式對程式 B 送出最小化的系統訊息
那是否該在B程式內作一個Timer來偵測A所送出的訊息 還是有比較好的方法呢
引言: 自身去處理最小化及隱藏起來的動作,這樣子就不會顯示於系統工具列上面了。
您是說使用TrayIcon元件來達成隱藏的效果嗎 發表人 - yachu721 於 2005/11/20 14:38:48
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-20 19:02:59 IP:59.115.xxx.xxx 未訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-11-20 20:24:57 IP:203.67.xxx.xxx 未訂閱
謝謝RedSnow大大的指導 那我就朝這個方向來努力了.. 再次感謝RedSnow大大.......
系統時間:2024-05-12 10:45:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!