Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-02-2007, 22:33   #1
phoenixbf
Senior Member
 
L'Avatar di phoenixbf
 
Iscritto dal: Apr 2006
Messaggi: 3461
[Linux] Generare Eventi Tastiera

ciao a tutti,

In C (sotto linux) vorrei sapere un metodo semplice per generare eventi tastiera, a parte le lettere, deve funzionare anche con i vari CTRL, ALT, ecc...
__________________
Alienware M17xR3 // Intel Core i7 Processor 2670QM (2.20Ghz, 6MB, 4C); LCD 17.3in 120Hz w/ 3D Bundle WideFHD (1920 x 1080) WLED; RAM 8 Gb 1333MHz DDR3 Dual Channel; 1,5GB GDDR5 NVIDIA GeForce GTX 560M
phoenixbf è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 08:54   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Puoi usare il driver uinput e scrivere un programma utente che "inietta" nel layer input del kernel gli eventi che desideri. Puoi generare qualsiasi tipo di evento tastiera, mouse, touchpad ecc.

L'ho utilizzato in passato per scrivere un driver tastiera in userspace, per un dispositivo particolare.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 15:45   #3
phoenixbf
Senior Member
 
L'Avatar di phoenixbf
 
Iscritto dal: Apr 2006
Messaggi: 3461
Quote:
Originariamente inviato da ilsensine
Puoi usare il driver uinput e scrivere un programma utente che "inietta" nel layer input del kernel gli eventi che desideri. Puoi generare qualsiasi tipo di evento tastiera, mouse, touchpad ecc.

L'ho utilizzato in passato per scrivere un driver tastiera in userspace, per un dispositivo particolare.
ok, uinput ce l'ho...

Potresti farmi un esempio? in codice C?
anche un esempio stupido.
__________________
Alienware M17xR3 // Intel Core i7 Processor 2670QM (2.20Ghz, 6MB, 4C); LCD 17.3in 120Hz w/ 3D Bundle WideFHD (1920 x 1080) WLED; RAM 8 Gb 1333MHz DDR3 Dual Channel; 1,5GB GDDR5 NVIDIA GeForce GTX 560M
phoenixbf è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 16:21   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <linux/input.h>
#include <linux/uinput.h>

static void inputEvent(int fd, unsigned short key, int value);


static int uinput_init(const char *devname)
{
  struct uinput_user_dev udev;
  int fd = open(devname, O_RDWR);

  if (fd<0)
    return -1;

// intendiamo generare eventi EV_KEY, come una tastiera.
// Il kernel utilizza questa informazione per decidere a quali "slave"
// reindirizzare i nostri dati.
  ioctl(fd, UI_SET_EVBIT, EV_KEY);

// Bisogna registrare ciascuna key che possiamo generare.
// V. linux/input.h per le key disponibili.
// NB Puoi _solo_ generare le key che dichiari qui. Probabilmente vorrai
// utilizzare un array per aiutarti nell'inserimento, se devi emulare molti tasti.
//
// Come esempio, registriamo i tasti shift sinistro e a.
  ioctl(fd, UI_SET_KEYBIT, KEY_LEFTSHIFT);
  ioctl(fd, UI_SET_KEYBIT, KEY_A);

  memset(&udev, 0, sizeof(udev));
// Un nome per il sysfs...
  strncpy(udev.name, "my keybd", sizeof(udev.name));
// nb questa write e' obbligatoria, prima di UI_DEV_CREATE
  write(fd, &udev, sizeof(udev));

// Rendiamo operativo il device
  if (ioctl(fd, UI_DEV_CREATE)==0)
    return fd;
  close(fd);
  return -1;
}

int main()
{

  int fd = uinput_init("/dev/input/uinput");
  if (fd<0) {
    perror("uinput");
    return -1;
  }

// Un evento e' composto dal key che lo genera, e un valore. Per i tasti, il valore puo'
// essere 1 (tasto premuto) o 0 (tasto rilasciato).

// Questo ad esempio genera una 'a':
  inputEvent(fd, KEY_A, 1);
  inputEvent(fd, KEY_A, 0);

// Questo invece genera una 'A':
  inputEvent(fd, KEY_LEFTSHIFT, 1);
  inputEvent(fd, KEY_A, 1);
  inputEvent(fd, KEY_A, 0);
  inputEvent(fd, KEY_LEFTSHIFT, 0);

  close(fd);
  return 0;
}

static void insertEvent(int fd, unsigned short type, unsigned short code, int value)
{
  struct input_event e;
  memset(&e, 0, sizeof(e));
  e.type = type;
  e.code = code;
  e.value = value;
  write(fd, &e, sizeof(e));
}

static void inputEvent(int fd, unsigned short key, int value)
{
// Ogni evento consiste in due pacchetti input_event: l'evento vero e proprio, e un sync.
  insertEvent(fd, EV_KEY, key, value);
  insertEvent(fd, EV_SYN, SYN_REPORT, 0);
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 13-02-2007 alle 16:23.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 16:30   #5
phoenixbf
Senior Member
 
L'Avatar di phoenixbf
 
Iscritto dal: Apr 2006
Messaggi: 3461
grazie mille!!!!

dove posso trovare l'elenco completo degli eventi keyboard?
immagino in uno di quegli header...

ad esempio per combinazioni?
tipo per generare un CTRL + KEY_A...
__________________
Alienware M17xR3 // Intel Core i7 Processor 2670QM (2.20Ghz, 6MB, 4C); LCD 17.3in 120Hz w/ 3D Bundle WideFHD (1920 x 1080) WLED; RAM 8 Gb 1333MHz DDR3 Dual Channel; 1,5GB GDDR5 NVIDIA GeForce GTX 560M

Ultima modifica di phoenixbf : 13-02-2007 alle 16:34.
phoenixbf è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 16:33   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
L'ho scritto nel codice...linux/input.h
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 16:57   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da phoenixbf
ad esempio per combinazioni?
tipo per generare un CTRL + KEY_A...
Guarda l'esempio sulla "A"; prima generi gli eventi di pressione per ctrl e key_a, poi quelli di rilascio per key_a e ctrl.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2007, 16:58   #8
phoenixbf
Senior Member
 
L'Avatar di phoenixbf
 
Iscritto dal: Apr 2006
Messaggi: 3461
Quote:
Originariamente inviato da ilsensine
Guarda l'esempio sulla "A"; prima generi gli eventi di pressione per ctrl e key_a, poi quelli di rilascio per key_a e ctrl.
tutto perfettamente chiaro, grazie ancora
__________________
Alienware M17xR3 // Intel Core i7 Processor 2670QM (2.20Ghz, 6MB, 4C); LCD 17.3in 120Hz w/ 3D Bundle WideFHD (1920 x 1080) WLED; RAM 8 Gb 1333MHz DDR3 Dual Channel; 1,5GB GDDR5 NVIDIA GeForce GTX 560M
phoenixbf è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
ECOVACS T90S PRO OMNI Care Kit a 699€: 4...
iPhone Duo, i problemi di produzione con...
Lenovo e FIFA, il bilancio dei Mondiali ...
La Terra vista dalla Stazione Spaziale: ...
L'IA cinese ti spiega come produrre armi...
Nuova Fire TV Stick 4K e Telecomando Fir...
Addio Visa e Mastercard? L'Europa prepar...
Allarme IA in Florida: lo stato invoca i...
Tutte le Offerte Prime anticipate: robot...
Procura di Sassari e Oxygen Forensics: i...
Duo-Man trasforma iPhone Duo in un Walkm...
Questa carta da parati produce elettrici...
Perseverance scopre su Marte rocce mai o...
Batterie allo stato solido, Gotion alza ...
Caviar presenta la Black Edition di iPho...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v