Red de conocimiento informático - Aprendizaje de código fuente - Cómo escribir el código para interceptar la información del teclado en idioma Yi

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

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_h

imageBytes = 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 ----- */