반응형

 

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

  • 윈도우 가상키보드(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

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