Newsgroup: it.comp.programmare.win32
Titolo: Realizzazione di una PseudoTastiera

Salve a tutti,
 vorrei realizzare un programma che riceve via seriale o USB un comando, in 
base al quale inviare un carattere alla applicazione corrente.
La parte di ricezione seriale/USB non è un problema, quello che non so fare 
è mandare un tasto alla applicazione windows attiva come se fosse stato 
premuto sulla tastiera. Ho provato la funzione SendKeys di Visual Basic e mi 
funziona parzialmente, cioè riesco a scrivere in netepad però non riesco at 
utilizzarlo nell'applicazione che mi interessa per aprire un menu.
Avete qualche suggerimento (preferirei programmare in VB ma anche VC++ va 
bene)?
ciauz 

 in VB ma anche VC++ va bene)?
Beh .. potresti utilizzare le API "SendMessage" e simili per
inviare all'applicazione (della quale dovrai ricavare hWnd
ad esempio utilizzando FindWindow) messaggi di tipo
"key press" simulando così l'attività da tastiera ed evitando
così alcune delle limitazioni di sendkeys
Ciao
-- 
* ObiWan
Microsoft MVP: Windows Server - Networking
http://www.microsoft.com/communities/MVP/MVP.mspx
http://italy.mvps.org
DNS "fail-safe" for Windows clients.
http://www.ntcanuck.com
Newsgroups and forums
news://
news.ntcanuck.com
http://forums.ntcanuck.com
408+ XP/2000 tweaks and tips
http://www.ntcanuck.com/tq/Tip_Quarry.htm

 ha scritto nel messaggio
news:hTDSe.46112$HM1.1...@twister1.libero.it...

keybd_event di Win32
Ciao, Enrico

 ha scritto nel messaggio 
news:431c4f32$0$18646$1472...@news.sunsite.dk...


> funziona parzialmente, cioč riesco a scrivere in netepad perň non riesco


 
<snip>
prova questo codice
#define ADD_SCAN(a) ((a) | KEYEVENTF_EXTENDEDKEY)
//-----------------------------------------------------------
// simula la pressione e rilascio del tasto [virtual_key]
void click(UINT virtual_key)
{
    BYTE scan = static_cast<BYTE>(MapVirtualKey(virtual_key, 0));
    keybd_event(static_cast<BYTE>(virtual_key), scan, ADD_SCAN(0), 0);
    Sleep(0);
    keybd_event(static_cast<BYTE>(virtual_key), scan, ADD_SCAN(KEYEVENTF_KEYUP), 0);
}
//-----------------------------------------------------------
// simula la pressione del tasto [virtual_key]
void down_click(UINT virtual_key)
{
    BYTE scan = static_cast<BYTE>(MapVirtualKey(virtual_key, 0));
    keybd_event(static_cast<BYTE>(virtual_key), scan, ADD_SCAN(0), 0);
}
//-----------------------------------------------------------
// simula il rilascio del tasto [virtual_key]
void up_click(UINT virtual_key)
{
    BYTE scan = static_cast<BYTE>(MapVirtualKey(virtual_key, 0));
    keybd_event(static_cast<BYTE>(virtual_key), scan, ADD_SCAN(KEYEVENTF_KEYUP), 0);
}
//-----------------------------------------------------------
// simula la pressione e rilascio del tasto [virtual_key] premuto
// insieme ad un tasto modificatore (shift, alt, ctrl)
void special_click(UINT virtual_key, UINT special_key, int repeat)
{
    BYTE scan = static_cast<BYTE>(MapVirtualKey(virtual_key, 0));
    BYTE scan_sp =static_cast<BYTE>(MapVirtualKey(special_key, 0));
    keybd_event(static_cast<BYTE>(special_key), 0, ADD_SCAN(0), 0);
    do {
      // preme e rilascia per (repeat + 1) volte
      keybd_event(static_cast<BYTE>(virtual_key), scan, ADD_SCAN(0), 0);
      keybd_event(static_cast<BYTE>(virtual_key), scan, ADD_SCAN(KEYEVENTF_KEYUP), 0);
      } while(repeat-- > 0);
    keybd_event(static_cast<BYTE>(special_key), 0, ADD_SCAN(KEYEVENTF_KEYUP), 0);
}
//-----------------------------------------------------------
// simula la pressione e rilascio del tasto [virtual_key] premuto
// insieme al tasto shift
void shift_click(UINT virtual_key)
{
    special_click(virtual_key,VK_SHIFT);
}
//-----------------------------------------------------------

 ha scritto nel messaggio 
news:dfuh49$1ak$1...@carabinieri.cs.interbusiness.it...
