Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET] - Agire su altre applicazioni

    Ciao ragazzi ho necessità di agire su un applicazione secondaria, usando il sendkey.
    In rete, cercando un po, ho visto che il metodo più usato è quello delle API di windows quindi (pur non capendo molto bene come fungano) sto usando questo codice:

    codice:
    Option Strict On
    Option Explicit On
    Option Infer On
    
    
    Imports System.Runtime.InteropServices
    
    
    Public Class frm_automazione
        Private Declare Auto Sub mouse_event Lib "user32" (ByVal dwFlags As Int32, ByVal dx As Int32, ByVal dy As Int32, ByVal cButtons As Int32, ByVal dwExtraInfo As IntPtr)
        Private Const MOUSEEVENTF_LEFTDOWN As Int32 = &H2
        Private Const MOUSEEVENTF_LEFTUP As Int32 = &H4
    
    
        <StructLayout(LayoutKind.Sequential)>
        Private Structure RECT
            Public Left As Integer
            Public Top As Integer
            Public Right As Integer
            Public Bottom As Integer
        End Structure
        <DllImport("user32.dll")>
        Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
        End Function
        <DllImport("user32.dll", CharSet:=CharSet.Auto, EntryPoint:="FindWindow")>
        Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
        End Function
        <DllImport("user32.dll", CharSet:=CharSet.Ansi, SetLastError:=True, ExactSpelling:=True)>
        Private Shared Function SetForegroundWindow(ByVal hwnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
        End Function
    
    
        
    
    
        Sub autoIns()
            Dim hWnd As IntPtr = FindWindow(Nothing, "nome_della_finestra")
            If hWnd.Equals(IntPtr.Zero) Then
                MessageBox.Show("Window Not Found!", "Aborting", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Return
            Else
                SetForegroundWindow(hWnd)
                Dim r As New RECT
                GetWindowRect(hWnd, r)
            
            End Sub  
    End Class
    Per impostare la posizione del mouse nel punto corretto uso:
    codice:
     Cursor.Position = New Point(pos_X, pos_Y)
    per fare click col mouse:
    codice:
    mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, IntPtr.Zero)
    e per inviare stringhe alle textbox:
    codice:
     SendKeys.Send("miaStr")
    Detto questo ho 2 problemi che non riesco a risolvere.

    Il primo (che dipende dalla mia incompetenza in materia) è che quando uso FindWindow(Nothing, "nome_della_finestra") non riesco a intercettare la finestra bersaglio qualsiasi nome metta (è una finestra di firefox che esegue un applet java).
    Per ora ho risolto mettendo me.text dopo aver ridotto a icona il form della mia app (che lancia il codice di interazione) ma è limitante perchè se ho finestre di altre app aperte sotto ovviamente intercetta quelle.
    Esiste un modo per aver la lista di finestre aperte in modo da poter vedere il nome esatto della finestra di mio interesse e poterlo inserire? (spero di essermi spiegata bene e ribadisco che non ho ben chiaro cosa stia facendo non avendo mai usato questi metodi).


    Il secondo non so bene da cosa dipenda ma quando io creo un ciclo di inserimento (quindi faccio un loop sempre uguale) magari dopo 10/11 (valore casuale) cicli il 12° lo sbaglia... com'è possibile?
    Ho pensato possa essere un problema di "timeout" nella risposta dell'app bersaglio e sto provando a inserire dei Threading.Thread.Sleep(200) tra un'operazione e l'altra ma non mi sembra stia funzionando...ogni tanto canna l'inserimento...(e da li ovviamente a cascata va tutto a schifio )

    E' un problema un po particolare spero qualcuno possa aiutarmi!

    grazie a tutti!
    Ultima modifica di Veronica80; 05-11-2023 a 12:48

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questi metodi possono rivelarsi poco affidabili.

    Per capire, esattamente con quale applicazione stai tentando do interagire? Ed esattamente per fare cosa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    E' un interfaccia di SAP online che genera vari report e consente inserimento dati.
    Inizialmente avevo pensato a un webbrowser ma, oltre a non esserci codice HTML o JS, non so perchè se provo a collegarmi col WB mi chiede una chiave OTP che io però NON ricevo via sms (non me l'ha mai chiesta prima....).
    Alchè ho optato per un interazione più "spartana".

    Quello che mi serve fare è l'inserimento dati appunto!
    Cliccare sul bottone CREA e poi inserire dati in varie combobox e textboxt ed infine cliccare salva. Questo loopato per x volte.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fare un "accrocchio" del genere con sendkey e simili strumenti è pericoloso e inefficace. Il funzionamento è soggetto a svariati eventi imprevedibili e non è proprio quello che farei per inserire dati.

    Piuttosto ti consiglio di vedere le librerie .NET che SAP stessa mette a disposizione per collegarsi ed interfacciarsi in maniera corretta e sicura. Non le conosco ma non avrei dubbi a scaricarle e provarle.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    usa le API, stanno lì apposta

  6. #6
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Fare un "accrocchio" del genere con sendkey e simili strumenti è pericoloso e inefficace. Il funzionamento è soggetto a svariati eventi imprevedibili e non è proprio quello che farei per inserire dati.

    Piuttosto ti consiglio di vedere le librerie .NET che SAP stessa mette a disposizione per collegarsi ed interfacciarsi in maniera corretta e sicura. Non le conosco ma non avrei dubbi a scaricarle e provarle.
    Non le conosco...ora le cerco! Anche se non ho privilegi amministrativi su questa piattaforma SAP (può essere un problema?).
    Comunque ora mi documento!

  7. #7
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Quote Originariamente inviata da optime Visualizza il messaggio
    usa le API, stanno lì apposta
    Le API non son quelle che sto già usando?!?

  8. #8
    Le API di SAP intendo

    https://help.sap.com/docs/SAP_S4HANA...8bcfd7f3f.html

    poi dipende dalle versioni
    Ultima modifica di optime; 07-11-2023 a 10:12

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Ovviamente la soluzione migliore (come già ti hanno suggerito) è quella di usare le API.

    Comunque, se devi proseguire con l'iterazione con il browser ti consiglio di cambiare strategia e di usare Selenium (https://www.selenium.dev/documentation/webdriver/)

    Ti permette di interagire con Firefox o con Chrome (consigliato).
    io ho parecchi programmi che utilizzano Selenium e mi trovo molto bene

    Se però dici che il codice HTML non c'è, questo potrebbe essere un problema, anche se comunque Selenium ti permette di inviare azioni del mouse e della tastiera

  10. #10
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Quote Originariamente inviata da SirJo Visualizza il messaggio
    Ovviamente la soluzione migliore (come già ti hanno suggerito) è quella di usare le API.

    Comunque, se devi proseguire con l'iterazione con il browser ti consiglio di cambiare strategia e di usare Selenium (https://www.selenium.dev/documentation/webdriver/)

    Ti permette di interagire con Firefox o con Chrome (consigliato).
    io ho parecchi programmi che utilizzano Selenium e mi trovo molto bene

    Se però dici che il codice HTML non c'è, questo potrebbe essere un problema, anche se comunque Selenium ti permette di inviare azioni del mouse e della tastiera
    grazie 1000 lo provo sicuramente!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.