Справка онлайн

Описание Comfort On-Screen Keyboard Pro
Как купить Comfort On-Screen Keyboard Pro
Как пользоваться Comfort On-Screen Keyboard Pro
Использование экранной клавиатуры
Настройка типа клавиатуры
Редактирование значков-ярлыков
Параметры
Система
Тема оформления
Быстрые клавиши
Экранная клавиатура
Показать или скрыть
Расположение
Клавиши
Жесты
Масштаб
Помощь при наборе текста
Плавающее окошко
Текстовые предложения
Языковая панель
Значки быстрых клавиш
Звуки
Зависимости
Безопасность
Прочие настройки
Разработка
Как показать, скрыть, переместить или изменить размер экранной клавиатуры
Как заблокировать все настройки
Как активировать разные клавиатуры
FAQ для разработчиков
Параметры командной строки
Прочее
FAQ — часто задаваемые вопросы

Как показать, скрыть, переместить или изменить размер экранной клавиатуры

Вы можете использовать сообщения Windows для управления экранной клавиатурой.


Вот так:


WM_CSKEYBOARD = WM_USER + 192;

WM_CSKEYBOARDMOVE = WM_USER + 193;

WM_CSKEYBOARDRESIZE = WM_USER + 197;

 

// to show keyboard

PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARD, 1, 0);

 

// to close keyboard

PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARD, 2, 0);

 

// to fade keyboard

PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARD, 3, 0);

 

// to toggle (show/hide) keyboard

PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARD, 4, 0);

 

// to move keyboard (Left, Top - new position)

PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARDMOVE, Left, Top);


// to resize keyboard

PostMessage(FindWindow('TFirstForm', 'CKeyboardFirstForm'), WM_CSKEYBOARDRESIZE, Width, Height);



Private Const WM_CSKEYBOARD = WM_USER + 192

Private Const WM_CSKEYBOARDMOVE = WM_USER + 193

Private Const WM_CSKEYBOARDRESIZE = WM_USER + 197

 

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As StringAs Long

 

'Code to show keyboard

Dim hWnd As Long

hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm")

PostMessage hWnd, WM_CSKEYBOARD, 1, 0

 

'Code to close keyboard

Dim hWnd As Long

hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm")

PostMessage hWnd, WM_CSKEYBOARD, 2, 0

 

'Code to move keyboard

Dim hWnd As Long

hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm")

PostMessage hWnd, WM_CSKEYBOARDMOVE, 0, 0

 

'Code to resize keyboard

Dim hWnd As Long

hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm")

PostMessage hWnd, WM_CSKEYBOARDMOVE, Width, Height


using System;

using System.Windows.Forms;

using System.Runtime.InteropServices;

 

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;

 

[DllImport("user32.dll", EntryPoint = "FindWindow")]

private static extern Int32 FindWindow(string _ClassName, string _WindowName);

 

[DllImport("User32.DLL")]

public static extern Boolean PostMessage(Int32 hWnd, Int32 Msg, Int32 wParam, Int32 lParam);

 

 

Int32 hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm");

PostMessage(hWnd, WM_CSKEYBOARD, 1, 0 ); // Show

PostMessage(hWnd, WM_CSKEYBOARD, 2, 0); // Hide

PostMessage(hWnd, WM_CSKEYBOARDMOVE, 0, 0); // Move to 0, 0

PostMessage(hWnd, WM_CSKEYBOARDRESIZE, 600, 300); // Resize to 600, 300


Const WM_CSKEYBOARD = &H400 + 192 

Const WM_CSKEYBOARDMOVE = &H400 + 193 

Const WM_CSKEYBOARDRESIZE = &H400 + 197

 

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As StringAs Integer 

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As IntegerAs Integer 

 

'Open/show the Comfort Onscreen Keyboard 

Private Sub Button1_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button1.Click 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Close the Comfort Onscreen Keyboard 

Private Sub Button2_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button2.Click 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARD, 2, 0) 

End Sub 

 

'Move the Comfort Onscreen Keyboard; Move it first then show it 

Private Sub Button3_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button3.Click 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARDMOVE, 200, 200) 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Toggle the Comfort Onscreen Keyboard 

Private Sub Button4_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button4.Click 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARD, 4, 0) 

End Sub 

 

'Fade the Comfort Onscreen Keyboard 

Private Sub Button5_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button5.Click 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARD, 3, 0) 

End Sub 

 

'Change the keyboard type and show it 

Private Sub Button6_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button6.Click 

    'Change the Registry entry for the required keyboard 

    My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\ComfortSoftware\CKeyboard", "KeyboardName", "Name of your chosen keyboard") 

    'Open the keyboard 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Change to another keyboard type and show it 

Private Sub Button7_Click(ByVal sender As Системный.Object, ByVal e As Системный.EventArgs) Handles Button7.Click 

    'Change the Registry entry for the required keyboard 

    My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\ComfortSoftware\CKeyboard", "KeyboardName", "Name of another chosen keyboard") 

    'Open the keyboard 

    Dim hWnd As Integer 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm") 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 


using namespace System::Runtime::InteropServices; 

using namespace System::Security::Permissions; 

using namespace Microsoft::Win32; 

 

const System::UInt32 WM_USER = 1024; 

const System::UInt32 WM_CSKEYBOARD = WM_USER + 192; 

const System::UInt32 WM_CSKEYBOARDMOVE = WM_USER + 193;  

 

[DllImport("user32.dll")] 

extern IntPtr FindWindow(String^ lpClassName, String^ lpWindowName); 

[DllImport("user32.dll")] 

extern IntPtr PostMessage(System::IntPtr hWnd, System::UInt32 Msg, int wParam, int lParam); 

[assembly:RegistryPermissionAttribute(SecurityAction::RequestMinimum, All = "HKEY_CURRENT_USER")]; 

 

 

....blah blah blah you Обычный code...

 

 

void button1_Click(System::Object^  sender, System::EventArgs^  e) 

{ 

    // Open/show the Comfort Onscreen Keyboard 

    IntPtr hWnd; 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm"); 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0); 

} 

void button2_Click(System::Object^  sender, System::EventArgs^  e) 

{ 

        // close the Comfort Onscreen Keyboard 

    IntPtr hWnd; 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm"); 

    PostMessage(hWnd, WM_CSKEYBOARD, 2, 0); 

} 

void button3_Click(System::Object^  sender, System::EventArgs^  e) 

{ 

    //Move the Comfort Onscreen Keyboard; Move it first then show it 

    IntPtr hWnd; 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm"); 

    PostMessage(hWnd, WM_CSKEYBOARDMOVE, 200, 200); 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0); 

} 

void button4_Click(System::Object^  sender, System::EventArgs^  e) 

{ 

    //Toggle the Comfort Onscreen Keyboard 

    IntPtr hWnd; 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm"); 

    PostMessage(hWnd, WM_CSKEYBOARD, 4, 0); 

} 

void button5_Click(System::Object^  sender, System::EventArgs^  e) 

{ 

    //Fade the Comfort Onscreen Keyboard 

    IntPtr hWnd; 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm"); 

    PostMessage(hWnd, WM_CSKEYBOARD, 3, 0); 

} 

void button6_Click(System::Object^  sender, System::EventArgs^  e) 

{ 

    //Change the keyboard type and show it 

    System::Object ^kname="NumPad"; 

 

    //Change the Registry entry for the required keyboard 

 

    RegistryKey ^key= Registry::CurrentUser->OpenSubKey ( "Software\\ComfortSoftware\\CKeyboard",true); 

    key->SetValue("KeyboardName",kname); 

 

    //Open the keyboard 

    IntPtr hWnd; 

    hWnd = FindWindow("TFirstForm", "CKeyboardFirstForm"); 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0); 

}


/* 

 * This file is heavily based on Jawin: <a href="http://jawinproject.sourceforge.net/" rel="external">http://jawinproject.sourceforge.net/</a> 

 * 

 * assumes ComfortSoftware keyboard is loaded... 

 *  

 */ 

 

package client.keyboard; 

 

import java.io.ByteArrayInputStream; 

import java.io.IOException; 

 

import org.jawin.COMException; 

import org.jawin.FuncPtr; 

import org.jawin.ReturnFlags; 

import org.jawin.io.LittleEndianInputStream; 

import org.jawin.io.LittleEndianOutputStream; 

import org.jawin.io.NakedByteStream; 

 

public class ComfortSoftwareKeyboard { 

 

    protected static final String COMFORT_SOFTWARE_WINDOW_NAME = "CKeyboardFirstForm"; 

    protected static final String COMFORT_SOFTWARE_CLASS_NAME = "TFirstForm"; 

     

    protected static final int WM_USER = 1024; 

    protected static final int WM_CSKEYBOARD = WM_USER + 192; 

    protected static final int WM_CSKEYBOARDMOVE = WM_USER + 193; 

 

    protected static final Call FIND_WINDOW = Новый Call("USER32.DLL", "FindWindowW", "GG:I:", 8); 

    protected static final Call POST_MESSAGE = Новый Call("USER32.DLL", "PostMessageW", "IIII:I:", 16); 

     

    private static ComfortSoftwareKeyboard INSTANCE = Новый ComfortSoftwareKeyboard(); 

 

    public static ComfortSoftwareKeyboard getInstance() { 

        return INSTANCE; 

    } 

 

    protected int getWindowHandle() throws COMException, IOException { 

        FuncPtr findWindow = null; 

        findWindow = Новый FuncPtr(FIND_WINDOW.getDllName(), FIND_WINDOW.getFunctionName()); 

        NakedByteStream bs = Новый NakedByteStream(); 

        LittleEndianOutputStream leo = Новый LittleEndianOutputStream(bs); 

        leo.writeStringUnicode(COMFORT_SOFTWARE_CLASS_NAME); 

        leo.writeStringUnicode(COMFORT_SOFTWARE_WINDOW_NAME); 

        byte[] b = findWindow.invoke(FIND_WINDOW.getParameterDescription(), FIND_WINDOW.getStackSize(), bs, null, 

                ReturnFlags.CHECK_FALSE); 

        LittleEndianInputStream leis = Новый LittleEndianInputStream( 

                Новый ByteArrayInputStream(b)); 

        int l = leis.readInt(); 

        findWindow.close(); 

        return l; 

    } 

 

    public int move(int x, int y) throws COMException, IOException { 

        int hWnd = getWindowHandle(); 

 

        FuncPtr postMessage = null; 

        postMessage = Новый FuncPtr(POST_MESSAGE.getDllName(), POST_MESSAGE.getFunctionName()); 

        NakedByteStream bs = Новый NakedByteStream(); 

        LittleEndianOutputStream leo = Новый LittleEndianOutputStream(bs); 

 

        leo.writeInt(hWnd); 

        leo.writeInt(WM_CSKEYBOARDMOVE); 

        leo.writeInt(x); 

        leo.writeInt(y); 

 

        byte[] b = postMessage.invoke(POST_MESSAGE.getParameterDescription(), POST_MESSAGE.getStackSize(), bs, null, 

                ReturnFlags.CHECK_FALSE); 

        LittleEndianInputStream leis = Новый LittleEndianInputStream( 

                Новый ByteArrayInputStream(b)); 

        int l = leis.readInt(); 

        postMessage.close(); 

        return l; 

    } 

     

    public int setVisible(boolean visible) throws COMException, IOException { 

        int hWnd = getWindowHandle(); 

 

        FuncPtr postMessage = null; 

        postMessage = Новый FuncPtr(POST_MESSAGE.getDllName(), POST_MESSAGE.getFunctionName()); 

        NakedByteStream bs = Новый NakedByteStream(); 

        LittleEndianOutputStream leo = Новый LittleEndianOutputStream(bs); 

 

        leo.writeInt(hWnd); 

        leo.writeInt(WM_CSKEYBOARD); 

        leo.writeInt(visible ? 1 : 2); 

        leo.writeInt(0); 

 

        byte[] b = postMessage.invoke(POST_MESSAGE.getParameterDescription(), POST_MESSAGE.getStackSize(), bs, null, 

                ReturnFlags.CHECK_FALSE); 

        LittleEndianInputStream leis = Новый LittleEndianInputStream( 

                Новый ByteArrayInputStream(b)); 

        int l = leis.readInt(); 

        postMessage.close(); 

        return l; 

    } 

 

    public static void main(String[] args) throws Exception { 

        try { 

            ComfortSoftwareKeyboard keyboard = ComfortSoftwareKeyboard.getInstance(); 

            keyboard.setVisible(true); 

            Thread.sleep(1000); 

            keyboard.setVisible(false); 

            Thread.sleep(1000); 

            keyboard.setVisible(true); 

            for (int i = 0; i < 100;i++) { 

                keyboard.move(i, i); 

            } 

        } catch (COMException e) { 

        } finally { 

        } 

    } 

} 

 

class Call { 

    private int stackSize; 

    private String functionName; 

    private String parameterDescription; 

    private String dllName; 

     

    public Call(String dllName, String functionName, String parameterDescription, int stackSize) { 

        this.stackSize = stackSize; 

        this.functionName = functionName; 

        this.parameterDescription = parameterDescription; 

        this.dllName = dllName; 

    } 

    public int getStackSize() {return stackSize;} 

    public String getFunctionName() {return functionName;} 

    public String getParameterDescription() {return parameterDescription;} 

    public String getDllName() {return dllName;} 

}


Если вы не можете использовать сообщения Windows, скачайте и попробуйте эти файлы:

https://www.comfortsoftware.com/download/ShowKB.exe

https://www.comfortsoftware.com/download/HideKB.exe

https://www.comfortsoftware.com/download/ToggleKB.exe

https://www.comfortsoftware.com/download/MoveTopKB.exe

https://www.comfortsoftware.com/download/MoveBottomKB.exe

https://www.comfortsoftware.com/download/MoveLeftKB.exe

https://www.comfortsoftware.com/download/MoveRightKB.exe

https://www.comfortsoftware.com/download/MoveKB.exe (Формат командной строки: MoveKB.exe Left Top)

https://www.comfortsoftware.com/download/SetNameKB.exe (Формат командной строки: SetNameKB.exe KeyboardName)



Если вы разрабатываете программу-киоск с использованием HTML, для управления экранной клавиатурой можно использовать специальные функции JavaScript.


С помощью JavaScript вы можете показывать, скрывать или перемещать клавиатуру. Просто используйте специальные функции JavaScript для добавления информации о клавиатуре в заголовок браузера, и приложение будет отслеживать изменения этого заголовка.


Скачайте файл с функциями JavaScript и примерами отсюда: https://www.comfortsoftware.com/commander.html



WM_CSKEYBOARDMOVE: устранение проблемы с перемещением клавиатуры при использовании нескольких экранов с разным DPI.


Например, у экрана 1 разрешение 2560×1440 и в параметрах экрана Windows для него задан масштаб 125%. У экрана 2 разрешение 1920×1080 и масштаб 100%.


Откройте параметры совместимости приложения Windows для файла CKeyboard.exe и для поведения с высоким DPI выберите «Приложение», то есть пусть приложение само выполняет все вычисления, связанные с DPI. При таком параметре в функцию перемещения вашего API можно передавать значения в физических пикселях, и окно клавиатуры будет перемещаться точно в эту позицию.


Если вы хотите включить этот режим совместимости программно (например, в собственном установщике), необходимо задать следующий раздел реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers:

"C:\Program Files\ComfortKeyboard\CKeyboard.exe"="~ HIGHDPIAWARE"


Это будет применяться ко всем пользователям. Кроме того, этот раздел можно поместить в реестр для текущего пользователя (HKCU).