Как определить интерфейс Windows справа налево c #? - PullRequest
0 голосов
/ 23 ноября 2010

Я хочу разместить небольшую форму над значками уведомлений в интерфейсе слева направо, значки справа от экрана, в интерфейсе справа налево значки в левой части экрана. Мне нужен коддля работы на xp и win7 пожалуйста

Ответы [ 5 ]

2 голосов
/ 23 ноября 2010

Флаг, который вы ищете: WS_EX_LAYOUTRTL (400000 шестнадцатеричный) Вы получите этот флаг, позвонив GetWindowLong(FindWindow(L"HHTaskBar", NULL), GWL_EXSTYLE).

2 голосов
/ 23 ноября 2010

Это то, что вы ищете?

private static bool IsRightToLeft()
{
     return CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;
} 
0 голосов
/ 23 ноября 2010

Если вы настаиваете, вы можете найти положение и размер кнопки запуска Windows.Чтобы сделать это, сначала добавьте это в ваш класс:

[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hwnd, ref Rectangle rectangle);

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, IntPtr className, string lpszWindow);

Затем используйте такой код .. В этом примере я показываю его ширину, но вы также можете прочитать его расположение слева / справа:

IntPtr hwndTaskBarWin = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Shell_TrayWnd", null);
IntPtr hwndStartButton = FindWindowEx(hwndTaskBarWin, IntPtr.Zero, "Button", null);
if (hwndStartButton.Equals(IntPtr.Zero))
{
    //Maybe Vista/Windows7?
    hwndStartButton = FindWindowEx(IntPtr.Zero, IntPtr.Zero, (IntPtr)0xC017, null);
}

if (hwndStartButton.Equals(IntPtr.Zero))
{
    MessageBox.Show("Sorry, can't find the Start button/orb");
}
else
{
    Rectangle rect = Rectangle.Empty;
    if (GetWindowRect(hwndStartButton, ref rect))
        MessageBox.Show("Start button width: " + rect.Width);
}

Успешно протестировано под XP и Windows7, трюк с Vista / 7 получил Уэйлон Флинн в ответе на этот вопрос .

0 голосов
/ 23 ноября 2010

Стюарт Данкелд это не поможет, CultureInfo не имеет ничего общего с интерфейсом если бы я мог найти расположение кнопки запуска (на панели задач), которая помогла бы

0 голосов
/ 23 ноября 2010

Любой System.Windows.Forms.Control поддерживает такую ​​проверку: Control.RightToLeft.

* MSDN 1006 *

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