Discussione chiusa
Pagina 1 di 4 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37

Discussione: intercettare un form da un programma aperto

  1. #1
    L'avatar di Maury63
    Maury63 non è in linea Scolaretto
    Luogo
    Torino
    Post
    235

    intercettare un form da un programma aperto

    Salve a tutti

    Premetto che sono alle prime armi con (Visual Basic.net)

    ho un problema vorrei migliorare salvataggio e Stampa da un programma che crea tramite un form di grafica un disegno PLOTTERATO

    Inanzi tutto vi vorrei fare una domanda :
    è Possibile tramite (visual basic.net) intercettare un form da un programma Aperto che non ha niente a che vedere con Visual Basic.net ?

    in Pratica apro il mio programma che gestisce le misure dei Pezzi e questo crea un Grafico, su un form di questo programma

    io Vorrei gestire (con Visual Basic.net) questo Form Contenente il Grafico per Poterlo Salvarlo(in PDF) e inviarlo alla Stampante

    non sò se mi sono ben Spiegato !!!

    Grazie per eventuali Suggerimenti
    Il vero Amico rimane tale Soprattutto al momento del Bisogno

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    No ... non è una cosa fattibile se non molto difficilmente. Dovresti provare con delle API e metodologie complesse e poco affidabili. Inoltre dovresti conoscere vbnet nolto molto bene, oltre quello che può essere lo standard.

    Fra l'altro ti basta fare uno screenshot del tuo form e stamparlo, è più facile...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    L'avatar di Maury63
    Maury63 non è in linea Scolaretto
    Luogo
    Torino
    Post
    235
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    No ... non è una cosa fattibile se non molto difficilmente. Dovresti provare con delle API e metodologie complesse e poco affidabili. Inoltre dovresti conoscere vbnet nolto molto bene, oltre quello che può essere lo standard.

    Fra l'altro ti basta fare uno screenshot del tuo form e stamparlo, è più facile...
    Inanzitutto Grazie per aver Risposto
    lo screenshot sul form l'ho già provato
    ma io volevo eseguire automaticamente il salvataggio e la stampa del grafico
    comunque visto che non è possibile Ringrazio per la risposta
    un saluto a tutti
    Il vero Amico rimane tale Soprattutto al momento del Bisogno

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Non ho detto che non è possibile ma che è abbastanza complesso.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    Luogo
    Lazio
    Post
    1,596
    Blogs
    21
    Quote Originariamente inviato da Maury63 Visualizza il messaggio
    Salve a tutti

    Premetto che sono alle prime armi con (Visual Basic.net)
    ...
    in Pratica apro il mio programma ...
    ...per curiosità,
    quando parli del "tuo programma" intendi un programma fatto da te ?
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  6. #6
    L'avatar di Maury63
    Maury63 non è in linea Scolaretto
    Luogo
    Torino
    Post
    235
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    ...per curiosità,
    quando parli del "tuo programma" intendi un programma fatto da te ?
    no non è un programma fatto da me è un programma che serve a verificare le misure dei pezzi lavorati
    Il vero Amico rimane tale Soprattutto al momento del Bisogno

  7. #7
    patel45 non è in linea Scolaretto
    Post
    265
    Se il form di cui parli ha una dimensione fissa ed una posizione fissa nello schermo potresti provare questo codice modificando opportunamente le dimensioni della finestra di cattura
    codice:
    Imports System.Runtime.InteropServices
    
    Public Class Form1
        <DllImport("gdi32.dll")>
        Private Shared Function BitBlt(ByVal hdc As IntPtr,
                                       ByVal nXDest As Integer,
                                       ByVal nYDest As Integer,
                                       ByVal nWidth As Integer,
                                       ByVal nHeight As Integer,
                                       ByVal hdcSrc As IntPtr,
                                       ByVal nXSrc As Integer,
                                       ByVal nYSrc As Integer,
                                       ByVal dwRop As CopyPixelOperation) As Boolean
        End Function
        <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
        Private Shared Function FindWindow(
         ByVal lpClassName As String,
         ByVal lpWindowName As String) As IntPtr
        End Function
        Function GetWindowImage(ByVal WindowHandle As IntPtr, ByVal Area As Rectangle) As Bitmap
            Dim b As New Bitmap(Area.Width, Area.Height, Imaging.PixelFormat.Format24bppRgb)
    
            Using img As Graphics = Graphics.FromImage(b)
                Dim ImageHDC As IntPtr = img.GetHdc
                Using window As Graphics = Graphics.FromHwnd(WindowHandle)
                    Dim WindowHDC As IntPtr = window.GetHdc
                    BitBlt(ImageHDC, 0, 0, Area.Width, Area.Height, WindowHDC, Area.X, Area.Y, CopyPixelOperation.SourceCopy)
                    window.ReleaseHdc()
                End Using
                img.ReleaseHdc()
            End Using
    
            Return b
        End Function
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim window As IntPtr = FindWindow(Nothing, " ")
            Dim snapshot As Bitmap = GetWindowImage(window, New Rectangle(500, 300, 1000, 600))' da modificare
            snapshot.Save("F:\Download\Foo.jpg", Imaging.ImageFormat.Jpeg)
        End Sub
    End Class

  8. #8
    L'avatar di Maury63
    Maury63 non è in linea Scolaretto
    Luogo
    Torino
    Post
    235
    Quote Originariamente inviato da patel45 Visualizza il messaggio
    Se il form di cui parli ha una dimensione fissa ed una posizione fissa nello schermo potresti provare questo codice modificando opportunamente le dimensioni della finestra di cattura
    codice:
    Imports System.Runtime.InteropServices
    
    Public Class Form1
        <DllImport("gdi32.dll")>
        Private Shared Function BitBlt(ByVal hdc As IntPtr,
                                       ByVal nXDest As Integer,
                                       ByVal nYDest As Integer,
                                       ByVal nWidth As Integer,
                                       ByVal nHeight As Integer,
                                       ByVal hdcSrc As IntPtr,
                                       ByVal nXSrc As Integer,
                                       ByVal nYSrc As Integer,
                                       ByVal dwRop As CopyPixelOperation) As Boolean
        End Function
        <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
        Private Shared Function FindWindow(
         ByVal lpClassName As String,
         ByVal lpWindowName As String) As IntPtr
        End Function
        Function GetWindowImage(ByVal WindowHandle As IntPtr, ByVal Area As Rectangle) As Bitmap
            Dim b As New Bitmap(Area.Width, Area.Height, Imaging.PixelFormat.Format24bppRgb)
    
            Using img As Graphics = Graphics.FromImage(b)
                Dim ImageHDC As IntPtr = img.GetHdc
                Using window As Graphics = Graphics.FromHwnd(WindowHandle)
                    Dim WindowHDC As IntPtr = window.GetHdc
                    BitBlt(ImageHDC, 0, 0, Area.Width, Area.Height, WindowHDC, Area.X, Area.Y, CopyPixelOperation.SourceCopy)
                    window.ReleaseHdc()
                End Using
                img.ReleaseHdc()
            End Using
    
            Return b
        End Function
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim window As IntPtr = FindWindow(Nothing, " ")
            Dim snapshot As Bitmap = GetWindowImage(window, New Rectangle(500, 300, 1000, 600))' da modificare
            snapshot.Save("F:\Download\Foo.jpg", Imaging.ImageFormat.Jpeg)
        End Sub
    End Class

    Inanzitutto ti ringrazio

    questa sera provo ad eseguire questo Programmino
    adesso sto lavorando
    poi ti farò sapere

    dinuovo grazie del tuo interessamento per il mio problema
    Il vero Amico rimane tale Soprattutto al momento del Bisogno

  9. #9
    L'avatar di Maury63
    Maury63 non è in linea Scolaretto
    Luogo
    Torino
    Post
    235
    Ok l'ho provato funzione bene s'è azzecco bene la posizione e le dimensioni

    Purtroppo ho il problema che le dimensioni e la posizione cambia perchè il form si può spostare dalla posizione abituale

    mi chiedevo avendo il form un nome (QPLOSRV) sè era possibile intercettare il form ovunque sia posizionato portandolo in primo piano rispetto agli altri Form Aperti


    a tal proposito ti invio delle foto del vari Form che devo intecettare

    invio pure il nome del form Aperto QPLOSRV.exe su Gestione Attività di Windows



    in attesa porgo i miei saluti e un grande Grazie!!
    Immagini allegate Immagini allegate
    Il vero Amico rimane tale Soprattutto al momento del Bisogno

  10. #10
    Dev-01 non è in linea Scolaretto
    Post
    439
    Nell'ordine da un occhiata a come identificare il processId a partire dal nome e spostare il focus sull'applicazione target, portarla in primo piano e infine ottenerne location e size.

    A questo punto modifichi il codice per lo screenshoot precedentemente consigliato e dovresti ottenere il risultato voluto.
    Ultima modifica di Dev-01; 16-03-2019 19:16 

Discussione chiusa
Pagina 1 di 4 123 ... ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi