Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119

    [VB.NET] Recuperare handle applicazione su secondo schermo

    Bun anno a tutti.
    Sapreste dirmi come si fa a conoscere l'handle del programma attivo sul secondo schermo ?

    Grazie, Alberto

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che io sappia c'è solo una finestra che ha il focus e non una per schermo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Se usi powerpoint su due schermi si vede quando si clicca su una slide (monitor 2) che la pagina relatore (monitor 1) perde il focus

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    ..... e provando ad intercettare gli handle sono diversi tra relatore e presentazione.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E quindi è proprio come ti dicevo. C'è una sola window che ha il focus.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Ok.
    Ma se voglio recuperare l'handle del secondo schermo devo per forza simulare il click del mouse per ottenere l'handle o c'è un'altro modo ?

    Grazie, Alberto

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Forse non mi sono spiegato ... come faresti a trovare quello della window nel primo schermo o quello della window che ti interessa se questa fosse nel primo schermo? Non cambia nulla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Scusa ma non ci arrivo.
    Sul primo schermo uso GetForegroundWindow per avere l'handle ma quando si lancia PPoint in modalità relatore mi rimane il focus sul primo monitor del relatore.

    All'esecuzione in questo modo la pagina del relatore ha il focus e non la presentazione quindi non so come recuperare l'handle della presentazione

    Per questo avevo pensato di muovere e cliccare il cursore sul secondo schermo e catturare l'handle con GetForegroundWindow per poi farlo ritornare sul primo monitor. Naturalmente ho provato ma l'effetto del click mi fa avanzare di una slide e non mi ritorna l'handle della presentazione.

    Grazie, Alberto

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa le API FindWindow o FindWindowEx per trovare la finestra che ti serve.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Ecco la soluzione:
    codice:
    Imports System.Runtime.InteropServices
    
    Public Class Form1
    
        Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As CallBack, ByVal lParam As Integer) As Integer
        Declare Function GetForegroundWindow Lib "user32" () As Integer
        Declare Function GetParent Lib "user32" (ByVal hwnd As Integer) As Integer
        Declare Function GetWindow Lib "user32" (ByVal hwnd As Integer, ByVal wCmd As Integer) As Integer
        Declare Function GetWindowInteger Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer
        Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer
        Declare Function IsIconic Lib "user32" (ByVal hwnd As Integer) As Integer
        Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Integer) As Integer
    
        ' Constants used with APIs
        Public Const SW_SHOW = 5
        Public Const SW_RESTORE = 9
        Public Const GW_OWNER = 4
        Public Const GWL_HWNDPARENT = (-8)
        Public Const GWL_EXSTYLE = (-20)
        Public Const WS_EX_TOOLWINDOW = &H80
        Public Const WS_EX_APPWINDOW = &H40000
    
        Public Delegate Function CallBack(ByVal hwnd As Integer, ByVal lParam As Integer) As Boolean
    
        <DllImport("user32.dll", SetLastError:=True)> _
        Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
        End Function
        Public Shared Function fEnumWindowsCallBack(ByVal hwnd As Integer, ByVal lParam As Integer) As Boolean
    
            Dim lReturn As Integer
            Dim lExStyle As Integer
            Dim bNoOwner As Boolean
            Dim sWindowText As String
            Dim lpProc As Long
            If hwnd <> Form1.Handle Then
                If IsWindowVisible(hwnd) Then
                    If GetParent(hwnd) = 0 Then
                        bNoOwner = (GetWindow(hwnd, GW_OWNER) = 0)
                        lExStyle = GetWindowInteger(hwnd, GWL_EXSTYLE)
                        If (((lExStyle And WS_EX_TOOLWINDOW) = 0) And bNoOwner) Or ((lExStyle And WS_EX_APPWINDOW) And Not bNoOwner) Then
                            sWindowText = Space$(256)
                            Call GetWindowThreadProcessId(hwnd, lpProc)
                            lReturn = GetWindowText(hwnd, sWindowText, Len(sWindowText))
                            If lReturn Then
                                sWindowText = Trim(sWindowText)
                                Form1.ListBox1.Items.Add(hwnd & " " & lpProc & " " & sWindowText)
                            End If
                        End If
                    End If
                End If
            End If
            fEnumWindowsCallBack = True
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ListBox1.Items.Clear()
            EnumWindows(AddressOf fEnumWindowsCallBack, 0)
        End Sub
    End Class

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.