none
屬性 ShowInTaskbar 的用法為何? RRS feed

  • 問題

  •  

    如上述,

    我有一個程式,並不想讓 User 在工作列看到它,

    (關於點選、呼叫的問題是由另一支程式控制的,它算是 Child 程式。)

    於是我查詢 MSDN 發現了這個屬性。

    經試用後,的確可以讓程式執行,且不會在工作列看到它。

    但是問題來了。

    Q.      我經由底下的 Code

                Process p = new Process();
                // Redirect the output stream of the child process.
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.FileName = strProgID;
                p.StartInfo.Arguments = strParam;
                p.Start();
                p.WaitForInputIdle();
                System.Threading.Thread.Sleep(nSleep);

    會找不到這個子程式的 Hwnd。更別說透過 Hwnd SendMessage 控制它了。(不設 Form.ShowInTaskbar = false 時,是 OK 的)

    請問這個屬性有用錯嗎?還是我少設了什麼東西?

    謝謝大家

     

    2007年1月30日 上午 02:35

解答

  • HI,

    我試驗了一下, ShowInTaskbar = false 之後, 呼叫Win32 API的FindWindow函數, 還是可以找到變成小圖示的程式, 不會找不到

    tihs

    2007年2月5日 上午 03:32

所有回覆

  • HI,

    ShowInTaskbar的用法是這樣沒錯, 但是Process類別是用來啟動應用程式的, 可是您的程式好像是用來啟動執行中的程式, 好像怪怪的

    tihs

    2007年1月30日 上午 02:46
  • tihs 你好

          又來協助我了,真是感謝你。

    我表達錯誤,真是對不起,犯了小朱大大說的,『因為不清楚的描述,所以不清楚的解答』

    我是啟動另一個『應用程式』沒錯

    就是主程式 A ----> 用Process 類別 呼叫 WinForm程式 B

    我想在程式 B 裏加上 ShowInTaskbar = false 的描述。

    但是因為加了這一行之後

    主程式 A 在呼叫完 Process 類別之後,似乎抓不到程式 B 的 Hwnd ,(我是用它來讓主程式 A 控制 B 的)

    即使 Sleep 好幾秒  (這是另一位大大指點的)

    所以這是我現在的問題。

    感謝

    2007年1月30日 上午 03:11
  • HI,

    我試驗了一下, ShowInTaskbar = false 之後, 呼叫Win32 API的FindWindow函數, 還是可以找到變成小圖示的程式, 不會找不到

    tihs

    2007年2月5日 上午 03:32
  • 我照你的方式試了一下,的確,

                Process p = new Process();
                // Redirect the output stream of the child process.
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.FileName = strProgID;
                p.StartInfo.Arguments = strParam;
                p.Start();
                p.WaitForInputIdle();
                System.Threading.Thread.Sleep(nSleep);

                myIntPtr = p.MainWindowHandle;

    在上述的方式中,p.MainWindowHandle 無法傳回我預期的數值 (當 ShowInTaskbar = false 時)

    但若以 FindWindow 輔助尋找的話,是可以達成我的需求,非常感謝。

    我忘了以別的方式去解決這個問題。

    只是這麼一來,我另外的程式 B 就得更改,比如它的 WindowText 必須唯一。

    還有原來的 Function 必須另外加 Call FindWindow 去取得程式 B 的 Hwnd。

    我想這也是不得己的作法吧。

    感謝你的協助。

    (只不過,為什麼當 ShowInTaskbar = false,new Process() 的方式,無法直接取得它的 Hwnd ,是有點可惜)。

    2007年2月5日 上午 06:14