View Full Version : SendKeys Visual Basic 6.0
Salve gente, ho questo bel problema con un mio programmino in Visual Basic 6.0
Il piccolo applicativo, ad un creto punto dell'esecuzione, si trova costretto a salvare un file Pdf sul disco fisso. Per compiere questa banale operazione utilizza un SendKyes che invia una serie di caratteri ad una DialogBox "SaveAs" che andranno a formare il nomefile. L'80% delle volte funziona mentre nel 20% dei casi l'intera stringa o parte di essa va persa. Questo perchè la SendKeys invia i valori alla finestra attiva e, probabilmente, un lieve ritardo della DialogBox produce l'errore descritto prima (questo è ciò che penso e non ne sono sicuro al 100%). Come posso risolvere questo problema di sincronizzazione? premetto che la nella SendKey invio non solo il nomefile ma ache le combinazioni di tasti per spostarmi correttamente nel giusto TextBox e la pressione del tasto invio.
Solo un informazione, ma il tuo applicativo lancia anche il programma per PDF o è già aperto?
Ho creato con crystalreport dei documenti che vengono creati dinamicamente dal programma a seconda dei valori inseriti. Questi report devo allegarli ede inviarli tramite Mial. Per sicurezza abbiamo deciso che i report, prima di essere inviati,debbano essere convertiti in Pdf dalla stampante virtuale Pdf995.
Questa stampante crea il Pdf ed immmediatamente dopo ti chiede in che posizione del disco vuoi salvalo: è propio in questo momento che entra in ballo la SendKeys. L'Adobe non è aperto ed il documento viene mostrato tramite un oggetto preview che fornisce crystal report.
si composrta in modo "random"... penso che sia un problema di sincronia tra le applicazioni. La SendKeys comunque invia sempre i caratteri (lo senti dai beep del computer)
Ma in che momento del programma fai partire il sendkeys ?
Più che altro in che routine?
la SendKeys parte in un evento click di un tasto. Questo evento controlla che i dati inseriti siano corretti, crea il report e lancia la stampa nel seguente modo:
CrystalReport.PrintReport: DoEvents
SendKeys "%n", True
SendKeys pdf, True
SendKeys "%s", True
cao la SendKeys scritta così mi sposto nel campo nomefile (%n), Scivo il nomefile (pdf) e confermo la scelta (%s).
::ATTENZIONE::
Io posso creare 2 tipi di Pdf: il primo è più macchinoso ed in genere la stampa del pdf è più lunga (non da problemi). Il secondo tipo di documento cviene creato in modo rapidissimo ed è in questo caso che la SendKeys non va (alcune volte).
Inoltre la DialogBox "SaveAs" appare a piacimento: alcune volte prima della stampa, altre al termine di essa.
Ora io nn ho mai suto il crystal perchè per i report uso l'Active, cmq penso che bene o male anche il crystal report in se abbia delle routine, nn so per esempio del "report completato", così facendo sei sicuro che lui lancia la tua sendkeys nn mentre carica il report ma quando è finito!
Prova a vedere se c'è qlc del genere :)
Ma crystalreport non centra nulle con il mio problema: i report vengono creati perfettamente. La stampa del Pdf avviene solo a report completato. Ed è al Pdf che non riesco sempre a dare un nome.
Inoltre crystalreport e tutti i suoi OCX non posseggono eventi!!!! Sono veramente disperato..in tutto il Web non trovo la risposta che fa per me. HELP ME PLEASE!!
Il punto che il sendkeys è molto pericoloso perchè se perde il focus la schermata lui spara sulla schermata con il focus nuovo.
Se nn funziona il 20% delle volte sembrerebbe quasi che a volte appunto lui lanci il sendkeys prima che si attivi la schermata e quindi perdentoti le fasi iniziali del sendk si sfalda la sequanza.
Prova a mettere la funzione SLEEP tra la riga che lancia il report e la riga che lancia il sendk , prova a mettere 3000 (3 secondi, dovrebbero bastare come attesa)
ES:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Me.Caption = "Your system will sleep 5 sec."
'Sleep for 5000 milliseconds
Sleep 5000
Me.Caption = ""
End Sub
Private Sub Form_Load()
Me.Caption = ""
Command1.Caption = "Sleep ..."
End Sub
Grazie...grazie di cuore. Potrai immaginare la gioia di un programmatore in erba nel vedere il suo programma funzionare senza fronzoli.
Originariamente inviato da -K2-
Grazie...grazie di cuore. Potrai immaginare la gioia di un programmatore in erba nel vedere il suo programma funzionare senza fronzoli.
Sono molto contento :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.