Ukrywanie paska zadań w Windows XP Windows Vista i Windows 7

Cel artykułu

Przedstawiony artykuł odpowiada na pytanie: "Jak ukryć paskek zadań w Windows XP, Windows Vista i Windows 7?"

Ponieważ autor interesuje się zagadnieniem użycia w artykułach na portalu 4programmers.net dwóch języków – polskiego, jako że portal jest polski, i dowolnego innego (w przypadku autora są to język polski i angielski), istnieje też drugie, równie ważne pytanie, na które odpowiada artykuł, tj. "Jak opisać kod programu dwujęzycznie w języku XML?"

Dwujęzyczne dokumentowanie kodu źródłowego

Czy ma sens pisanie o dwujęzycznym dokumentowaniu kodu?

Tak, skoro są kraje gdzie obowiązują dwa języki urzędowe np. Kanada (angielski i francuski). Są kraje gdzie obowiązują dwa alfabety np. Turcja (pismo arabskie i pismo łacińskie).

W nauce programowania, w edukacji w Polsce, zwolennicy pielęgnowania tradycji na Kaszubach, czy na Śląsku, być może chcieliby zastosowania takiej formy zapisu kodu źródłowego na poziomie politechnik i uniwersytetów lokalnych.

Autor często bywa na Kaszubach, gdzie znajdują się dwujęzyczne znaki drogowe z nazwami miejscowości, zapisane po polsku i po kaszubsku, a więc istnieją już wzorce podobnego postępowania, które znalazły realizację.

Szkic autorski, czy standard?

Język C# i język XML są standardami, natomiast ten artykuł prezentuje szkic autorski. Zawarte w kodzie liczne przykłady ropoznawalne po tagach:

<en>, <pl>

mogą stanowić bazę do rozważań nad standardem, a nadzieją autora jest zainteresowanie i dyskusja innych uczestników portalu 4programmers.net, czego owocem mógłby być podobny artykuł, może prezentujący zupełnie inne podejście.

Dlaczego pewne fragmenty kodu nie zostały usunięte?

Chodzi o symulację sytuacji, w której przewiduje się wykorzystanie tych fragmentów w większym projekcie, gdzie temat ukrywania paska zadań jest tylko drobnym elementem składowym, natomiast energia zużyta na zdobycie wiedzy związanej z paskiem zadań, dała dodatkową wiedzę, która będzie wykorzystana na dalszych etapach projektu. Fragmenty związanego z tym kodu nie były na obecnym etapie tłumaczone na polski.

Warte polecenia

bilingualhouse.com, Dziecko dwujęzyczne u logopedy

delphi.lt, Dwujęzyczność w Walii

Kod programu

Moduł Form1.cs

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using NSTaskbar;

namespace NSLan4Avalon
{
    /// <summary>
    /// <en>This solution Single Document Interface (SDI) main form class</en>
	/// <pl>
	/// Klasa okna głównego tego projektu typu Single Document Interface (SDI)
	/// </pl>
	/// </summary>
	public partial class Form1 : Form
	{
		[DllImport("user32.dll")]
		static extern IntPtr GetSystemMenu(
			IntPtr hWnd,
			Boolean bRevert
			);

		[DllImport("user32.dll")]
		static extern bool DeleteMenu(
			IntPtr hMenu,
			UInt32 uPosition,
			UInt32 uFlags
			);

		/// <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx">
		/// <en>MSDN, ShowWindow function</en>
		/// <pl>MSDN, Funcja "Pokaż okno"</pl>
		/// </see>
		/// <en><!--Not used parts stay not translated--></en>
		/// <pl><!--Fragmenty nie używane pozostają nie przetłumaczone--></pl>
		enum ShowWnd
		{
			/*
			// Minimizes a window, even if the thread that owns the window is
			// not responding. This flag should only be used when minimizing
			// windows from a different thread
			SW_FORCEMINIMIZE = 11,
			 */

			///<en>Hides the window and activates another window</en>
			///<pl>Ukrywa okno i aktywuje inne okno</pl>
			SW_HIDE = 0,

			///<en>Maximizes the specified window</en>
			///<pl>Maksymalizuje wybrane okno</pl>
			SW_MAXIMIZE = 3,

			/// <en>
			/// Minimizes the specified window and activates the next top-level
			/// window in the Z-order.
			/// </en>
			/// <pl>
			/// Minimalizuje wybrane okno i aktywuje następne okno top-level
			/// w porządku Z-order
			/// </pl>
			SW_MINIMIZE = 6,

			/// <en>
            /// Activates and displays the window. If the window is minimized or
			/// maximized, the system restores it to its original size and
			/// position. An application should specify this flag when
			/// restoring a minimized window.
			/// </en>
			/// <pl>
			/// Aktywuje i wyświetla okno. Jeżeli okno jest zminimalizowane lub
			/// zmaksymalizowane, system przywraca mu orginalne rozmiary
			/// i pozycję. Aplikacja powinna wskazać tę flagę przy przywracaniu
			/// zminimalizowanego okna
            /// </pl>
            SW_RESTORE = 9,

            /// <en>
            /// Activates the window and displays it in its current size and
            /// position.
            /// </en>
			/// <pl>
			/// Aktywuje okno i wyświetla je z jego bieżącymi wymiarami i w
			/// bieżącej pozycji
			/// </pl>
            SW_SHOW = 5 /*,
			
            // Sets the show state based on the SW_ value specified in
			// theSTARTUPINFO structure passed to the CreateProcess function by
			// the program that started the application.
			SW_SHOWDEFAULT = 10,
			
            // Activates the window and displays it as a maximized window.
			SW_SHOWMAXIMIZED = 3,
			
            // Activates the window and displays it as a minimized window.
			SW_SHOWMINIMIZED = 2,
			
            // Displays the window as a minimized window. This value is similar
			// toSW_SHOWMINIMIZED, except the window is not activated.
			SW_SHOWMINNOACTIVE = 7,
			
            // Displays the window in its current size and position.
			// This value is similar to SW_SHOW, except that the window is not
			// activated.
			SW_SHOWNA = 8,
			
            // Displays a window in its most recent size and position.
			// This value is similar to SW_SHOWNORMAL, except that the window is
			// not activated.
			SW_SHOWNOACTIVATE = 4,
			
            // Activates and displays a window. If the window is minimized or
			// maximized, the system restores it to its original size and
			// position. An application should specify this flag when displaying
			// the window for the first time.
            SW_SHOWNORMAL = 1
             */
        }

        /// <summary>
        /// <en>System commands</en>
        /// <pl>Polecenia systemowe</pl>
        /// </summary>
        enum SysCmd
        {
            /// <en>Form size changing, here ignored</en>
            /// <pl>Zmiana rozmiarów okna, tutaj ignorowane</pl>
            SC_SIZE = 0xF000,

            /// <en>Form moving, here ignored</en>
            /// <pl>Przesuwanie okna, tutaj ignorowane</pl>
            SC_MOVE = 0xF010,

            /// <en>Form minimizing to the reshown taskbar</en>
            /// <pl>Minimalizacja okna na ponownie wyświetlony pasek zadań</pl>
            SC_MINIMIZE = 0xF020,

            /// <en>Form maximizing, here ignored</en>
            /// <pl>Maksymalizacja okna, tutaj ignorowane</pl>
            SC_MAXIMIZE = 0xF030,

            /// <en>
            /// Form restoring to maximum screen size and hiding the taskbar
            /// </en>
			/// <pl>
			/// Przywrócenie okna do maksymalnego rozmiaru ekranu i ukrycie
			/// paska zadań
			/// </pl>
            SC_RESTORE = 0xF120
        }

        /// <summary>
        /// <en>Window messages</en>
        /// <pl>Komunikaty windows</pl>
        /// </summary>
        /// <en><!--Not used parts stay not translated--></en>
        /// <pl><!--Fragmenty nie używane pozostają nie przetłumaczone--></pl>
        enum WinMsg
        {
            /*
			// Window cannot be painted if message was sent with appropriate
			// flag equal false, else if flag was equal true one is redrawn
			WM_SETREDRAW = 0x000B,
             */

            /// <en>Message sent with flag SysCmd.SW_...</en>
            /// <pl>Komunikat wysyłany z flagą SysCmd.SW_...</pl>
            WM_SHOWWINDOW = 0x0018,

            /// <en>
			/// Messages sent by by system buttons (minimize, maximize, restore,
			/// close), and by system menu items
            /// </en>
            /// <pl>
			/// Komunikaty wysyłane przez przyciski systemowe (minimalizuj,
			/// maksymalizuj, przywróć, zamknij) i pozycje menu systemowego okna
			/// </pl>
			WM_SYSCOMMAND = 0x0112
		}

		/// <en><!--Not used parts stay not translated--></en>
		/// <pl><!--Fragmenty nie używane pozostają nie przetłumaczone--></pl>
		enum Broadcast //Special windows message
		{
			// Message is sent to all windows, not used here
			// HWND_BROADCAST = 0xFFFF
		}

		/// <en>
		/// Bounds of the maximum screen size form when the taskbar is hidden
		/// </en>
		/// <pl>
		/// Wymiary skrajne okna o maksymalnym rozmiarze ekranu kiedy pasek
		/// zadań jest ukryty
		/// </pl>
		Rectangle screenBounds;

		/// <en>
		/// Bounds of the work area size form when the taskbar is shown
		/// </en>
		/// <pl>
		/// Wymiary skrajne okna w obszarze roboczym kiedy paskek zadań jest
		/// widoczny
		/// </pl>
		Rectangle workArea;

		//Microsoft C# Express 2010: the field is never used
		#pragma warning disable 0169

		/// <en><!--Not used here, stay not translated--></en>
		/// <pl><!--Tutaj nie używane, pozostaje nie przetłumaczone--></pl>
		Rectangle insideBounds; // This solution reserved size variable

		#pragma warning restore 0169

		/// <summary>
		/// <en>Main form constructor</en>
		/// <pl>Konstruktor okna głównego</pl>
		/// </summary>
		public Form1()
		{
			InitializeComponent();
			this.StartPosition = FormStartPosition.Manual;
			this.WindowState = FormWindowState.Normal;
			screenBounds = Screen.PrimaryScreen.Bounds;
			workArea = Screen.GetWorkingArea(this);
			/*
			insideBounds = new Rectangle(0, 0, 1440, 900);
			 */
			this.Location = new Point(0, 0);
			this.Size = new Size(workArea.Width, workArea.Height);
			IntPtr sysMenu = GetSystemMenu(this.Handle, false);
			DeleteMenu(sysMenu, (int)SysCmd.SC_MAXIMIZE, 0);
			DeleteMenu(sysMenu, (int)SysCmd.SC_MOVE, 0);
			DeleteMenu(sysMenu, (int)SysCmd.SC_SIZE, 0);
			this.MaximizeBox = false;
			this.BackColor = Color.Black;
			this.BackgroundImageLayout = ImageLayout.Stretch;
			this.Activated += new EventHandler(Form_Activated);
			this.Deactivate += new EventHandler(Form_Deactivate);
			this.FormClosing += new FormClosingEventHandler(Form_FormClosing);
			this.Load += new EventHandler(Form_Load);
		}

		/// <summary>
		/// <en>Called after the form received focus</en>
		/// <pl>Wywoływane po tym kiedy okno otrzymało fokus</pl>
		/// </summary>
		/// <param name="sender"/>
		/// <param name="e"/>
		void Form_Activated(object sender, EventArgs e)
		{
			Taskbar.Hide();
			this.Size = screenBounds.Size;
		}

		/// <summary>
		/// <en>Called when the form looses focus</en>
		/// <pl>Wywoływane kiedy okno traci fokus</pl>
		/// </summary>
		/// <param name="sender"/>
		/// <param name="e"/>
		void Form_Deactivate(object sender, EventArgs e)
		{
			Taskbar.Show();
			this.Size = workArea.Size;
		}

		/// <summary>
		/// <en>Called when the form is about to be closed</en>
		/// <pl>Wywoływane kiedy okno jest tuż przed zamknięciem</pl>
		/// </summary>
		/// <param name="sender"/>
		/// <param name="e"/>
		void Form_FormClosing(object sender, FormClosingEventArgs e)
		{
			Taskbar.Show();
			this.Size = workArea.Size;
		}

		/// <summary>
		/// <en>Called when the form is being loaded</en>
		/// <pl>Wywoływane kiedy okno jest ładowane</pl>
		/// </summary>
		/// <param name="sender"/>
		/// <param name="e"/>
		void Form_Load(object sender, EventArgs e)
		{
			Taskbar.Hide();
			this.Size = screenBounds.Size;
		}

		/// <summary>
		/// <en>Overridden form message handling function</en>
		/// <pl>
		/// Nadpisana funkcja obsługi komunikatów otrzymywanych przez okno
		/// </pl>
		/// </summary>
		/// <param name="message">
		/// <en>The message received</en>
		/// <pl>Otrzymany komunikat</pl>
		/// </param>
		protected override void WndProc(ref Message message)
		{
			switch (message.Msg)
			{
				case (int)WinMsg.WM_SYSCOMMAND:

					int command = message.WParam.ToInt32() & 0xFFF0;

					if (command == (int)SysCmd.SC_SIZE)
					{
						// <en>Your optional code here</en>
						// <pl>Tutaj twój opcjonalny kod</pl>

						return;
					}

					else if (command == (int)SysCmd.SC_MOVE)
					{
						// <en>Your optional code here</en>
						// <pl>Tutaj twój opcjonalny kod</pl>

						return;
					}

					else if (command == (int)SysCmd.SC_MINIMIZE)
					{
						// <en>Your optional 'before' code here</en>
						// <pl>
						// Tutaj twój opcjonalny kod przed poleceniami poniżej
						// </pl>

						Taskbar.Hide();
						this.Size = workArea.Size;

						// <en>Your optional 'after' code here</en>
						// <pl>
						// Tutaj twój opcjonalny kod po poleceniach powyżej
						// </pl>
					}

					else if (command == (int)SysCmd.SC_MAXIMIZE)
					{
						// <en>Your optional code here</en>
						// <pl>Tutaj twój opcjonalny kod</pl>

						return;
					}

					else if (command == (int)SysCmd.SC_RESTORE)
					{
						// <en>Your optional 'before' code here</en>
						// <pl>
						// Tutaj twój opcjonalny kod przed poleceniami poniżej
						// </pl>

						Taskbar.Hide();
						this.Size = screenBounds.Size;

						// <en>Your optional 'after' code here</en>
						// <pl>Tutaj twój opcjonalny kod po poleceniach powyżej</pl>
					}

					break;
			}

			base.WndProc(ref message);
		}
	}
}

Moduł Taskbar.cs

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;

namespace NSTaskbar
{
    /// <summary>
    /// <en>
	/// Helper class for hiding/showing the taskbar and startmenu on Windows XP
	/// or Windows Vista or Windows 7
	/// </en>
	/// <pl>
	/// Klasa pomocnicza do znajdowania/pokazywania paska zadań i menu Start
	/// w Windows XP, Windows Vista i Windows 7
	/// </pl>
	/// </summary>
	/// <see href="http://www.codeproject.com/Articles/25572/Hiding-the-Taskbar-and-Startmenu-start-orb-in-Wind">
	/// <en>
	/// CodeProject, Hiding the Taskbar and Startmenu in Windows Vista and
	/// Windows 7
	/// </en>
	/// <pl>Code project, Ukrywanie paska zadań w Windows Vista i Windows 7</pl>
	/// </see>
	public static class Taskbar
	{
		[DllImport("user32.dll")]
		static extern int GetWindowText(
			IntPtr hWnd,
			StringBuilder text,
			int count
			);

		[DllImport("user32.dll", CharSet = CharSet.Auto)]
		static extern bool EnumThreadWindows(
			int threadId,
			EnumThreadProc pfnEnum,
			IntPtr lParam
			);

		[DllImport("user32.dll", SetLastError = true)]
		static extern System.IntPtr FindWindow(
			string lpClassName,
			string lpWindowName
			);

		[DllImport("user32.dll", SetLastError = true)]
		static extern IntPtr FindWindowEx(
			IntPtr parentHandle,
			IntPtr childAfter,
			string className,
			string windowTitle
			);

		[DllImport("user32.dll")]
		static extern IntPtr FindWindowEx(
			IntPtr parentHwnd,
			IntPtr childAfterHwnd,
			IntPtr className,
			string windowText
			);

		[DllImport("user32.dll")]
		static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

		[DllImport("user32.dll")]
		static extern uint GetWindowThreadProcessId(
			IntPtr hwnd,
			out int lpdwProcessId
			);

		const int SW_HIDE = 0;
		const int SW_SHOW = 5;

		const string VistaStartMenuCaption = "Start";
		static IntPtr vistaStartMenuWnd = IntPtr.Zero;

		delegate bool EnumThreadProc(IntPtr hwnd, IntPtr lParam);

		/// <summary>
		/// <en>Show the taskbar</en>
		/// <pl>Pokaż pasek zadań</pl>
		/// </summary>
		public static void Show()
		{
			SetVisibility(true);
		}

		/// <summary>
		/// <en>Hide the taskbar</en>
		/// <pl>Ukryj pasek zadań</pl>
		/// </summary>
		public static void Hide()
		{
			SetVisibility(false);
		}

		/// <summary>
		/// <en>Sets the visibility of the taskbar</en>
		/// <pl>Włącza/wyłącza widoczność paska zadań</pl>
		/// </summary>
		public static bool Visible
		{
			set { SetVisibility(value); }
		}

		/// <summary>
		/// <en>Hide or show the Windows taskbar and startmenu</en>
		/// <pl>Pokaż lub ukryj pasek zadań i menu Start Windows</pl>
		/// </summary>
		/// <param name="show">
		/// <en>True to show, false to hide</en>
		/// <pl>Prawda aby pokazać, fałsz aby ukryć</pl>
		/// </param>
		static void SetVisibility(bool show)
		{
			// <en>Get taskbar window</en>
			// <pl>Pobierz okno paska zadań</pl>
			IntPtr taskBarWnd = FindWindow("Shell_TrayWnd", null);

			// <en>Try it the Windows XP way</en>
			// <pl>Spróbuj metodą dla Windows XP</pl>
			IntPtr startWnd = FindWindowEx(
				taskBarWnd,
				IntPtr.Zero,
				"Button",
				"Start"
				);

			if (startWnd == IntPtr.Zero)
			{
				// <en>
				// Try an alternate way, as mentioned on CodeProject by Earl
				// Waylon Flinn
				// <en>
				// <pl>
				// Spróbuj alternatywnym sposobem o którym na CodeProject
				// wspomina Earl Waylon Flinn
				// </pl>
				startWnd = FindWindowEx(
					IntPtr.Zero,
					IntPtr.Zero,
					(IntPtr)0xC017,
					"Start"
					);
			}

			if (startWnd == IntPtr.Zero)
			{
				// <en>Try the Vista way</en>
				// <pl>Spróbuj sposobu dla Windows Vista</pl>
				startWnd = FindWindow("Button", null);
				if (startWnd == IntPtr.Zero)
				{
					// <en>Do it browsing taskbar threads</en>
					// <pl>Wykonaj to szukając wśród wątków paska zadań</pl>
					startWnd = GetVistaStartMenuWnd(taskBarWnd);
				}
			}

			ShowWindow(taskBarWnd, show ? SW_SHOW : SW_HIDE);
			ShowWindow(startWnd, show ? SW_SHOW : SW_HIDE);
		}

		/// <summary>
		/// <en>
		/// Returns window handle of the Windows Vista/Windows 7 start menu
		/// </en>
		/// <pl>Zwraca uchwyt menu Start dla Windows Vista lub Windows 7</pl>
		/// </summary>
		/// <param name="taskBarWnd">
		/// <en>Window handle of taskbar</en>
		/// <pl>Uchwyt paska zadań</pl>
		/// </param>
		/// <returns>
		/// <en>Window handle of start menu</en>
		/// <pl>Uchwyt okna menu Start</pl>
		/// </returns>
		static IntPtr GetVistaStartMenuWnd(IntPtr taskBarWnd)
		{
			// <en>Get process that owns the taskbar window</en>
			// <pl>Pobierz proces-właściciela paska zadań</pl>
			int procId;
			GetWindowThreadProcessId(taskBarWnd, out procId);
			Process p = Process.GetProcessById(procId);

			if (p != null)
			{
				// <en>Enumerate all threads of that process</en>
				// <pl>Wylicz wszystkie wątki tego procesu</pl>
				foreach (ProcessThread t in p.Threads)
				{
					EnumThreadWindows(
						t.Id,
						MyEnumThreadWindowsProc,
						IntPtr.Zero
						);
				}
			}

			return vistaStartMenuWnd;
		}

		/// <summary>
		/// <en>
		/// Callback method that is called from 'EnumThreadWindows' in
		/// 'GetVistaStartMenuWnd'
		/// </en>
		/// <pl>
		/// Metoda typu callback wywoływana przez 'EnumThreadWindows' w
		/// 'GetVistaStartMenuWnd'
		/// </pl>
		/// </summary>
		/// <param name="hWnd">
		/// <en>Window handle</en>
		/// <pl>Uchwyt okna</pl>
		/// </param>
		/// <param name="lParam">
		/// <en>Parameter</en>
		/// <pl>Prametr</pl>
		/// </param>
		/// <returns>
		/// <en>True to continue enumeration, false to stop it</en>
		/// <pl>Prawda aby kontynuować wyliczanie, fałsz aby je przerwać</pl>
		/// </returns>
		static bool MyEnumThreadWindowsProc(IntPtr hWnd, IntPtr lParam)
		{
			StringBuilder buffer = new StringBuilder(256);

			if (GetWindowText(hWnd, buffer, buffer.Capacity) > 0)
			{
				Console.WriteLine(buffer);
				if (buffer.ToString() == VistaStartMenuCaption)
				{
					vistaStartMenuWnd = hWnd;
					return false;
				}
			}

			return true;
		}
	}
}

Moduł Doc.xml

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Lan4Avalon</name>
    </assembly>
    <members>
        <member name="T:NSLan4Avalon.Form1">
            <summary>
			<en>
			This solution Single Document Interface (SDI) main form class
			</en>
			<pl>
			Klasa okna głównego tego projektu typu Single Document Interface
			(SDI)
			</pl>
			</summary>
		</member>
		<member name="F:NSLan4Avalon.Form1.components">
			<summary>
			Required designer variable.
			</summary>
		</member>
		<member name="M:NSLan4Avalon.Form1.Dispose(System.Boolean)">
			<summary>
			Clean up any resources being used.
			</summary>
			<param name="disposing">
			true if managed resources should be disposed; otherwise, false
			</param>
		</member>
		<member name="M:NSLan4Avalon.Form1.InitializeComponent">
			<summary>
			Required method for Designer support - do not modify
			the contents of this method with the code editor.
			</summary>
		</member>
		<member name="F:NSLan4Avalon.Form1.screenBounds">
			<en>
			Bounds of the maximum screen size form when the taskbar is hidden
			</en>
			<pl>
			Wymiary skrajne okna o maksymalnym rozmiarze ekranu kiedy pasek
			zadań jest ukryty
			</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.workArea">
			<en>
			Bounds of the work area size form when the taskbar is shown
			</en>
			<pl>
			Wymiary skrajne okna w obszarze roboczym kiedy paskek zadań jest
			widoczny
			</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.insideBounds">
			<en><!--Not used here, stay not translated--></en>
			<pl><!--Tutaj nie używane, pozostaje nie przetłumaczone--></pl>
		</member>
		<member name="M:NSLan4Avalon.Form1.#ctor">
			<summary>
			<en>Main form constructor</en>
			<pl>Konstruktor okna głównego</pl>
			</summary>
		</member>
		<member name="M:NSLan4Avalon.Form1.Form_Activated(System.Object,System.EventArgs)">
			<summary>
			<en>Called after the form received focus</en>
			<pl>Wywoływane po tym kiedy okno otrzymało fokus</pl>
			</summary>
			<param name="sender"/>
			<param name="e"/>
		</member>
		<member name="M:NSLan4Avalon.Form1.Form_Deactivate(System.Object,System.EventArgs)">
			<summary>
			<en>Called when the form looses focus</en>
			<pl>Wywoływane kiedy okno traci fokus</pl>
			</summary>
			<param name="sender"/>
			<param name="e"/>
		</member>
		<member name="M:NSLan4Avalon.Form1.Form_FormClosing(System.Object,System.Windows.Forms.FormClosingEventArgs)">
			<summary>
			<en>Called when the form is about to be closed</en>
			<pl>Wywoływane kiedy okno jest tuż przed zamknięciem</pl>
			</summary>
			<param name="sender"/>
			<param name="e"/>
		</member>
		<member name="M:NSLan4Avalon.Form1.Form_Load(System.Object,System.EventArgs)">
			<summary>
			<en>Called when the form is being loaded</en>
			<pl>Wywoływane kiedy okno jest ładowane</pl>
			</summary>
			<param name="sender"/>
			<param name="e"/>
		</member>
		<member name="M:NSLan4Avalon.Form1.WndProc(System.Windows.Forms.Message@)">
			<summary>
			<en>Overridden form message handling function</en>
			<pl>
			Nadpisana funkcja obsługi komunikatów otrzymywanych przez okno
			</pl>
			</summary>
			<param name="message">
			<en>The message received</en>
			<pl>Otrzymany komunikat</pl>
			</param>
		</member>
		<member name="T:NSLan4Avalon.Form1.ShowWnd">
			<see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx">
			<en>MSDN, ShowWindow function</en>
			<pl>MSDN, Funcja "Pokaż okno"</pl>
			</see>
			<en><!--Not used parts stay not translated--></en>
			<pl><!--Fragmenty nie używane pozostają nie przetłumaczone--></pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.ShowWnd.SW_HIDE">
			<en>Hides the window and activates another window</en>
			<pl>Ukrywa okno i aktywuje inne okno</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.ShowWnd.SW_MAXIMIZE">
			<en>Maximizes the specified window</en>
			<pl>Maksymalizuje wybrane okno</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.ShowWnd.SW_MINIMIZE">
			<en>
			Minimizes the specified window and activates the next top-level
			window in the Z-order.
			</en>
			<pl>
			Minimalizuje wybrane okno i aktywuje następne okno top-level w
			porządku Z-order
			</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.ShowWnd.SW_RESTORE">
			<en>
			Activates and displays the window. If the window is minimized or
			maximized, the system restores it to its original size and position.
			An application should specify this flag when restoring a minimized
			window.
			</en>
			<pl>
			Aktywuje i wyświetla okno. Jeżeli okno jest zminimalizowane lub
			zmaksymalizowane, system przywraca mu orginalne rozmiary i pozycję.
			Aplikacja powinna wskazać tę flagę przy przywracaniu
			zminimalizowanego okna
			</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.ShowWnd.SW_SHOW">
			<en>
			Activates the window and displays it in its current size and
			position.
			</en>
			<pl>
			Aktywuje okno i wyświetla je z jego bieżącymi wymiarami i w bieżącej
			pozycji
			</pl>
		</member>
		<member name="T:NSLan4Avalon.Form1.SysCmd">
			<summary>
			<en>System commands</en>
			<pl>Polecenia systemowe</pl>
			</summary>
		</member>
		<member name="F:NSLan4Avalon.Form1.SysCmd.SC_SIZE">
			<en>Form size changing, here ignored</en>
			<pl>Zmiana rozmiarów okna, tutaj ignorowane</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.SysCmd.SC_MOVE">
			<en>Form moving, here ignored</en>
			<pl>Przesuwanie okna, tutaj ignorowane</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.SysCmd.SC_MINIMIZE">
			<en>Form minimizing to the reshown taskbar</en>
			<pl>Minimalizacja okna na ponownie wyświetlony pasek zadań</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.SysCmd.SC_MAXIMIZE">
			<en>Form maximizing, here ignored</en>
			<pl>Maksymalizacja okna, tutaj ignorowane</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.SysCmd.SC_RESTORE">
			<en>
			Form restoring to maximum screen size and hiding the taskbar
			</en>
			<pl>
			Przywrócenie okna do maksymalnego rozmiaru ekranu i ukrycie paska
			zadań
			</pl>
		</member>
		<member name="T:NSLan4Avalon.Form1.WinMsg">
			<summary>
			<en>Window messages</en>
			<pl>Komunikaty windows</pl>
			</summary>
			<en><!--Not used parts stay not translated--></en>
			<pl><!--Fragmenty nie używane pozostają nie przetłumaczone--></pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.WinMsg.WM_SHOWWINDOW">
			<en>Message sent with flag SysCmd.SW_...</en>
			<pl>Komunikat wysyłany z flagą SysCmd.SW_...</pl>
		</member>
		<member name="F:NSLan4Avalon.Form1.WinMsg.WM_SYSCOMMAND">
			<en>
			Messages sent by by system buttons (minimize, maximize,
			restore, close), and by system menu items
			</en>
			<pl>
			Komunikaty wysyłane przez przyciski systemowe (minimalizuj,
			maksymalizuj, przywróć, zamknij) i pozycje menu systemowego okna
			</pl>
		</member>
		<member name="T:NSLan4Avalon.Form1.Broadcast">
			<en><!--Not used parts stay not translated--></en>
			<pl><!--Fragmenty nie używane pozostają nie przetłumaczone--></pl>
		</member>
		<member name="T:NSLan4Avalon.Properties.Resources">
			<summary>
			  A strongly-typed resource class, for looking up localized strings,
			  etc.
			</summary>
		</member>
		<member name="P:NSLan4Avalon.Properties.Resources.ResourceManager">
			<summary>
			  Returns the cached ResourceManager instance used by this class.
			</summary>
		</member>
		<member name="P:NSLan4Avalon.Properties.Resources.Culture">
			<summary>
			  Overrides the current thread's CurrentUICulture property for all
			  resource lookups using this strongly typed resource class.
			</summary>
		</member>
		<member name="T:NSLan4Avalon.OpSys">
			<summary>
			<en>Helper class for finding operating system version</en>
			<pl>Klasa pomocnicza do rozpoznania wersji systemu operacyjnego</pl>
			</summary>
			<see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx">
			<en>MSDN, Operating System Version</en>
			<pl>MSDN, Wersja systemu operacyjnego</pl>
			</see>
		</member>
		<member name="M:NSLan4Avalon.OpSys.isWinXP">
			<summary>
			<en>Test if operating system is Windows XP</en>
			<pl>Sprawdzenie czy systememem operacyjnym jest Windows XP</pl>
			</summary>
			<returns>
			<en>True if yes, false if not</en>
			<pl>Prawda jeżeli tak, fałsz jeżeli nie</pl>
			</returns>
		</member>
		<member name="M:NSLan4Avalon.OpSys.isWin7OrVista">
			<summary>
			<en>Test if operating system is Windows Vista or Windows 7</en>
			<pl>Sprawdzenie czy systemem operacyjnym jest Windows Vista lub Windows 7</pl>
			</summary>
			<returns>
			<en>True if yes, false if not</en>
			<pl>Prawda jeżeli tak, fałsz jeżeli nie</pl>
			</returns>
		</member>
		<member name="M:NSLan4Avalon.OpSys.isNonConsider">
			<summary>
			<en>Test if operating system isn't considered in this solution</en>
			<pl>
			Sprawdzenie czy system operacyjny nie jest brany pod uwagę w tym
			projekcie
			</pl>
			</summary>
			<returns>
			<en>True if it isn't, false if it is</en>
			<pl>Prawda jeżeli nie jest, fałsz jeżeli jest</pl>
			</returns>
		</member>
		<member name="T:NSTaskbar.Taskbar">
			<summary>
			<en>
			Helper class for hiding/showing the taskbar and startmenu on Windows
			XP or Windows Vista or Windows 7
			</en>
			<pl>
			Klasa pomocnicza do znajdowania/pokazywania paska zadań i menu Start
			w Windows XP, Windows Vista i Windows 7
			</pl>
			</summary>
			<see href="http://www.codeproject.com/Articles/25572/Hiding-the-Taskbar-and-Startmenu-start-orb-in-Wind">
			<en>
			CodeProject, Hiding the Taskbar and Startmenu in Windows Vista and
			Windows 7
			</en>
			<pl>
			Code project, Ukrywanie paska zadań w Windows Vista i Windows 7
			</pl>
			</see>
		</member>
		<member name="M:NSTaskbar.Taskbar.Show">
			<summary>
			<en>Show the taskbar</en>
			<pl>Pokaż pasek zadań</pl>
			</summary>
		</member>
		<member name="M:NSTaskbar.Taskbar.Hide">
			<summary>
			<en>Hide the taskbar</en>
			<pl>Ukryj pasek zadań</pl>
			</summary>
		</member>
		<member name="M:NSTaskbar.Taskbar.SetVisibility(System.Boolean)">
			<summary>
			<en>Hide or show the Windows taskbar and startmenu</en>
			<pl>Pokaż lub ukryj pasek zadań i menu Start Windows</pl>
			</summary>
			<param name="show">
			<en>True to show, false to hide</en>
			<pl>Prawda aby pokazać, fałsz aby ukryć</pl>
			</param>
		</member>
		<member name="M:NSTaskbar.Taskbar.GetVistaStartMenuWnd(System.IntPtr)">
			<summary>
			<en>
			Returns window handle of the Windows Vista/Windows 7 start menu
			</en>
			<pl>Zwraca uchwyt menu Start dla Windows Vista lub Windows 7</pl>
			</summary>
			<param name="taskBarWnd">
			<en>Window handle of taskbar</en>
			<pl>Uchwyt paska zadań</pl>
			</param>
			<returns>
			<en>Window handle of start menu</en>
			<pl>Uchwyt okna menu Start</pl>
			</returns>
		</member>
		<member name="M:NSTaskbar.Taskbar.MyEnumThreadWindowsProc(System.IntPtr,System.IntPtr)">
			<summary>
			<en>
			Callback method that is called from 'EnumThreadWindows' in
			'GetVistaStartMenuWnd'
			</en>
			<pl>
			Metoda typu callback wywoływana przez 'EnumThreadWindows' w
			'GetVistaStartMenuWnd'
			</pl>
			</summary>
			<param name="hWnd">
			<en>Window handle</en>
			<pl>Uchwyt okna</pl>
			</param>
			<param name="lParam">
			<en>Parameter</en>
			<pl>Prametr</pl>
			</param>
			<returns>
			<en>True to continue enumeration, false to stop it</en>
			<pl>Prawda aby kontynuować wyliczanie, fałsz aby je przerwać</pl>
			</returns>
		</member>
		<member name="P:NSTaskbar.Taskbar.Visible">
			<summary>
			<en>Sets the visibility of the taskbar</en>
			<pl>Włącza/wyłącza widoczność paska zadań</pl>
			</summary>
		</member>
		<member name="M:NSLan4Avalon.Program.Main">
			<summary>
			<en>The main entry point for the application</en>
			<pl>Miejsce rozpoczecia programu</pl>
			</summary>
		</member>
	</members>
</doc>

2 komentarzy

Zdecydowanie u mnie jest wersja względem anglojęzycznej w msdn lokalizowana na język polski, ewentualnie można powiedzieć o wersji angielsko-polskiej i wyłącznie w tych dwóch językach i w tej kolejności, Tak jest w tym artykule, choć może już istnieją, a może w przyszłości będą istniały 2-języczne wersje artykułów na 4p, gdzie język polski niekoniecznie w ogóle będzie, ale artykuł będzie prawdopodobnie lokalizowany z angielskiego na polski lub z angielskiego na np. ukraiński. Zachowanie anglojęzyczności powinno dotyczyć kodu C# i jego pierwszego opisu w XML, a np. po ukraińsku dołącza tylko opis w XML i mamy przykładowe tagi:

///<en></en>
///<ukr></ukr>

W tym artykule jest np.

///<en>...ShowWindow...</en>
///<pl>..."Pokaż okno"...</pl>

gdzie użyłem cudzysłowów.
Zasadniczo mam doświadczenie nie tyle w C# i XML, co w edycji i tłumaczeniu kontraktów miedzy firmami z Polski i jakiejś strony zagranicznej, a więc dwustronnych, jeden raz zdarzył się kontrakt trójstronny. W tej chwili próbuję przenieść tamte doświadczenia na grunt własnego projektu programistycznego i graficznego. To co tu zaprezentowałem jest, jak napisałem szkicem autorskim. W kontraktach spotykałem zwykle 2 języki, znacznie rzadziej jeden i nigdy inaczej - to zależy od stron spisujących kontrakt. Wiele krojów czcionek jest zaprojektowanych tak naprawdę dla kilku nacji - jakiegoś kręgu kulturowego. Możemy handlować oprogramowaniem z Chinami i wtedy np. uzgodnić, że dokumentacja będzie dwujęzyczna w języku polskim z rejonu Kujawy i chińskim w narzeczu mandaryńskim, z kantonu takiego, a takiego.

Wracając do zadanych pytań: Mnie nie interesuje co by było gdyby, kiedy już mam to u siebie na ekranie.

  1. Dlaczego w ogóle chcesz ukrywać pasek zadań? Kiedy to jest potrzebne?

  2. Co będzie się działo kiedy dwa programy ukrywające pasek będą uruchomione jednocześnie?

            IntPtr startWnd = FindWindowEx(
                taskBarWnd,
                IntPtr.Zero,
                "Button",
                "Start"
                );

Napis na przycisku start jest różny w różnych wersjach językowych. Przykładowo w polskim XP jest to Start (z dużej litery), w angielskim start (z małej) a w chińskim 開始. Czy kod prawidłowo działa w tych przypadkach?