Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB6] Ottenere il titolo delle finestre aperte

    come da oggetto.
    ho bisogno di sapere quale file autocad stia lavorando, e per farlo mi servono i titoli delle finestre aperte (la finestra di autocad avrebbe come titolo "autocad 2004 - c:\pippo\pluto.dwg").

    con findwindow posso ottenere il processo sapendo il titolo esatto della finestra, quindi non ci faccio niente.

    ho trovato "enumwindows" ma non riesco a capirne l'utilizzo.....
    "ci vorrebbero anche più persone come quaestio (a reb verrà un brivido)" wallrider, 22/10/2012

    "Se hai una vita di merda facebook non può essere molto meglio...". kalosjo, 16/10/2012

  2. #2
    con findwindow posso ottenere il processo sapendo il titolo esatto della finestra
    Con FindWindow semmai ottieni l'handle della finestra in questione.
    ho trovato "enumwindows" ma non riesco a capirne l'utilizzo.....
    EnumWindows chiama la funzione di callback di cui passi l'indirizzo come primo parametro per ogni finestra top-level (quindi senza genitore) aperta nel sistema; in sostanza devi inserire in un modulo il seguente codice:
    codice:
    'Collezione in cui verranno memorizzati tutti i nomi delle finestre che iniziano con "autocad 2004 - "
    Public WndCollection As Collection
    'Dichiarazioni delle API
    Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long)
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    'Dimensione dei buffer (all'occorrenza ampliabile senza problemi)
    Public Const MAX_BUFSIZE=511
    'Funzione accessoria
    Public Function StringFromBuffer(Buffer As String) As String
    'Carica una stringa dal buffer (utilizzata per recuperare le stringhe fornite dalle API di Windows)
        Dim nPos As Long
        nPos = InStr(Buffer, vbNullChar)
        If nPos > 0 Then
            StringFromBuffer = Left$(Buffer, nPos - 1)
        Else
            StringFromBuffer = Buffer
        End If
    End Function
    'Funzione di callback di EnumWindows
    Public Function EnumWindowsProc (ByVal hwnd As Long, ByVal lParam As Long) As Long
    Const stringToSearch="autocad 2004 - "
    Dim strbuf As String, windowTitle As String
    EnumWindowsProc=True
    strbuf = Space$(MAX_BUFSIZE)
        If GetWindowText(hwnd, strbuf, MAX_BUFSIZE) Then
             windowTitle= StringFromBuffer(strbuf)
        Else
             Exit Function
        End If
    If LCase$(Left$(windowTitle,Len(stringToSearch)))=LCase$(stringToSearch) Then
        'Ha trovato una finestra il cui titolo inizia con "autocad 2004 - "; la aggiunge alla collezione
        WndCollection.Add(windowTitle)
    End if
    End Function
    
    'Restituisce False se l'operazione non va a buon termine
    Public Function SearchForAutocadWindows() As Boolean
        Set WndCollection=New Collection
        SearchForAutocadWindows=EnumWindows(AddressOf EnumWindowsProc, 0)<>0
    End Sub
    A questo punto ti basterà lanciare SearchForAutocadWindows; non appena ritornerà nella collection WndCollection saranno contenuti tutti i titoli delle finestre di Autocad.
    P.S.: non ho collaudato questo codice (VB6... ), quindi... a tuo rischio e pericolo
    Amaro C++, il gusto pieno dell'undefined behavior.

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.