У меня есть приложение, которое нужно запустить на планшете с Windows 7, и мне нужно, чтобы экранная клавиатура была прикреплена к нижней части экрана. В идеале я хочу, чтобы кто-то не мог перемещать или изменять эти настройки.
Используя комментарий, размещенный в ответе на переполнение стека здесь in-windows-v">Как программно управлять панелью ввода текста (TabTip.exe) в Windows Vista/7 Я могу программно прикрепить клавиатуру к нижней части экрана, так что это начало. Мне пришлось запустить с повышенным разрешением, чтобы заставить его работать
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
string onScreenKeyboardPath = @"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe";
var onScreenKeyboardProc = Process.Start(onScreenKeyboardPath);
IntPtr wKB = FindWindow("IPTip_Main_Window", null);
const uint WM_COMMAND = 0x111;
// Where message is 10021 for dock bottom, 10023 for dock top and 10020 for floating
bool x = PostMessage(wKB, WM_COMMAND, new IntPtr(10021), IntPtr.Zero);
Я бы предпочел иметь возможность контролировать размер немного лучше, чем это, поэтому я попытался переместить окно следующим образом:
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
private const uint SWP_SHOWWINDOW = 0x0040;
bool ok = SetWindowPos(wKB, this.Handle, 0, 500, 750, 500, SWP_SHOWWINDOW);
ok возвращает true, но окна не сдвигаются с места. Если я попытаюсь сделать это с помощью блокнота, он отлично сработает. Так это проблема с этой конкретной программой?