2011-12-20 13 views
1

Windows CEのタスクバーをC#でリフレッシュする可能性はありますか?Windows CEをリフレッシュ - タスクバー

私のソフトウェアでは、OpenNETCF.ToolHelp.ProcessEntry.Kill()によっていくつかのプロセスがkillされます。 これは問題なく動作しますが、アイコンはタスクバーから削除されますが、アイコンのスペースは残っています。いくつかのテストの後、私は約20のプロセスを殺しました、そして今、それはタスクバーからスタートボタンを押し出しました。

空のスペースは、クリックすることで削除されます。

C#-programからタスクバーを更新するにはどうすればよいですか?

編集:私は現在、CE 4.2

+0

あなたは間違った方法で問題を解決しようとしています。なぜこれらのすべてのプロセスを最初から殺しているのですか? –

+0

私はgpr​​s-connectionをrasmanagerで切断していますが、プロセスはまだ実行中ですが、接続が残っていません。 ウィンドウを閉じるにはrnaapp-processを終了する必要があります これはうまくいきますが、アイコンのスペースは削除されません。 – Karl

答えて

1

てみてください、クラス名として「HHTaskBar」を探し、タスクバーのウィンドウP /呼び出しのFindWindowへのハンドルを取得するために取り組んでいます。その後、ウィンドウを無効にします。 Damon8orの提案に基づいて

0

、ここに何が必要ないのサンプルコードは、次のとおりです。

[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