Cómo ampliar las aplicaciones del teclado
Cómo expandir el teclado de GarageBand
Primero abra la aplicación GarageBand, haga clic en el signo más en la esquina superior izquierda, luego haga clic en Crear nueva canción para ingresar a la interfaz de selección de instrumentos, deslícese hacia la izquierda y hacia la derecha para cambiar de instrumento, y finalmente seleccione el teclado o Un teclado inteligente será suficiente.
GarageBand es una aplicación de software para crear música. Mediante la edición con GarageBand, puedes crear archivos de música con efectos de sonido como una banda, lo que proporciona a los creadores una forma más sencilla y cómoda de crear música.
Las funciones de GarageBand:
1. Apple GarageBand es un software de producción musical.
2. Puede simular los sonidos de varios instrumentos musicales y producir música DIY.
3. GarageBand tiene la afinación de tono para la mayoría de los instrumentos, y también puedes editar el audio del instrumento que se está reproduciendo.
Puedes ampliar las fuentes del teclado de tu computadora siguiendo estos pasos:
Abre el Panel de control.
Selecciona "Fuente".
Haga clic en Archivo y seleccione Instalar nuevas fuentes.
Busque en su computadora el archivo de fuente para instalar.
Haga clic en Abrir para instalar la fuente seleccionada.
La fuente ahora aparecerá en su lista de fuentes y estará disponible en todas las aplicaciones.
Tenga en cuenta que la instalación de fuentes puede requerir privilegios de administrador.
Cómo simular la entrada del teclado para todas las aplicaciones
1. En Microsoft Windows, el teclado y el mouse son dos fuentes de entrada de usuario estándar, que generalmente se complementan en algunas operaciones superpuestas. . Por supuesto, los ratones se utilizan más en aplicaciones hoy en día que hace 10 años. Incluso en algunas aplicaciones estamos más acostumbrados a usar el mouse, como en juegos, programas de dibujo, programas de música y navegadores web. Sin embargo, podemos prescindir del mouse, pero no podemos quitar el teclado de una PC normal en absoluto.
La forma en que un programa de Windows obtiene la entrada del teclado: la entrada del teclado se pasa al procedimiento de ventana del programa en forma de mensaje. De hecho, el teclado es un ejemplo obvio cuando se aprende por primera vez sobre mensajes: el tipo de información que se supone que los mensajes transmiten a una aplicación.
Windows utiliza 8 mensajes diferentes para entregar diferentes eventos de teclado. Esto puede parecer mucho, pero (como hemos visto) el programa puede ignorar al menos la mitad de estos mensajes sin ningún problema. Y, en la mayoría de los casos, estos mensajes contienen más información del teclado de la que necesita el programa. Parte del manejo del teclado es reconocer qué mensajes son importantes y cuáles no.
2. Conceptos básicos del teclado
Aunque las aplicaciones pueden ingresar información a través del mouse en muchos casos, el teclado sigue siendo un dispositivo de entrada importante e irremplazable en las PC.
Utilice el teclado como dispositivo de entrada. Cada vez que el usuario presiona o suelta una tecla, se genera una interrupción. Esta interrupción activa el controlador de teclado KEYBOARD.DRV para manejar la interrupción del teclado. El programa KEYBOARD.DRV codificará de acuerdo con las diferentes operaciones del usuario, luego llamará al módulo de usuario de Windows USER.EXE para generar un mensaje de teclado y enviará el mensaje a la cola de mensajes para esperar su procesamiento.
1. Códigos de escaneo y códigos virtuales
Los códigos de escaneo corresponden a diferentes teclas del teclado Cuando se presiona o suelta cada tecla, se genera un código de escaneo único como su propia identificación. Los códigos de escaneo dependen del dispositivo de hardware específico, es decir, se pueden generar diferentes códigos de escaneo en diferentes máquinas cuando se presiona o suelta la misma tecla. En los programas se suelen utilizar códigos virtuales definidos por el sistema Windows e independientes de dispositivos específicos. Mientras una pulsación de tecla genera un código de escaneo, el controlador de teclado KEYBOARD.DRV intercepta el código de escaneo de la tecla, luego lo traduce al código virtual correspondiente y luego codifica el código de escaneo y el código virtual juntos para formar un mensaje de teclado. Por lo tanto, el mensaje final del teclado enviado a la cola de mensajes contiene tanto el código de escaneo como el código virtual.
Los códigos virtuales de uso frecuente están en WINDOWS. Tal como se define en el archivo H, los valores, los símbolos constantes y los significados de los códigos virtuales de uso común se muestran en la tabla.
Significado del símbolo constante del valor (hexadecimal)
01VK_LBUTTON botón izquierdo del mouse
02VK_RBUTTON botón derecho del mouse
03VK_CANCEL Tecla de interrupción de pausa
p>
04VK_MBUTTON botón central del ratón
05-07--Indefinido
08 Tecla VK_BACK (Retroceso)
09 Tecla VK_TABTab
0A-0B--Indefinido
0CVK_CLEARTecla Borrar
0DVK_RETURNEtecla Intro
0E-0F--Indefinido
10VK_SHIFTTecla Mayús
11 Tecla VK_CONTROLCtrl
12 VK_MENU Tecla Alt
13 VK_PAUSE Tecla de pausa
14 VK_CAPTIAL Tecla Bloq Mayús
15-19--Sistema de caracteres chinos reservado
1A--Indefinido
1BVK_ESCAPEEsc clave
1C-1F--Sistema de caracteres chinos reservado
20VK_SPACE clave de espacio
21VK_PRIORPageUp tecla
22VK_NEXTPageDown tecla
23VK_ENDTecla Fin
24VK_HOMETecla Inicio
25VK_LEFT←(Flecha izquierda)
26 Tecla VK_UP ↑ (Flecha arriba)
27 Tecla VK_RIGHT→(Flecha derecha)
28 Tecla VK_DOWN↓ (Flecha abajo)
29 VK_SELECT Tecla de selección
2A--OEM reservado
2BVK_EXECUTEEjecutar clave
2CVK_SNAPSHOTImprimirPantalla
2DVK_INSERTInsertar clave
2EVK_DELETEDeliminar clave
2FVK_HELPAyuda clave
30-39VK_0-VK_9Teclas numéricas 0-9
3A-40--Indefinida
41-5AVK_A-VK_ZAteclas alfabéticas A-Z
5B-5F--Undefinido
60-69VK_NUMPAD0-VK_NUMPAD9 teclas numéricas del teclado pequeño 0-9
6AVK_MULTIPLY* tecla (signo de multiplicación)
6BVK_ADD (más signo)
6CVK_SEPAPATOR tecla delimitadora
6EVK_SUBTRACT- tecla (signo menos)
6FVK_DECIMAL tecla (punto decimal)
70-. Tecla 87VK_DIVIDE/(signo de división)
88-8FVK_F1-VK_F24F1-F24 Tecla de función
90VK_NUMBERLOCK Tecla de bloqueo numérico
91VK_SCROLL Tecla de bloqueo de desplazamiento
92- B9--Indefinido
BA-C0--OEM reservado
C1-DA--Indefinido
DB_E4--OEM reservado
p>
E5--Indefinido
E6--OEM reservado
E7-E8--Indefinido
E9-F5--OEM reservado p>
F6-FE--Indefinido
2. Enfoque de entrada
Al mismo tiempo, puede haber varios programas diferentes ejecutándose en Windows, lo que significa que existen varias ventanas al mismo tiempo. En este momento, el teclado es compartido por varias ventanas, pero solo una ventana puede recibir mensajes de teclado. Esta ventana que puede recibir mensajes de teclado se llama ventana con foco de entrada.
La ventana con foco de entrada debe ser la ventana activa actual, o una ventana secundaria de la ventana activa, y su título y borde se resaltarán para distinguirla de otras ventanas. El ícono en lugar de la ventana también puede tener foco de entrada. En este momento, Windows también envía un mensaje al ícono, pero el formato del mensaje es ligeramente diferente.
El procedimiento de ventana puede hacer que el formulario gane o pierda el foco de entrada enviando mensajes WM_SETFOCUS y WM_KILLFOCUS. Los programas también pueden determinar cuándo un formulario gana o pierde el foco de entrada capturando los mensajes WM_SETFOCUS y WM_KILLFOCUS. El mensaje WM_SETFOCUS indica que la ventana está ganando el foco de entrada y el mensaje WM_KILLFOCUS indica que la ventana está perdiendo el foco de entrada.
3. Mensajes de teclado
Los mensajes de teclado se dividen en mensajes clave del sistema y mensajes clave que no son del sistema. Los mensajes clave del sistema se refieren a mensajes clave generados por la combinación de la tecla de popa y otras teclas. El mensaje WM_SYSKEYDOWN se genera cuando se presiona la tecla del sistema y el mensaje WM_SYSKEYUP se genera cuando se suelta la tecla del sistema. La combinación de teclas formada por la tecla de popa y otras teclas se suele utilizar para seleccionar menús de programas y menús del sistema, o para cambiar entre diferentes programas. Por lo tanto, los mensajes clave del sistema deben ser manejados por Windows. Los programas compilados por los usuarios generalmente no procesan los mensajes clave del sistema, sino que los entregan a la función DefWindowProc para su procesamiento. Si el usuario desea procesar mensajes clave del sistema, debe enviarlos a la función DefWindowProc después de procesar estos mensajes para que el sistema Windows pueda funcionar normalmente.
Algunos mensajes de pulsaciones de teclas se pueden convertir en mensajes de caracteres, como teclas de letras, teclas numéricas, etc. Algunas teclas solo pueden generar mensajes clave pero no mensajes de caracteres, como la tecla Mayús, la tecla Insertar, etc. La función TranslateMessage en el bucle de mensajes puede convertir mensajes de pulsaciones de teclas en mensajes de caracteres. Cuando la función GetMessage captura un mensaje WM_SYSKEYDOWN o un mensaje WM_KEYDOWN, la función TranslateMessage determina si la clave que generó el mensaje se puede convertir en un mensaje de caracteres. Si es posible, el mensaje se convierte en un mensaje de caracteres y luego en el mensaje de caracteres convertido. se envía a través de la función DispatchMessage Enviar a la cola de mensajes. Hay cuatro tipos de mensajes de caracteres***, como se muestra en la tabla.
Caracteres caracteres del sistema caracteres que no son del sistema
Caracteres normales WM_SYSCHARWM_CHAR
Caracteres muertos WM_SYSDEADCHARWM_DEADCHAR
Los caracteres muertos son generados por algunos teclados especiales Debido a las pulsaciones de teclas, Windows generalmente ignora los mensajes generados por caracteres inactivos.
Los mensajes de Windows generalmente se transmiten a la función de procesamiento de mensajes a través de una variable de estructura MSG. Para mensajes de teclado, los campos más importantes de las variables de estructura MSG son el campo lParam y el campo wParam. El campo wParam se utiliza para guardar el código de clave virtual de la clave o el código ASCII del carácter. Para mensajes que no son de caracteres, el campo wParam almacena el código de clave virtual de la clave; para mensajes de caracteres, el campo wParam no almacena el código ASCII del carácter. El campo lParam se utiliza para guardar información adicional generada durante las pulsaciones de teclas. De hecho, una variable lParam de 32 bits se divide en seis partes y registra la siguiente información relacionada: número de repeticiones, código de escaneo OEM, indicador de clave extendida, indicador de clave asociada. anterior Estado de clave de un clic y estado de transición. Los significados de cada bit en el campo lParam se muestran en la tabla.
El significado de los dígitos
El número acumulado de repeticiones de pulsaciones de teclas de 0 a 15
De 16 a 23 códigos de escaneo OEM
Si son 24 es una tecla extendida
25-28 Indefinido
29 Si se usa la tecla asociada y si se presiona la tecla Alt al mismo tiempo.
30El estado de pulsación de tecla anterior, 0 significa que se levantó el estado anterior de la tecla, 1 significa que se presionó el estado anterior
31Estado de conversión
Diferentes secuencias de pulsaciones de teclas producen mensajes diferentes. Por ejemplo, si se presiona y suelta la tecla 1, el proceso de lectura generará tres mensajes como se muestra en la tabla. El mensaje generado al presionar la tecla 1 y el valor de wParam
El valor de la variable wParam del mensaje
WM_KEYDOWN código virtual 1
WM_CHARASCII código "1"
p>WM_KEYUP código virtual 1
Si presiona la tecla Shift y luego presiona la tecla 1 y la suelta, los mensajes como se muestran en la tabla se generarán en secuencia. El mensaje generado al presionar la tecla Shift y luego presionar la tecla 1 y el valor de wParam
El valor de la variable wParam del mensaje
WM_KEYDOWN código virtual VK_SHIFT
WM_KEYDOWN código virtual VK_1
WM_CHARASCII código "1"
WM_KEYUP código virtual VK_1
WM_KEYUP código virtual VK_SHIF
Ejemplo de aplicación de teclado
A continuación se utiliza un ejemplo de aplicación para ilustrar cómo manejar los mensajes del teclado en la programación real.
#include
#include
//Variables globales
RECTrc; //Registra el área rectangular de la pantalla de desplazamiento
intxChar, yChar; //Coordenadas del punto de entrada de texto
WNDCLASSEXwnd; //Variable de estructura de clase de ventana
charszAppName[]="Programa de monitoreo de mensajes de teclado"; //Nombre de clase de ventana
//Declaración de función
LRESULTCALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);
BOOLMyRegisterClass(HINSTANCEhInstance
);BOOLInitInstance( HINSTANCEhInstance, intiCmdShow);
//Función: WinMain
//Función: Función de entrada
intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRszCmdLine, intiCmdShow)
{
MSGmsg;
if(!MyRegisterClass(hInstance))
{
returnFALSE ;
}
if(!InitInstance(hInstance, iCmdShow))
{
returnFALSE;
}
while(GetMessage(msg, NULL, 0, 0))
{
TranslateMessage(msg);
DispatchMessage( msg);
p>}
returnmsg.wParam;
}
//Función: ShowKey
//Función: Implementada en Mostrar información clave en la ventana
voidShowKey(HWNDhwnd, intiType, char*szMessage, WPARAMwParam, LPARAMlParam)
{
staticchar *szFormat[2]={" -14s3dc6u4d5s5s6s6s",
"-14s3dc6u4d5s5s6s6s"};
charszBuffer[80];
HDChdc;
ScrollWindowEx(hwnd, 0, -yChar, rc, rc, NULL, NULL, SW_INVALIDATE);
hdc=GetDC(hwnd);
SelectObject(hdc, GetStockObject( SYSTEM_FIXED_FONT));
TextOut(hdc,
xChar,
rc.bottom-yChar,
szBuffer,
wsprintfszBuffer,
szFormat[iType],
szMessage, //mensaje
wParam, //código de clave virtual
(BYTE)(iType?wParam: ''), //Mostrar valor de carácter
LOWORD(lPar
am), //Número de repeticiones
HIWORD(lParam)0xFF, //Código de escaneo de teclado OEM
//Determine si es una tecla extendida del teclado mejorado
(PSTR)(0x01000000lParam?"Yes":"No"),
//Determine si la tecla ALT se usa al mismo tiempo
(PSTR)( 0x20000000lParam?"Sí":"No" "),
(PSTR)(0x40000000lParam? "Press": "Levantar"),
//Determinar el estado de la pulsación de tecla anterior
(PSTR )(0x80000000lParam? "Press": "Lift"))
//¿Juzgar el estado de la conversión?
);
ReleaseDC(hwnd, hdc) ;?
ValidateRect(hwnd, NULL);?
}
//Función: WndProc
//Función: Procesamiento del mensaje de la ventana principal
LRESULTCALLBACKWndProc(HWNDhwnd, UINTiMsg, WPARAMwParam, LPARAMlParam)
{
staticcharszTop[]="Carácter clave del mensaje número de repetición código de escaneo código de extensión ALT Estado anterior estado de transición";
staticcharszUnd[]="______________________________________________";
//Texto de salida en la ventana como título de información
HDChdc;
p>
PAINTSTRUCTps;
TEXTMETRICtm;
cambiar(iMsg)
{
caseWM_CREATE: //Manejar el mensaje de creación de ventana
hdc=GetDC(hwnd); //Establecer la fuente
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); Recuperar los datos de medición de la fuente actual
GetTextMetrics(hdc, tm);
xChar=tm.tmAveCharWidth //Guardar el ancho promedio de fuente
yChar =tm.tmHeight; //Guardar el alto de la fuente
ReleaseDC(hwnd, hdc);
rc.top=3*yChar/2;
return0 ;
caseWM_SIZE: //Procesando el mensaje de cambio de tamaño de la ventana
//Guarde las coordenadas de la nueva esquina inferior derecha del área de desplazamiento después de cambiar el formulario
rc.right=LOWORD(lParam);
rc.bottom=HIWORD(lParam);
UpdateWindow(hwnd);
return0;
caseWM_PAINT: //Maneja el mensaje de redibujado de la ventana
InvalidateRect(hwnd, NULL, TRUE);
hdc=BeginPaint(hwnd, ps);
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, xChar, y
Char/2, szTop, (sizeofszTop)-1);
TextOut(hdc, xChar, yChar/2, szUnd, (sizeofszUnd)-1);
EndPaint(hwnd, ps);
return0;
caseWM_KEYDOWN:
//Procesa el mensaje de que se presiona una determinada tecla del teclado
ShowKey. (hwnd , 0, "WM_KEYDOWN", wParam, lParam);
return0;
caseWM_KEYUP:
//Manejo de que una tecla presionada en el teclado es Mensaje liberado
ShowKey(hwnd, 0, "WM_KEYUP", wParam, lParam
return0
caseWM_CHAR:
/ / Manejar mensajes de caracteres visibles de claves que no son del sistema generadas durante las pulsaciones de teclas
howKey(hwnd, 1, "WM_CHAR", wParam, lParam
return0; >caseWM_DEADCHAR:
//Manejo de mensajes de "caracteres muertos" de claves no pertenecientes al sistema generados durante las pulsaciones de teclas
ShowKey(hwnd, 1, "WM_DEADCHAR", wParam, lParam
return0;
caseWM_SYSKEYDOWN:
//Manejar el mensaje de pulsación de tecla del sistema
ShowKey(hwnd, 0, "WM_SYSKEYDOWN" , wParam, lParam) ;
break;
caseWM_SYSKEYUP:
//Maneja el mensaje de levantamiento de clave del sistema
ShowKey(hwnd, 0, "WM_SYSKEYUP ", wParam, lParam);
break;
caseWM_SYSCHAR: //Procesando mensajes de caracteres visibles de clave del sistema
ShowKey(hwnd, 1 , "WM_SYSCHAR", wParam, lParam);
break;
caseWM_SYSDEADCHAR: //Manejo del mensaje de "carácter muerto" de la clave del sistema
ShowKey(hwnd, 1, "WM_SYSDEADCHAR", wParam, lParam);
break;
caseWM_DESTROY:
//Maneja el mensaje para finalizar la aplicación
PostQuitMessage(0) ;
return0;
}
returnDefWindowProc(hwnd, iMsg, wParam, lParam;
}
p>);//Función: MyRegisterClass
//Función: Registrar clase de ventana
BOOLMyRegisterClass(HINSTANCEhInstance)
{
wnd. cbSize=sizeof(wnd);
wnd.style=CS_HREDRAW|CS_VREDRAW;
wnd.lpfnWndProc=WndProc;
wnd.cbClsExtra=0 ; p>
wnd.cbWndExtra=0;
wnd
.hInstance=hInstance;
wnd.hIcon=LoadIcon(NULL, IDI_APPLICATION);?
wnd.hCursor=LoadCursor(NULL, IDC_ARROW);
wnd .hbrBackground=(HBRUSH)
GetStockObject(WHITE_BRUSH);
wnd.lpszMenuName=NULL;
wnd.lpszClassName=szAppName;
wnd.hIconSm=LoadIcon(NULL, IDI_APPLICATION);
returnRegisterClassEx(wnd);
}
//Función: InitInstance
//Función: Crear la ventana principal
BOOLInitInstance(HINSTANCEhInstance, intiCmdShow)
{
HWNDhwnd;
hwnd=CreateWindow( szAppName ,
"Monitor de mensajes de teclado",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL
);
if(!hwnd)
{
returnFALSE; p>
if(!hwnd)
p>
}
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
returnTRUE;
}
¿Qué es la extensión del teclado pequeño?
CompactKeyboardExtension (también llamada way. Puede encogerse y expandirse según las necesidades reales del usuario, y puede ajustar de manera flexible la altura y el ángulo para mejorar la postura de escritura de la mano y reducir el dolor de manos y espalda, la fatiga ocular y otros problemas. En comparación con los teclados tradicionales, el teclado pequeño extendido es más compacto, liviano y fácil de transportar, lo que lo hace adecuado para diversos entornos, como la oficina y los juegos. El uso de una pequeña extensión de teclado puede mejorar la eficiencia y la comodidad de la escritura y puede reducir la probabilidad de entradas incorrectas. Es un accesorio informático muy práctico.
Cómo saltar a la aplicación con la extensión de teclado de iOS
En el programa, iOS987 puede abrir la configuración de las siguientes maneras.
NSURL*url=[NSURLURLWithString:@"prefs:root=WIFI"];
if([[UIApplicationsharedApplication]canOpenURL:url]){
[[UIApplicationsharedApplication]openURL: url]; //iOS9 jump
}
Por supuesto, esto también se puede hacer (iOS10987 puede usar este método) (este método también se puede usar en iOS10 Pero no puedes ir a Bluetooth, WIFI y batería, solo puedes ir a la configuración del sistema de tu propia aplicación.
)
NSURL*url=[NSURLURLWithString:UIApplicationOpenSettingsURLString]; if([[UIApplicationsharedApplication]canOpenURL:url]){
[[UIApplicationsharedApplication]openURL:url];
}
El siguiente método es una nueva API en iOS10
NSURL*url=[NSURLURLWithString:@"prefs:root=WIFI"];
if([[UIApplicationsharedApplication]canOpenURL:url]){
[[UIApplicationsharedApplication]openURL:urloptions:@{}completionHandler:nil];
}
Si tiene una aplicación de barra de notificaciones (como pin, Launcher), el widget de la barra de notificaciones de iOS10 puede saltar normalmente como iOS9 Pin y Launcher pueden lograr esta función simplemente configurando el URLScheme. Puede continuar saltando directamente al centro de notificaciones. en el centro de notificaciones. Páginas específicas para la configuración del sistema, como datos móviles, WiFi, ubicación, etc. Simplemente cambie el comienzo de las preferencias originales a Prefs.
Cabe destacar que esta función sólo está disponible en notificaciones