반응형

 

가상키보드 띄운 후 위치, 크기 조정하기

  • 윈도우 가상키보드(osk.exe) 띄우기
  • 윈도우 가상키보드(osk.exe) 위치, 크기 조정하기
  • 윈도우 가상키보드(osk.exe) 종료하기
  • 키보드가 없는 터치스크린방식으로 동작할때 해당기능이 꼭 필요합니다.

 

VKeyboard.cs

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace formsApp {
class VKeyboard {
[DllImport("User32.DLL")]
public static extern Boolean PostMessage(Int32 hWnd, Int32 Msg, Int32 wParam, Int32 lParam);
public const Int32 WM_USER = 1024;
public const Int32 WM_CSKEYBOARD = WM_USER + 192;
public const Int32 WM_CSKEYBOARDMOVE = WM_USER + 193;
public const Int32 WM_CSKEYBOARDRESIZE = WM_USER + 197;
static Process keyboardPs = null;
public static void showKeyboard() {
if(keyboardPs == null) {
string filePath;
if(Environment.Is64BitOperatingSystem) {
filePath = Path.Combine(Directory.GetDirectories(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "winsxs"),
"amd64_microsoft-windows-osk_*")[0],
"osk.exe");
} else {
filePath = @"C:\windows\system32\osk.exe";
}
if(File.Exists(filePath)) {
keyboardPs = Process.Start(filePath);
}
}
}
public static void hideKeyboard() {
if(keyboardPs != null) {
keyboardPs.Kill();
keyboardPs = null;
}
}
public static void moveWindow(int x, int y, int w, int h) {
if(keyboardPs.Handle != null) {
PostMessage(keyboardPs.Handle.ToInt32(), WM_CSKEYBOARDMOVE, x, y); // Move to 0, 0
PostMessage(keyboardPs.Handle.ToInt32(), WM_CSKEYBOARDRESIZE, w, h); // Resize to 600, 300
}
}
}
}

사용하기

//TextBox 진입시에 키보드 띄우고 위치, 크기 상단으로 지정
private void text_Enter(object sender, EventArgs e) {
VKeyboard.showKeyboard();
VKeyboard.moveWindow(0, 0, 1024, 350);
}
//TextBox 나갈때 키모드 안보이게 처리
private void text_Leave(object sender, EventArgs e) {
VKeyboard.hideKeyboard();
}

 

 소스 다운↓

VKeyboard.cs
0.00MB

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기