Cómo escribir el código para interceptar la información del teclado en idioma Yi
Se puede implementar el programa c de MS VC.
Método:
(1) Utilice el método de simulación del programa de teclas del teclado para enviar la imagen al portapapeles.
(2) Guarde la imagen del portapapeles en un archivo . Archivo de imagen bmp (u otro formato).
Compilar:
cl simu_keyboard.c user32.lib Gdi32.lib
Archivo de encabezado especial:
#include Windows. hgt;
#include lt;Winuser.hgt;
#include lt;memory.hgt;
Consejos:
(1 ) Subrutina de simulación de programa clave:
void snapscreen_2_clipboard()
{
keybd_event(VK_SNAPSHOT, 0x2C, 0, 0,
); keybd_event(VK_SNAPSHOT, 0x2C, KEYEVENTF_KEYUP, 0);
}
(2) La imagen del portapapeles se almacena en el archivo de imagen .bmp
ARCHIVO *fout ;
/* ---------------------------------------- ----- --------------------
* dib
int GetBytesPerPixel(int profundidad); p>
int GetBytesPerRow(int ancho, int profundidad);
int GetBitmapBytes(int ancho, int alto, int profundidad);
* ------- ------ -------------------------------------------- ------ */
int GetBytesPerPixel(int profundidad)
{ return (profundidad==32 ? 4: 3
}<); /p>
int GetBytesPerRow(int ancho, int profundidad)
{
int bytesPerPixel = GetBytesPerPixel(profundidad);
int bytesPerRow = (( ancho * bytesPerPixel 3) amp; ~3);
return bytesPerRow
}
// bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, bmi.bmiHeader.biBitCount
int GetBitmapBytes(int ancho, int alto, int profundidad)
{
alto de retorno * GetBytesPerRow(ancho, profundidad);
}
void save_clipboard_img_to_bmp()
{
char nameout[80];
MANEJAR h_bitmap, h_dib ;
BITMAPINFO bmi;
HDC hDC;
int imageBytes
BITMAPFILEHEADER hdr
int scanLineCou;
nt;
unsigned char *img;
if (!OpenClipboard(NULL)) {
printf("No se puede abrir el portapapeles\n");
exit(0);
};
if (DEBUG ==1) printf("pasar abrir portapapeles\n"); p>// HANDLE GetClipboardData(UINT uFormat);
h_bitmap = GetClipboardData(CF_BITMAP);
h_dib = GetClipboardData(CF_DIB); =NULL || h_dib ==NULL){
printf("Obtuve un mapa de bits NULL: ");
} else { printf("Obtuve un mapa de bits: ");};
memcpy(amp; bmi, h_dib, sizeof(bmi));
printf("d x d \n", bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight); /p>
hDC = CreateCompatibleDC(NULL); // Gdi32.lib.
CloseClipboard()
bmi.bmiHeader.biCompression = BI_RGB
<; p>// posible utilizar parte de la imagen con img_w, img_himageBytes = GetBitmapBytes(bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, bmi.bmiHeader.biBitCount
printf("pass GetBitmapBytes=d \n",imageBytes);
img = (char *) malloc(imageBytes);
if (!img) {
printf("¡No hay suficiente memoria para img!\n"); exit(0);
}
// BITMAPFILEHEADER hdr
hdr; .bfType = ((WORD) ('M' lt; lt; 8) | 'B'); // siempre es "BM"
hdr.bfSize = sizeof(BITMAPFILEHEADER) sizeof(BITMAPINFOHEADER)
(bmi.bmiHeader.biClrUsed * sizeof(RGBQUAD)) bmi.bmiHeader.biSizeImage;
hdr.bfReserved1 = 0
hdr.bfReserved2 = 0;
hdr.bfOffBits
= tamaño de (BITMAPFILEHEADER) tamaño de (BITMAPINFOHEADER)
(bmi.bmiHeader.biClrUsed * tamaño de (RGBQUAD));
scanLineCount = GetDIBits(hDC, h_bitmap, 0, bmi.bmiHeader. biHeight, img, amp;bmi, DIB_RGB_COLORS);
strcpy(nameout, "keyb_tmp.bmp");
if ( (fout = fopen(nameout, "wb") ) == NULL ) {
printf("\007No se puede abrir el archivo de salida: s ", nameout(1); fwrite( amp; hdr, sizeof(BITMAPFILEHEADER), 1, fout);
fwrite( amp; bmi, sizeof(BITMAPINFO), 1,
fwrite( img, sizeof(caracter sin firmar), imageBytes, fout
fclose(fout);
printf("Salida en s\n", nameout); }
/* -------finalizar dib y bmp ----- */