반응형
가상키보드 띄운 후 위치, 크기 조정하기
- 윈도우 가상키보드(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();
}
소스 다운↓↓↓
반응형
'윈폼(Winform)' 카테고리의 다른 글
C# ini 사용하기 (0) | 2021.12.05 |
---|---|
C# Reflection(클래스의 필드명 모두 가져오고, 값 넣기) (0) | 2021.11.20 |
C# 소수점 반올림, 올림, 버림(Round, Ceiling, Truncate) (0) | 2021.11.20 |
C# 동적 개수의 파라메타(params) 받기 (0) | 2021.11.20 |
C# 비밀번호 체크(영문, 숫자, 특수문자, 길이 체크) (0) | 2021.11.18 |
최근댓글