+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

ProcessStartInfo e SendKeys

  1. #1
    Sn0rky non è in linea Scolaretto
    Post
    369
    Like Inviati  
    1
    Like Ricevuti  
    0
    Dim processStartInfo As System.Diagnostics.ProcessStartInfo
            processStartInfo = New System.Diagnostics.ProcessStartInfo With {
            .FileName = "notepad.exe",
            .WorkingDirectory = "",
            .Verb = "runas",
             .Arguments = "",
             .WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
             .UseShellExecute = True
             }
            Dim ProcID As Integer = Diagnostics.Process.Start(processStartInfo).Id
            Threading.Thread.Sleep(500)
            AppActivate(ProcID)
            My.Computer.Keyboard.SendKeys("{TAB}", True)
            My.Computer.Keyboard.SendKeys("percorso", True)
    
    questo è il codice che a sentimento dovrebbe funzionare ma che all'atto pratico non gira!
    se provo a sostituire processstartinfo con shell (come è scritto nelle esempio su msdn) tutto funziona ( con notepad) ma devo farlo funzionare con un programma che richiede una workingdirectory e l'avvio come amministratore... ecco perché ho optato per il codice sopra... solo che non sembra "puntare" sul ProcId o non so cosa... avete qualche idea?
    in definitiva devo aprire questo programma, navigare nel menu, aprire un sottomenu, aprire una finestra, scrivere alcune cose "tabbando" in giro ed uscire...

    grazie

  2. #2
    Sn0rky non è in linea Scolaretto
    Post
    369
    Like Inviati  
    1
    Like Ricevuti  
    0
    chiedo vania... lo avviavo come amministratore...
    risolto togliendo .verb

  3. #3
    Sn0rky non è in linea Scolaretto
    Post
    369
    Like Inviati  
    1
    Like Ricevuti  
    0
            Dim indice As Integer = ComboBox1.SelectedIndex + 2           
            Dim comandoindice As String = "{DOWN " & indice.ToString & "}"
            Dim provincia As String = ComboBox1.SelectedValue.ToString
            Dim percorsoDAT As String = cartella & "\" & provincia & "\" & provincia & "-TAR.dat"    
            Dim processStartInfo As System.Diagnostics.ProcessStartInfo
            processStartInfo = New System.Diagnostics.ProcessStartInfo With {
                     .FileName = "C:\Docfa4\PGM\Docfa40.exe",                     
                    .WorkingDirectory = "C:\Docfa4\PGM",                          
                     .WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal,
                     .UseShellExecute = True
                     }
            Dim ProcID As Integer = Diagnostics.Process.Start(processStartInfo).Id
            Threading.Thread.Sleep(100)
            AppActivate(ProcID)
            My.Computer.Keyboard.SendKeys("%", False)
            My.Computer.Keyboard.SendKeys("{RIGHT 2}", False)
            My.Computer.Keyboard.SendKeys("{DOWN 2}", False)
            My.Computer.Keyboard.SendKeys("~", True)                 
            Threading.Thread.Sleep(100)                                 
            My.Computer.Keyboard.SendKeys(comandoindice, True)
            My.Computer.Keyboard.SendKeys("{TAB}", False)
            My.Computer.Keyboard.SendKeys(percorsoDAT, False)
            My.Computer.Keyboard.SendKeys("{TAB 2}", False)
            My.Computer.Keyboard.SendKeys("~", False)
            My.Computer.Keyboard.SendKeys("{TAB}", False)
            My.Computer.Keyboard.SendKeys("~", False)
    
    ho un problema con questo codice e sicuramente esiste una soluzione semplice! a naso basterebbe rallentare l'invio dei sendkeys... ho provato sia true che false e questa è la situazione "migliore"
    il problema è che COMANDOINDICE deve inviare fino a 104 DOWN e alcuni se li perde per strada!!!
    infatti INDICE lo devo correggere aggiungendo 2.... ma non è corretto ne è una costante! oltre i 50 "down" ne perde di più... non c'è comunque una regola!
    secondo voi come devo risolvere?

    p.s. l'unica che al momento mi è venuta in mente è suddividere tipo di "10 in 10" i down inframezzandoli da sleep per rallentare...

    GRAZIE

  4. #4
    L'avatar di SirJo
    SirJo non è in linea Scolaretto
    Post
    56
    Like Inviati  
    6
    Like Ricevuti  
    3
    io abiliterei il "wait", altrimenti è ovvio che succeda un pasticcio, per cui tutti
    My.Computer.Keyboard.SendKeys(".......", True)
    
    o, in alternativa, puoi usare
    SendKeys.SendWait("........")
    
    e poi li raggrupperei, cioè
            My.Computer.Keyboard.SendKeys("%{RIGHT 2}{DOWN 2}~")
            Threading.Thread.Sleep(100)
            My.Computer.Keyboard.SendKeys(comandoindice & "{TAB}" & percorsoDAT & "{TAB 2}~{TAB}~")
    
    Comunque non mi è chiara questa cosa, spiega cosa vuoi ottenere con:
    My.Computer.Keyboard.SendKeys("%{RIGHT 2}{DOWN 2}~")
    
    Ultima modifica di SirJo; 03-02-2021 13:55 

  5. #5
    Sn0rky non è in linea Scolaretto
    Post
    369
    Like Inviati  
    1
    Like Ricevuti  
    0
    Quote Originariamente inviato da SirJo Visualizza il messaggio
    Comunque non mi è chiara questa cosa, spiega cosa vuoi ottenere con:
    My.Computer.Keyboard.SendKeys("%{RIGHT 2}{DOWN 2}~")
    
    non sapevo si potessero concatenare i comandi, grazie!!!!!!!
    [nel codice specifico che mi hai chiesto servono per entrare nel menu e spostarsi tra le voci...]
    in generale servono per "pilotare" un programma "fatto coi piedi" che, ad esempio, ha una combobox in cui si può scrivere solo una singola lettera per cercare nella sua lista (elenco province italiane) quindi per cercare BA di Bari basterebbe la pressione di "B" ma per BO di Bologna dopo la prima "B" devo scorrere o con il mouse o premere diverse volte "B" e non posso immettere "BO" quindi il modo più semplice che ho trovato è avere un mio indice e contare quanti DOWN servono per arrivare alla provincia giusta... gli altri comandi immettono un percorso dove il programma carica dei dati e chiudo confermando con ENTER
    il tutto per agevolare questo cambio di provincia che trovo tedioso

  6. #6
    L'avatar di SirJo
    SirJo non è in linea Scolaretto
    Post
    56
    Like Inviati  
    6
    Like Ricevuti  
    3
    Quote Originariamente inviato da Sn0rky Visualizza il messaggio
    [nel codice specifico che mi hai chiesto servono per entrare nel menu e spostarsi tra le voci...]
    Ok, lo avevo immaginato ma mi serviva la conferma.
    Domanda: ma ti funziona questa riga ??
    Perchè per far apparire il menu devi fare "ALT+una lettera"
    Infatti con la riga specificata in realtà lui esegue "alt+right" e non solo ALT per far apparire il menu
    Inoltre si preferisce non usare il tilde ma il {ENTER} per una questione di leggibilità.
    Per qualsiasi altra cosa chiedi pure

  7. #7
    Sn0rky non è in linea Scolaretto
    Post
    369
    Like Inviati  
    1
    Like Ricevuti  
    0
    Quote Originariamente inviato da SirJo Visualizza il messaggio
    Ok, lo avevo immaginato ma mi serviva la conferma.
    Domanda: ma ti funziona questa riga ??
    Perchè per far apparire il menu devi fare "ALT+una lettera"
    Infatti con la riga specificata in realtà lui esegue "alt+right" e non solo ALT per far apparire il menu
    Inoltre si preferisce non usare il tilde ma il {ENTER} per una questione di leggibilità.
    Per qualsiasi altra cosa chiedi pure
    si, ho letto un po' di info riguardo sendkeys e facendo diverse prove (perché subito non avevo compreso la questione parentesi...) sono arrivato a quel codice che funziona... secondo me potrebbe funzionare anche come combinazione alt+lettera ma non ho provato, come detto il programma è una ciofeca (di sogei) e una cosa del genere (il cambio di un parametro) è astruso e scomodo fin dalla prima versione e non è mai stato migliorato (basterebbe avere una cartella archivio con le province e switchare al volo con quelle disponibili, 3 righe di codice e migliori la vita all'utente)
    per ora sono a posto! grazie
    piuttosto sono bloccato con l'export immagine da pdf che descrivo nell'altra discussione :P

  8. #8
    Sn0rky non è in linea Scolaretto
    Post
    369
    Like Inviati  
    1
    Like Ricevuti  
    0
    come temevo...
    provando l'applicazione su diversi pc con diversi sistemi operativi windows il risultato non è quello atteso! secondo me è tutto una questione di sleep e wait... :/

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Combobox con sendkeys
    Da Taurus dei miracoli nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 14-11-2020, 19:05
  2. sendkeys non funzionante con W8
    Da Tommy_G nel forum Microsoft Excel
    Risposte: 8
    Ultimo Post: 26-09-2016, 17:20
  3. [VB6]Problema sendkeys
    Da vbrookie nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 13-02-2015, 21:21
  4. ProcessStartInfo problema con spazio tra i nomi
    Da fosforo nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 26-07-2011, 11:22
  5. Funzione SendKeys
    Da B.Roberta nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 17-01-2006, 10:56