2013-10-21 4 views
8

スタートアップ時に実行されるビジュアルスタジオを使用してキオスクスタイルのC#アプリケーションを作成し、フルスクリーンに展開してタスクバーをカバーする必要があります。スタートアップタスクバーは、フルスクリーンのC#アプリケーションをカバーします

私は通常の設定ボーダースタイルをnoneにしてエクステントを埋めており、アプリケーションを手動で起動すると完全に機能します。

スタートメニューのスタートアップフォルダのショートカットを使用してアプリケーションを起動すると、タスクバーがプログラムの上に表示され、フォームのどこかをクリックするとフォームが表示されませんトップに戻る。

誰でもこの問題が発生する可能性があります。

+0

それを中断するtherプログラム.. – Rohit

+0

これはWindows XPのクリーンインストールです。私は何版を覚えていない、インストールされている唯一のものは、。NET配布可能であり、USBCANアダプタのためのいくつかのドライバです。 – Hugoagogo

+0

どのような技術を使用していますか? WPFまたはWinForms? – galenus

答えて

0

回避方法:起動時に、explorer.exeを殺す - あなたは必要ありません - >タスクバーが消えます。 必要な、私もこの別の時間に行われているタスクマネージャ

+0

フォームを表示する前にエクスプローラが完全に開いているかを確認する簡単な方法はありますか – Hugoagogo

+0

完全に開いていますか?あなたはもっと具体的になりますか? – Ondrej

+0

タスクバーのように完全に開いているので、フォームが開始されたときにタスクバーが正しくオーバーレイされるように表示されます。 – Hugoagogo

3

を使用して、それを起動します。私はあなたがこの

を意味だと思う

screensize.Maximize(this) 

public class Screensize 
{ 
    /// <summary> 
    /// Selected Win AI Function Calls 
    /// </summary> 

    public class WinApi 
    { 
     [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")] 
     public static extern int GetSystemMetrics(int which); 

     [DllImport("user32.dll")] 
     public static extern void 
      SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, 
         int X, int Y, int width, int height, uint flags); 

     private const int SM_CXSCREEN = 0; 
     private const int SM_CYSCREEN = 1; 
     private static IntPtr HWND_TOP = IntPtr.Zero; 
     private const int SWP_SHOWWINDOW = 64; // 0x0040 

     public static int ScreenX 
     { 
      get { return GetSystemMetrics(SM_CXSCREEN); } 
     } 

     public static int ScreenY 
     { 
      get { return GetSystemMetrics(SM_CYSCREEN); } 
     } 

     public static void SetWinFullScreen(IntPtr hwnd) 
     { 
      SetWindowPos(hwnd, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW); 
     } 
    } 

    /// <summary> 
    /// Class used to preserve/restore state of the form 
    /// </summary> 
    public class FormState 
    { 
     private FormWindowState winState; 
     private FormBorderStyle brdStyle; 
     private bool topMost; 
     private Rectangle bounds; 

     private bool IsMaximized = false; 

     public void Maximize(Form targetForm) 
     { 
      if (!IsMaximized) 
      { 
       IsMaximized = true; 
       Save(targetForm); 
       targetForm.WindowState = FormWindowState.Maximized; 
       targetForm.FormBorderStyle = FormBorderStyle.None; 
       targetForm.TopMost = false; 
       WinApi.SetWinFullScreen(targetForm.Handle); 
      } 
     } 

     public void Save(Form targetForm) 
     { 
      winState = targetForm.WindowState; 
      brdStyle = targetForm.FormBorderStyle; 
      topMost = targetForm.TopMost; 
      bounds = targetForm.Bounds; 
     } 

     public void Restore(Form targetForm) 
     { 
      targetForm.WindowState = winState; 
      targetForm.FormBorderStyle = brdStyle; 
      targetForm.TopMost = topMost; 
      targetForm.Bounds = bounds; 
      IsMaximized = false; 
     } 
    } 

とちょうどあなたの形式で呼び出しを

これは2013年の投稿です...

+0

これをありがとう、私はこれを数週間テストすることはありませんが、それは両方の良いだけでなく、まっすぐ前方に解決策、UpVoted今と私はこれを修正する機会を得た後に正しいとマークします。 – Hugoagogo

関連する問題