Online-Help

Introductie van Comfort Keys Pro
Hoe te kopen Comfort Keys Pro
Hoe Comfort Keys Pro te gebruiken
Snelkoppelingen instellingen
Werken met sjabloonmanager
Werken met Klembordbeheer
Het schermtoetsenbord gebruiken
Controle van de invoertaal
Het toetsenbordtype aanpassen
Sjablonen bewerken
Teksttags
Snelkoppelingspictogrammen bewerken
Actietypen
Een programma uitvoeren; een document of map openen
Open een of meerdere internetbronnen
Tekst plakken
Speel een toetsaanslagmacro af
Verbinden/losmaken van een netwerk
Comfort Keys Pro acties
Geluidscontrole
Beeldschermcontrole
Venstercontrole
Voer een systeemactie uit
Wijzig de taal of hoofdlettergebruik
Afsluiten/Herstarten/Afmelden
Blokkeer toets of snelkoppeling
Vervang toets of snelkoppeling
Instellingen
Systeem
Uiterlijk thema
Snelkoppelingen
Schermtoetsenbord
Weergeven/Verbergen
Positie
Toetsen
Gebaren
Zoom
Typehulp
Zwevend venster
Klembordbeheer
Sjabloonbeheer
Tekstsuggesties
Taalschakelaar
Taalbalk
Snelkoppeling pictogrammen
Taakwisselvenster
Procesgeschiedenisvenster
Geluiden
Afhankelijke instellingen
Beveiliging
Geavanceerde opties
Ontwikkeling
Hoe u het schermtoetsenbord kunt weergeven, verbergen, verplaatsen of het formaat ervan kunt wijzigen
Hoe alle instellingen te vergrendelen
Hoe verschillende toetsenborden te activeren
Veelgestelde vragen voor ontwikkelaars
Parameters voor de opdrachtregel
Andere problemen
FAQ - Veelgestelde vragen

Hoe u het schermtoetsenbord kunt weergeven, verbergen, verplaatsen of het formaat ervan kunt wijzigen

U kunt Windows Messages gebruiken om het schermtoetsenbord te manipuleren.


Zoals dit:


WM_CSKEYBOARD = WM_USER + 192;

WM_CSKEYBOARDMOVE = WM_USER + 193;

WM_CSKEYBOARDRESIZE = WM_USER + 197;

 

// om toetsenbord weer te geven

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

 

// sluit het toetsenbord

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

 

// om het toetsenbord te vervagen

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

 

// schakel het toetsenbord (tonen/verbergen)

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

 

// verplaats het toetsenbord (Left, Top - nieuwe positie)

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


// wijzig de grootte van het toetsenbord

PostMessage(FindWindow('TFirstForm', 'CKeysFirstForm'), 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 om het toetsenbord weer te geven

Dim hWnd As Long

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

PostMessage hWnd, WM_CSKEYBOARD, 1, 0

 

'Code om het toetsenbord te sluiten

Dim hWnd As Long

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

PostMessage hWnd, WM_CSKEYBOARD, 2, 0

 

'Code om het toetsenbord te verplaatsen

Dim hWnd As Long

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

PostMessage hWnd, WM_CSKEYBOARDMOVE, 0, 0

 

'Code om de grootte van het toetsenbord te wijzigen

Dim hWnd As Long

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

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", "CKeysFirstForm");

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

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

PostMessage(hWnd, WM_CSKEYBOARDMOVE, 0, 0); // Verplaats naar 0, 0

PostMessage(hWnd, WM_CSKEYBOARDRESIZE, 600, 300); // Formaat wijzigen naar 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/toon Comfort On-Screen Keyboard 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Sluit Comfort On-Screen Keyboard 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 2, 0) 

End Sub 

 

'Verplaats Comfort On-Screen Keyboard; Verplaats het eerst en toon het dan 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARDMOVE, 200, 200) 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Wissel Comfort On-Screen Keyboard 

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 4, 0) 

End Sub 

 

'Vervaag Comfort On-Screen Keyboard 

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 3, 0) 

End Sub 

 

'Wijzig het toetsenbordtype en toon het 

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click 

    'Wijzig de registervermelding voor het vereiste toetsenbord 

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

    'Open het toetsenbord 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Wijzig naar een ander toetsenbordtype en toon het 

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click 

    'Wijzig de registervermelding voor het vereiste toetsenbord 

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

    'Open het toetsenbord 

    Dim hWnd As Integer 

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

    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 normal code...

 

 

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

{ 

    // Open/toon Comfort On-Screen Keyboard 

    IntPtr hWnd; 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0); 

} 

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

{ 

        // Sluit Comfort On-Screen Keyboard 

    IntPtr hWnd; 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 2, 0); 

} 

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

{ 

    //Verplaats Comfort On-Screen Keyboard; Verplaats het eerst en toon het dan 

    IntPtr hWnd; 

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

    PostMessage(hWnd, WM_CSKEYBOARDMOVE, 200, 200); 

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0); 

} 

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

{ 

    //Wissel Comfort On-Screen Keyboard 

    IntPtr hWnd; 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 4, 0); 

} 

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

{ 

    //Vervaag Comfort On-Screen Keyboard 

    IntPtr hWnd; 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 3, 0); 

} 

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

{ 

    //Wijzig het toetsenbordtype en toon het 

    System::Object ^kname="NumPad"; 

 

    //Wijzig de registervermelding voor het vereiste toetsenbord 

 

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

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

 

    //Open het toetsenbord 

    IntPtr hWnd; 

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

    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 = "CKeysFirstForm"; 

    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 = new Call("USER32.DLL", "FindWindowW", "GG:I:", 8); 

    protected static final Call POST_MESSAGE = new Call("USER32.DLL", "PostMessageW", "IIII:I:", 16); 

     

    private static ComfortSoftwareKeyboard INSTANCE = new ComfortSoftwareKeyboard(); 

 

    public static ComfortSoftwareKeyboard getInstance() { 

        return INSTANCE; 

    } 

 

    protected int getWindowHandle() throws COMException, IOException { 

        FuncPtr findWindow = null; 

        findWindow = new FuncPtr(FIND_WINDOW.getDllName(), FIND_WINDOW.getFunctionName()); 

        NakedByteStream bs = new NakedByteStream(); 

        LittleEndianOutputStream leo = new 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 = new LittleEndianInputStream( 

                new 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 = new FuncPtr(POST_MESSAGE.getDllName(), POST_MESSAGE.getFunctionName()); 

        NakedByteStream bs = new NakedByteStream(); 

        LittleEndianOutputStream leo = new 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 = new LittleEndianInputStream( 

                new 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 = new FuncPtr(POST_MESSAGE.getDllName(), POST_MESSAGE.getFunctionName()); 

        NakedByteStream bs = new NakedByteStream(); 

        LittleEndianOutputStream leo = new 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 = new LittleEndianInputStream( 

                new 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;} 

}


Als u geen Windows-berichten kunt gebruiken, download en probeer dan deze bestanden:

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 (Opdrachtregelindeling: MoveKB.exe linksboven)

https://www.comfortsoftware.com/download/SetNameKB.exe (Opdrachtregelindeling: SetNameKB.exe (toetsenbordnaam)



Als u kiosksoftware schrijft met HTML, kunt u de speciale JavaScript-functies gebruiken om het schermtoetsenbord te bedienen.


Met JavaScript kun je het toetsenbord weergeven, verbergen of verplaatsen. Gebruik gewoon de speciale JavaScript-functies om toetsenbordgerelateerde informatie aan het browserbijschrift toe te voegen, en de applicatie zal het bijschrift controleren op wijzigingen.


Download het bestand met JavaScript-functies en voorbeelden hier: https://www.comfortsoftware.com/commander.html



WM_CSKEYBOARDMOVE: Het probleem oplossen met het verplaatsen van het toetsenbord bij gebruik van meerdere schermen met verschillende DPI.


Scherm 1 heeft bijvoorbeeld een resolutie van 2560x1440 en is ingesteld op "125% schaal". in Windows-weergave-instellingen. Scherm 2 is 1920x1080 en staat ingesteld op "100% schaal".


Open de Windows 10-app-compatibiliteitsinstellingen van het bestand CKeys.exe en stel het DPI-gedrag in op "Applicatie", wat betekent dat de applicatie alle DPI-gerelateerde berekeningen beheert. Als deze instelling is geactiveerd, kunt u fysieke pixelwaarden doorgeven aan de verplaatsingsfunctie van uw API, waarna het toetsenbordvenster naar precies die positie wordt verplaatst.


Als u deze compatibiliteitsmodus programmatisch wilt activeren (bijvoorbeeld met uw eigen installatieprogramma), moet u de volgende registersleutel instellen:

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

"C:\Program Files\ComfortKeys\CKeys.exe"="~ HIGHDPIAWARE"


Dit geldt dan voor alle gebruikers. Als alternatief kunt u deze sleutel in het register voor de huidige gebruiker (HKCU) plaatsen.