首先, 调用一些User32.dll的WinAPI函数
internal
class
User32
...
{ public const int SE_SHUTDOWN_PRIVILEGE = 0x13 ; [DllImport( " user32.dll " )] public static extern IntPtr FindWindow( string lpClassName, string lpWindowName); [DllImport( " user32.dll " )] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport( " user32.dll " )] public static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); }
然后, 在WinForm里面
public
MainForm()
...
{ InitializeComponent(); try ... { if (Environment.OSVersion.Version.Major < 6 ) ... { base .SendToBack(); IntPtr hWndNewParent = User32.FindWindow( " Progman " , null ); User32.SetParent( base .Handle, hWndNewParent); } else ... { User32.SetWindowPos( base .Handle, 1 , 0 , 0 , 0 , 0 , User32.SE_SHUTDOWN_PRIVILEGE); } } catch (ApplicationException exx) ... { MessageBox.Show( this , exx.Message, " Pin to Desktop " ); } }
private
void
MainForm_Activated(
object
sender, EventArgs e)
...
{ if (Environment.OSVersion.Version.Major >= 6 ) ... { User32.SetWindowPos( base .Handle, 1 , 0 , 0 , 0 , 0 , User32.SE_SHUTDOWN_PRIVILEGE); } }
private
void
MainForm_Paint(
object
sender, PaintEventArgs e)
...
{ if (Environment.OSVersion.Version.Major >= 6 ) ... { User32.SetWindowPos( base .Handle, 1 , 0 , 0 , 0 , 0 , User32.SE_SHUTDOWN_PRIVILEGE); } }