Guida online

Presentazione di Comfort Keys Pro
Come acquistare Comfort Keys Pro
Come utilizzare Comfort Keys Pro
Impostazioni dei Comandi-da-Tastiera
Lavorare con il gestore modelli
Lavorare con il gestore degli appunti
Utilizzando la tastiera su schermo
Controllo della lingua di input
Personalizzazione del tipo di tastiera
Modifica dei modelli
Tag di testo
Modifica delle icone di collegamento
Tipi di azioni
Esegui un programma; aprire un documento o una cartella
Apri una o più risorse Internet
Incolla il testo
Riproduci una macro premendo un tasto
Connettiti/Disconnettiti da una rete
Comfort Keys Pro azioni
Controllo Audio
Controllo Monitor
Controllo della Finestra
Eseguire un'azione di sistema
Cambia la lingua o il caso
Blocca/Riavvia/Spegni
Blocca Tasto o Comando-da-Tastiera
Sostituisci Tasto o Comando-da-Tastiera
Impostazioni
Sistema
Tema aspetto
Comandi-da-Tastiera
Tastiera su schermo
Mostra/Nascondi
Posizione
Tasti
Gesti
Zoom
Aiuto alla battitura
Finestra flottante
Gestore degli Appunti
Modelli
Suggerimenti di testo
Commutatore di Lingua
Barra della lingua
Icone dei Comandi-da-Tastiera
Finestra di passaggio tra le applicazioni
Registro storico dei Processi
Suoni
Dipendenze
Sicurezza
Avanzate
Sviluppo
Come mostrare, nascondere, spostare o ridimensionnare la tastiera su schermo
Come bloccare tutte le impostazioni
Come attivare tastiere diverse
Domande frequenti per gli sviluppatori
Parametri della riga di comando
Altri problemi
FAQ - Domande frequenti

Come mostrare, nascondere, spostare o ridimensionnare la tastiera su schermo

Puoi utilizzare Messaggi di Windows per manipolare la tastiera su schermo.


In questo modo:


WM_CSKEYBOARD = WM_USER + 192;

WM_CSKEYBOARDMOVE = WM_USER + 193;

WM_CSKEYBOARDRESIZE = WM_USER + 197;

 

// per mostrare la tastiera

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

 

// chiudi la tastiera

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

 

// per sfumare la tastiera

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

 

// attiva/disattiva (mostra/nascondi) la tastiera

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

 

// sposta la tastiera (Left, Top - nuova posizione)

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


// ridimensiona la tastiera

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

 

'Codice per mostrare la tastiera

Dim hWnd As Long

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

PostMessage hWnd, WM_CSKEYBOARD, 1, 0

 

'Codice per chiudere la tastiera

Dim hWnd As Long

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

PostMessage hWnd, WM_CSKEYBOARD, 2, 0

 

'Codice per spostare la tastiera

Dim hWnd As Long

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

PostMessage hWnd, WM_CSKEYBOARDMOVE, 0, 0

 

'Codice per ridimensionare la tastiera

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 ); // Mostra

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

PostMessage(hWnd, WM_CSKEYBOARDMOVE, 0, 0); // Passa a 0, 0

PostMessage(hWnd, WM_CSKEYBOARDRESIZE, 600, 300); // Ridimensiona a 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 

 

'Apri/mostra 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 

 

'Chiudi 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 

 

'Sposta Comfort On-Screen Keyboard; Spostala prima e poi mostrala 

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 

 

'Attiva/disattiva 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 

 

'Dissolvi 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 

 

'Cambia il tipo di tastiera e mostralo 

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

    'Modifica la voce di registro per la tastiera richiesta 

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

    'Aprire la tastiera 

    Dim hWnd As Integer 

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

    PostMessage(hWnd, WM_CSKEYBOARD, 1, 0) 

End Sub 

 

'Passa a un altro tipo di tastiera e mostralo 

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

    'Modifica la voce di registro per la tastiera richiesta 

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

    'Aprire la tastiera 

    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) 

{ 

    // Apri/mostra 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) 

{ 

        // Chiudi 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) 

{ 

    //Sposta Comfort On-Screen Keyboard; Spostala prima e poi mostrala 

    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) 

{ 

    //Attiva/disattiva 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) 

{ 

    //Dissolvi 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) 

{ 

    //Cambia il tipo di tastiera e mostralo 

    System::Object ^kname="NumPad"; 

 

    //Modifica la voce di registro per la tastiera richiesta 

 

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

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

 

    //Aprire la tastiera 

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

}


Se non riesci a utilizzare Messaggi di Windows, scarica e prova questi file:

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 (Formato della riga di comando: MoveKB.exe Left Top)

https://www.comfortsoftware.com/download/SetNameKB.exe (Formato della riga di comando: SetNameKB.exe KeyboardName)



Se stai scrivendo software per chioschi utilizzando HTML, puoi utilizzare le speciali funzioni JavaScript per controllare la tastiera su schermo.


Con JavaScript puoi mostrare, nascondere o spostare la tastiera. Basta utilizzare le speciali funzioni JavaScript per aggiungere informazioni relative alla tastiera alla didascalia del browser e l'applicazione monitorerà le modifiche della didascalia.


Scarica il file con le funzioni JavaScript e gli esempi da qui: https://www.comfortsoftware.com/commander.html



WM_CSKEYBOARDMOVE: risoluzione del problema relativo allo spostamento della tastiera quando si utilizzano più schermi con DPI diversi.


Ad esempio, lo schermo 1 ha una risoluzione di 2560x1440 ed è impostato su "scala 125%"; nelle impostazioni di visualizzazione di Windows. Lo schermo 2 è 1920x1080 ed è impostato su "scala 100%".


Apri le impostazioni di compatibilità dell'app Windows 10 del file CKeys.exe e imposta il comportamento DPI su "Applicazione", il che significa che l'applicazione gestisce tutti i calcoli relativi ai DPI. Con questa impostazione attivata, puoi passare valori di pixel fisici alla funzione di spostamento della tua API e la finestra della tastiera verrà quindi spostata esattamente in quella posizione.


Se desideri attivare questa modalità di compatibilità a livello di codice (ad esempio con il tuo programma di installazione), devi impostare la seguente chiave di registro:

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

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


Questo verrà quindi applicato a tutti gli utenti. In alternativa, è possibile inserire questa chiave nel registro dell'utente corrente (HKCU).