Cita de: EdePC en 28 Julio 2020, 21:17 PMSabia que alguien se iba a confundir...
Es para Linux supongo, porque en Windows funciona perfectamente Alt + 174, o no entiendo bien tu pregunto o que es lo que quieres lograr al final.
Eso funciona con el teclado numerico, pero no con el teclado estandar. (Yo tengo laptop, y sin teclado numerico

Intento programar esta utilidad precisamente para que funcione con el teclado estandar. A veces necesito abrir interrogacion o utilizar corchetes angulares dobles y mi teclado no tiene tales teclas; me fastidia entrar en Google a cada rato a buscar "abrir interrogacion" u otro. Ademas me parece muy util por incluir una condicion para abrir la terminal de comandos con ALT+"CMD" (lo cual es mas practico que WIN+R+"cmd"+ENTER).
El codigo:
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
#define is_pressed(x) (GetAsyncKeyState (x) & 0x8000)
inline void send_in (int c);
inline void exec_cmd (char *cmd);
bool fl_cmdalternative=false;
int main(int argc, char **argv)
{
int i, j, ascii;
char in_buffer [BUFSIZ];
//printf ("\r\n[dbg] started up");
while (true)
{
if (is_pressed (0x12))
{
//printf ("\r\n[dbg] <ALT>");
j=0;
while (is_pressed (0x12))
{
for (i=0;i<256;i++)
{
if ((i!=0x12)&(i!=0xa4))
if (is_pressed (i))
{
in_buffer[j]=i;
j++;
while (is_pressed (i));
}
}
}
in_buffer[j]='\0';
//filtering
if (in_buffer[0] != '\0')
{
if ((in_buffer[0]>0x29) & (in_buffer[0]<0x40))
{
//printf ("\r\n[dbg] numeric");
ascii=atoi (in_buffer);
if ((ascii>31)&(ascii<256)) send_in (atoi (in_buffer));
}
else if ((in_buffer[0]>0x40) & (in_buffer[0]<0x5b))
{
//printf ("\r\n[dbg] literal");
exec_cmd (in_buffer);
}
else{;}
}
}
else;
/*for (i=0;i<256;i++)
if (is_pressed (i))
{
if (i!=164)
{
send_in (i);
while (is_pressed (i));
}
}*/
}
return 0;
}
inline void send_in (int c)
{
//se supone que esta funcion envia el caracter a la entrada del teclado
putchar (c); //lo envio a la salida estandar para verificar que funciona correctamente
return;
}
inline void exec_cmd (char *cmd)
{
char cmdexe[BUFSIZ];
printf ("\r\n[dbg] executing command: \'%s\'", cmd);
if (!strcmp (cmd, "CMD"))
{
system ("start cmd");
}
else if (!strcmp (cmd, "ENX"))
{
putchar ('\a');
fl_cmdalternative=true;
}
else if (!strcmp (cmd, "DISX"))
{
fl_cmdalternative=false;
}
else if (fl_cmdalternative)
{
strcpy (cmdexe, "start ");
strcat (cmdexe, cmd);
system (cmdexe);
}
else;
return;
}
(se que dije C pero me gusta unir C y C++ en la medida que se me haga comodo)