2011-12-20 59 views
1

是否有可能通過C#刷新Windows CE中的任務欄?刷新Windows CE - 任務欄

在我的軟件中,我殺了一些進程通過OpenNETCF.ToolHelp.ProcessEntry.Kill() 這工作正常,該圖標從任務欄中刪除,但圖標的空間仍然留下。經過一些測試後,我殺死了大約20個進程,現在它從任務欄中刪除了啓動按鈕。

通過單擊它可以刪除空白區域。

如何從我的C#程序刷新任務欄?

編輯:我目前正在CE 4.2

+0

您試圖以錯誤的方式解決問題。爲什麼你首先要殺死所有這些進程? – 2011-12-20 09:00:58

+0

我正在通過rasmanager斷開我的gprs連接,但該進程仍在運行,儘管沒有任何連接。 所以我必須殺死rnaapp進程關閉窗口 這工作正常,但圖標的空間不會被刪除 – Karl 2011-12-20 09:02:10

回答

1

嘗試獲取句柄到任務欄窗口P /調用FindWindow函數,尋找「HHTaskBar」作爲類名稱。然後使窗口無效。

0

通過Damon8or基礎上的建議,這裏是示例代碼已經做了你需要的東西:

[DllImport("coredll.dll")] 
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

[DllImport("coredll.dll")] 
public static extern IntPtr SendMessage(IntPtr hWnd, int nMsg, IntPtr wParam, IntPtr lParam); 

private const int WM_MOUSEMOVE = 0x0200; 

public static void RefreshTrayArea() 
{ 
    // The client rectangle can be determined using "GetClientRect" (from coredll.dll) but 
    // does require the taskbar to be visible. The values used in the loop below were 
    // determined empirically. 
    IntPtr hTrayWnd = FindWindow("HHTaskBar", null); 
    if (hTrayWnd != IntPtr.Zero) 
    { 
     int nStartX = (Screen.PrimaryScreen.Bounds.Width/2); 
     int nStopX = Screen.PrimaryScreen.Bounds.Width; 
     int nStartY = 0; 
     int nStopY = 26; // From experimentation... 
     for (int nX = nStartX; nX < nStopX; nX += 10) 
      for (int nY = nStartY; nY < nStopY; nY += 5) 
       SendMessage(hTrayWnd, 
        WM_MOUSEMOVE, IntPtr.Zero, (IntPtr)((nY << 16) + nX)); 
    } 
} 

希望有所幫助。

+0

謝謝,我希望這可以幫助別人! 但由於這個問題是從2011年,我不需要一個答案了:) – Karl 2017-06-06 14:46:32