Creare una Keyboard sullo schermo

martedì 03 giugno 2008 - 16.11

hidden Profilo | Newbie

Salve a tutti ragazzi volevo chiedere se qualcuno ha qualche indicazione circa la creazione di una tastiera su schermo tipo quella di Windows.
Facendo ricerche in rete sono riuscito a trovare qualcosa utilizzando user32 come segue

Public Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (ByVal hwnd As Long) As Long
Declare Function keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) As Long

alla pressione del bottone corrispondente alla lettera A

Public Sub pulsantepremuto(ByVal _sender As String)
Try
SetActiveWindow(8975651603260375040)
Select Case _sender
Case "btna"
keybd_event(ltA, 0, 0, 0)
.......
ect.
end Sub

dove ltA corrisponde al valore esadecimale del bottone A che si trova sulla tastiera

Try
Dim key As Button = CType(sender, Button)
pulsantepremuto(key.Name)
SetActiveWindow(8975651603260375040)
Catch ex As Exception
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Exit Sub
Finally
SetActiveWindow(8975651603260375040)
End Try
End Sub


a parte che non ho capito a cosa significa la riga

SetActiveWindow(8975651603260375040) ho capito che serve a spostare lo stato attivo prima e dopo la pressione del pulsante ma come lo fa non mi è chiaro.

Il tutto funziona egregiamente nei vari documenti di testo.
Il mio problema sorge quando voglio utilizzare la tastiera per rinominare un file. Es seleziono il file con il tasto destro faccio click su rinomina e lui mi da lo stato attivo sul testo (nome del file) e me lo seleziona, ma in quel caso il programma non funziona e non mi rinomina il file in quanto quando si sposta lo stato attivo sulla tastiera il nome del file selezionato viene confermato e quindi non viene cambiato.

Come posso fare per ovviare a questo problema?

C'è qualcuno che conosce una soluzione alternativa?

Vi ringrazio anticipatamente!

Lanello Profilo | Senior Member

devi riuscire a non prendere il "focus" quando un tasto sulla tua "on screen keyboard" viene premuto.

l'operazione di rinominare un file viene fatta direttamente nella finestra di esplora risorse, e se durante una operazione di rinominazione clicchi su un'altra finestra, l'operazione viene terminata automaticamente da esplora risorse.

se guardi infatti la tastiera su schermo standard di windows xp (start -> esegui -> osk.exe) vedrai che quando clicchi sulle lettere della tastiera, la finestra della tastiera su schermo di windows non prende il "focus".

ho provato a fare 2 ricerche "al volo" su internet cercando "vb.net prevent getting focus" ed ho trovato:

esempio per c# -> http://windowsclient.net/blogs/faqs/archive/2006/05/26/how-do-i-prevent-a-control-from-receiving-focus-when-it-receives-a-mouse-click.aspx


-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

hidden Profilo | Newbie

ti ringrazio per i suggerimenti ora proverò a verificare anche l'esempio che mi hai segnalato. poi ti faccio sapere. Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5