2013-08-02 4 views
0

Мне нужно расширить программное обеспечение терминального сервера для работы с окнами 8.1. Сценарий следующий:скрыть плитку Windows 8.1 в C# программно

Два компьютера: на одном запускается клиентское программное обеспечение, а на другом - сервер. Операционная система сервера Windows 8.1

Когда пользователь нажимает кнопку на клиентском ПК, он открывает соединение RDP через виртуальный канал на серверный ПК. Должен быть вход в систему, и плитки должны быть скрыты, а серверная часть программного обеспечения должна быть запущена.

Для того, чтобы скрыть нормальный рабочий стол под более ранними версиями окон мы использовали следующие команды:

// For Windows Vista and Windows 7 hide the Status-Bar and all Desktop-Icons 
int a_hWndTaskBar  = FindWindow("Shell_TrayWnd", null); 
int a_hWndStart  = FindWindow("Button", "Start"); 
int a_hWndDesktop  = FindWindow("Progman", null); 
bool a_bResult   = false; 

try 
{ 
    a_bResult = SetWindowPos(a_hWndTaskBar, 0, 0, 0, 0, 0, SWP_HIDEWINDOW); 
    a_bResult = SetWindowPos(a_hWndStart, 0, 0, 0, 0, 0, SWP_HIDEWINDOW); 
    a_bResult = ShowWindow(a_hWndDesktop, SW_HIDE); 
} 
catch(Exception e) 
{ 
    MessageBox.Show(e.Message); 
} 

Что я должен сделать для того, чтобы достичь этого с окнами 8.1?

С уважением Маркус

ответ

0

здесь: Работа для меня:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace Constants.UI 
{ 

    public class Taskbar 
    { 
     [DllImport("user32.dll")]// For Windows Mobile, replace user32.dll with coredll.dll 
     private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

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

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

     private const int SW_HIDE = 0; 
     private const int SW_SHOW = 1; 

     protected static int Handle 
     { 
      get 
      { 
       return HandlePtr.ToInt32(); 
      } 
     } 
     protected static IntPtr HandlePtr 
     { 
      get 
      { 
       return FindWindow("Shell_TrayWnd", ""); 
      } 
     } 
     protected static int StartHandle 
     { 
      get 
      { 
       int hStart = FindWindow("Button", "Start").ToInt32(); 
       if (hStart == 0) 
       { 
        hStart = FindWindowEx(HandlePtr, IntPtr.Zero, "Start", null).ToInt32(); //windows 8 
       } 
       return hStart; 
      } 
     } 

     private Taskbar() 
     { 
      // hide ctor 
     } 
     static object lockAccess = new object(); 
     public static void Show() 
     { 
      try 
      { 
       lock (lockAccess) 
       { 
        ShowWindow(Handle, SW_SHOW); 
        ShowWindow(StartHandle, SW_SHOW); 
       } 
      } 
      catch { } 
     } 

     public static void Hide() 
     { 
      try 
      { 
       lock (lockAccess) 
       { 
        ShowWindow(Handle, SW_HIDE); 
        ShowWindow(StartHandle, SW_HIDE); 
       } 
      } 
      catch { } 
     } 
} 
Смежные вопросы