Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Processi - interazione - diritti
Forum - C# / VB.NET - Processi - interazione - diritti

Avatar
tieko (Normal User)
Newbie


Messaggi: 1
Iscritto: 02/06/2024

Segnala al moderatore
Postato alle 12:59
Domenica, 02/06/2024
Ciao a tutti, per diletto e per imparare le tecniche di Vb .net, sto scrivendo vari programmi (sono un vecchio privato cittadino, niente di serio e commerciale) tra cui uno con cui vorrei interagire con una finestra di un browser e vedere se riesco, inviando istruzioni al processe, a muovere il mouse, catturare lo schermo etc. Tramite le API ho ottenuto l'handle della finestra che mi interessa e sono alla fase "parlaci" ma l'istruzione sottoriportata (la GetWindowRect) non mi ritorna nulla. Ho letto da qualche parte che ci possono essere dei problemi di permessi spedendo msg ai processi e che una possibile soluzione era lanciare il programma che vuole controllare il processo da una locazione "trusted" come c:\Program Files e così ho fatto, tra l'altro lanciando il prg come amministratore. Ma ancora nulla. Qualcuno mi può aiutare in questo senso? E' anche un argomento interessente per molti io credo.

Public Sub MoveMouseToProcessWindow(handletavolo As IntPtr, x As Integer, y As Integer)

    Dim rect As New NativeMethods.RECT()

    NativeMethods.GetWindowRect(handletavolo, rect)

    If Not NativeMethods.GetWindowRect(handletavolo, rect) Then
        MessageBox.Show("GetWindowRect in move mouse ha fallito.")
        Return
    End If

    ' Calcola la posizione assoluta del mouse
    Dim absoluteX As Integer = rect.Left + x
    Dim absoluteY As Integer = rect.Top + y

    ' Muovi il cursore del mouse
    NativeMethods.SetCursorPos(absoluteX, absoluteY)


End Sub

Ringrazio anticipatamente per l'aiuto.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1388
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:58
Domenica, 02/06/2024
per catturare lo schermo o sua porzione hai il metodo GDI+: .CopyFromScreen

Codice sorgente - presumibilmente VB.NET

  1. bmp = New Bitmap(W, H) ' dimensioni bmp, come l'area di interesse
  2. Dim g As Graphics = Graphics.FromImage(bmp) ' layer grafico
  3. ' copia lo schermo in accordo con le coordinate impostate: L = posizione sinistra nel desktop, T = posizione in alto nel desktop, 0,0 angolo sinistro superiore nella bmp, W = larghezza nella bmp e H altezza nella bmp
  4. g.CopyFromScreen(L, T, 0, 0, New Size(W, H), CopyPixelOperation.SourceCopy)



una volta copiato lo schermo in bmp, lo puoi salvare o visualizzare:

Codice sorgente - presumibilmente Plain Text

  1. bmp.Save("NomeBMP.bmp", Imaging.ImageFormat.Bmp)
  2. PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
  3. PictureBox1.Image = bmp


Ultima modifica effettuata da Carlo il 04/06/2024 alle 9:42


in programmazione tutto è permesso
PM Quote