Visualizzazione dei risultati da 1 a 10 su 12

Visualizzazione discussione

  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

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.