PDA

View Full Version : VisualBasic


scorpion89
06-05-2006, 17:25
Devo realizzare una tastiera virtuale per delle persone disabili e per inviare dati alle applicazioni uso SendKeys, dopo aver attivato l'applicazione. Ma come mai la maggior parte delle volte nn arrivano le lettere????
Codice:

AppActivate(notepad)
My.Computer.Keyboard.SendKeys("a", True)
'SendKeys.Send("a")
'SendKeys.SendWait("a")
SendKeys.Flush()


Le ho provate tutte ma non sempre arrivano!

Ciao e grazie

PS visto ke ci sono vi faccio un altra domanda.
Visto ke sono molto inesperto di VB(certe volte penso sia meglio cosi...) come faccio per creare un array di bottoni?? E soprattutto come faccio per farli ingrandire se uno ingrandisce la finestra??
Thanks very much

mynos79
06-05-2006, 20:01
Io il SendKeys l' ho sempre usato diversamente:

Private Sub Form_Load()
Dim ReturnValue, I
ReturnValue = Shell("notepad.exe", 1) ' Esegue il blocco note
AppActivate ReturnValue ' Attiva il blocco note
For I = 1 To 100
SendKeys I & " ", True ' Invia caratteri al blocco note
Next I
'SendKeys "%{F4}", True ' Invia ALT+F4 per uscire dal programma
End Sub

... solo per fare un esempio.

Per ridimensionare e spostare i controlli in base al resize del form, devi farlo manualmente all' interno dell' evento Resize del Form.
Per creare un array di controlli devi semplicemente disegnare il controllo nel form e impostare la sua proprietà Index a 0 (zero) ... poi da codice basta che crei i vari altri controlli usando il comando "load nomecontrollo(indice)" e poi renderlo visibile (in quanto appena caricato è invisibile).
Ecco un esempio che crea 11 pulsanti dinamicamente e li sposta e cambia il nome (crea semplicemente un pulsante con index=0, allunga il form per farli stare tutti):

Private Sub Form_Load()
Dim i
For i = 0 To 10
If i > 0 Then Load Command1(i)
Command1(i).Top = i * Command1(i).Height + 100
Command1(i).Caption = "Pulsante " & i
Command1(i).Visible = True
Next i
End Sub

Spero di esserti stato utile.

scorpion89
07-05-2006, 11:47
Per ora grazie,visto ke MOLTO probabilmente vi chiederò altre cose... :D
Cmq ho ancora dei dubbi sul SendKeys, visto ke non sempre mi invia le parole, o comunque il parametro!!!!
Come potrei fare per risolvere??? Farmi una routine tutta mia?? O è da sparassi??

Ciao e grazie

f@bio80
09-05-2006, 11:04
The AppActivate function changes the focus to the named application or window, but does not affect whether it is maximized or minimized

in altre parole l'applicazione viene attivata, ma se è minimizzata rimane minimizzata, è per quello che ti perdi le sendkey.

fai così:

1) trova l'handle della finestra del programma su cui vuoi scrivere e quello della textArea da riempire
2) trova i processId tuo e della finestra del programma con GetWindowThreadProcessId
3) attaccati al processo con AttachThreadInput(tuo_procId, target_procID, True)
4) porta l'applicazione in primo piano con SetForegroundWindow(target_handle)
5) setfocus sul campo da riempire: SetFocus(target_field_handle)
6) System.Windows.Forms.SendKeys.SendWait(value)
7) System.Windows.Forms.SendKeys.Flush()
8) staccati dal processo con AttachThreadInput(tuo_procId, target_procID, False)

ciao ;)

scorpion89
09-05-2006, 14:51
Grazie della spiegazione e scusate ancora del disturbo ma non riesco a tradurre i passi 1,2,3 e 8 in istruzioni assembler.

Grazie e ciao

PS nn so se è importante cmq uso VB.NET

f@bio80
09-05-2006, 14:53
Grazie della spiegazione e scusate ancora del disturbo ma non riesco a tradurre i passi 1,2,3 e 8 in istruzioni assembler.

Grazie e ciao

PS nn so se è importante cmq uso VB.NET

assembler per dinci? :D sono api di windows, scaricati api guide per studiarti le definizioni e gli utilizzi, ci sono anche parecchi esempi!

scorpion89
09-05-2006, 14:58
Scusate ma ho sbagliato a scrivere!!!!!!!!
Invece di assembler era VB

Ciao