会被vista 拦截的交互 服务


 

__________________________________

Thread threadForm  = new Thread(new ThreadStart(FormShow));
            threadForm.Start();

 

_______________________________

 


        public void FormShow()
        {

           // Interop.ShowMessageBox("","");


        

        GetDesktopWindow();

        IntPtr hwinstaSave = GetProcessWindowStation();
        IntPtr dwThreadId = GetCurrentThreadId();
        IntPtr hdeskSave = GetThreadDesktop(dwThreadId);
 
        IntPtr hwinstaUser = OpenWindowStation("WinSta1", false,33554432);
 
 

        SetProcessWindowStation(hwinstaUser);
        IntPtr hdeskUser = OpenDesktop("Default", 0, false, 33554432);
        RpcRevertToSelf();
        if (hdeskUser == IntPtr.Zero)
        {
        SetProcessWindowStation(hwinstaSave);
        CloseWindowStation(hwinstaUser);
        return ;
        }
        SetThreadDesktop(hdeskUser);

        IntPtr dwGuiThreadId = dwThreadId;

        Man f = new Man(); //此FORM1可以带notifyIcon,可以显示在托盘里,用户可点击托盘图标进行设置

        System.Windows.Forms.Application.Run(f);


        dwGuiThreadId = IntPtr.Zero;
        SetThreadDesktop(hdeskSave);
        SetProcessWindowStation(hwinstaSave);
        CloseDesktop(hdeskUser);
        CloseWindowStation(hwinstaUser);
}

[DllImport("user32.dll")]
static extern int GetDesktopWindow();

[DllImport("user32.dll")]
static extern IntPtr GetProcessWindowStation();

[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThreadId();

[DllImport("user32.dll")]
static extern IntPtr GetThreadDesktop(IntPtr dwThread);

[DllImport("user32.dll")]
static extern IntPtr OpenWindowStation(string a,bool b,int c);

[DllImport("user32.dll")]
static extern IntPtr OpenDesktop(string lpszDesktop, uint dwFlags,
bool fInherit, uint dwDesiredAccess);

[DllImport("user32.dll")]
static extern IntPtr CloseDesktop(IntPtr p);

[DllImport("rpcrt4.dll", SetLastError=true)]
static extern IntPtr RpcImpersonateClient(int i);


[DllImport("rpcrt4.dll", SetLastError=true)]
static extern IntPtr RpcRevertToSelf();

[DllImport("user32.dll")]
static extern IntPtr SetThreadDesktop(IntPtr a);

[DllImport("user32.dll")]
static extern IntPtr SetProcessWindowStation(IntPtr a);
[DllImport("user32.dll")]
static extern IntPtr CloseWindowStation(IntPtr a);
 
 

 


豫ICP备12024565号-1   E-mail:admin@hlc8.com