Identificativo articolo: 302281 - Ultima modifica: venerdì 29 giugno 2007 - Revisione: 5.2

How to Ottenere l'handle di finestra per un server di automazione di Office con Visual Basic .NET

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I302281
Espandi tutto | Chiudi tutto

Sommario

In questo articolo viene spiegato come ottenere l'handle di finestra di un'applicazione di Microsoft Office mentre si automatizza tale applicazione da Visual Basic .NET.

Informazioni

I modelli di oggetti per la maggior parte delle applicazioni di Microsoft Office non espongono proprietà per recuperare gli handle di finestra delle applicazioni. Per determinare l'handle di finestra di un'applicazione di Office che si sta automatizzando, è possibile utilizzare la funzione API FindWindow con il nome di classe della finestra superiore dell'applicazione. Se l'applicazione consente di eseguire più istanze contemporaneamente, sarà necessario tenerne conto per poter recuperare l'handle di finestra corretto. Nelle sezioni seguenti sono illustrate le tecniche per recuperare l'handle di finestra per applicazioni a istanza singola o multipla.

NOTA: il modello oggetti di Microsoft Access espone la proprietà hWndAccessApp per l'oggetto Application che consente di determinare l'handle di finestra dell'applicazione. È inoltre possibile utilizzare la proprietà hWnd di maschere e report per recuperare gli handle specifici di tali finestre. In Excel 2002 è stata inoltre introdotta per la prima volta una proprietà hWnd per l'oggetto Application. Per quanto riguarda Excel 2002 e Access versioni 97 e successive, poiché queste applicazioni di Office consentono di recuperare l'handle di finestra per l'applicazione attraverso i rispettivi modelli di oggetti, l'approccio FindWindow discusso in questo articolo non è necessario.

Trovare l'handle di finestra per un'applicazione che consente di eseguire una sola istanza

La procedura descritta di seguito illustra come utilizzare la funzione API FindWindow con un client di automazione di Visual Basic al fine di determinare l'handle di finestra per un server di automazione non in funzione che consente l'esecuzione di una sola istanza. Questa è la tecnica che viene impiegata utilizzando Microsoft PowerPoint come server di automazione.

Procedura di esempio
  1. Avviare Microsoft Visual Studio .NET. Scegliere Nuovo dal menu File, quindi scegliere Progetto. Selezionare Applicazione Windows dall'elenco di tipi di progetto di Visual Basic. In base all'impostazione predefinita viene creato il progetto Form1.
  2. Aggiungere un riferimento alla Libreria oggetti di Microsoft PowerPoint. Per eseguire questa operazione, attenersi alla seguente procedura:
    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare Microsoft PowerPoint Object Library e scegliere Seleziona.

      NOTA: la Libreria oggetti di Microsoft PowerPoint contiene un numero di versione. Il numero di versione per Microsoft PowerPoint 2000 è 9.0, mentre quello per Microsoft PowerPoint 2002 è 10.0.
    3. Scegliere OK nella finestra di dialogo Aggiungi riferimento per confermare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere .
  3. Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la Casella degli strumenti e aggiungere un pulsante al form.
  4. Premere F7 per visualizzare la finestra del codice di Form1.
  5. Incollare il codice seguente all'inizio della finestra del codice:
    Imports System.Runtime.InteropServices
    
    Public Class MyApi
        <DllImport("user32.dll")> Public Shared Function _
             FindWindow(ByVal strClassName As String, ByVal strWindowName _
                 As String) As Integer
        End Function
    End Class
  6. Aggiungere il codice riportato di seguito all'evento Click di Button1:
    Dim pptApp As PowerPoint.Application
    Dim hwndPPt As Integer
    
    pptApp = New PowerPoint.Application()
    pptApp.Visible = True
    
    hwndPPt = MyApi.FindWindow("PP10FrameClass", Nothing)
    
    MsgBox("hwndPPt (" & Hex(hwndPPt) & ") has the Window handle to " & _
          "Powerpoint's Main Window." & vbCr &  " Click OK to close PowerPoint.")
    
    pptApp.Quit()
    NOTA: se si utilizza PowerPoint 2000, modificare il parametro del nome della classe nella chiamata a FindWindow da PP10FrameClass a PP9FrameClass.

  7. : se si utilizza PowerPoint 2000, modificare il parametro del nome della classe nella chiamata a Premere F5 e scegliere Button1 per eseguire l'esempio.

Trovare l'handle di finestra per un'applicazione che consente istanze multiple

Alcune applicazioni, come Excel o Word, consentono di eseguire più istanze contemporaneamente. Per recuperare l'handle di finestra dell'istanza dell'applicazione che si sta automatizzando, è possibile innanzitutto utilizzare l'automazione per cambiare il titolo all'applicazione specificando un valore univoco e quindi utilizzare la funzione API FindWindow per recuperare l'handle di finestra corretto. La procedura descritta di seguito illustra questa tecnica utilizzando Excel come server di automazione.

Procedura di esempio
  1. Avviare Visual Studio .NET. Scegliere Nuovo dal menu File, quindi scegliere Progetto. Selezionare Applicazione Windows dai tipi di progetto Visual Basic. Form1 viene creato per impostazione predefinita.
  2. Aggiungere un riferimento alla Libreria oggetti di Microsoft PowerPoint. Per eseguire questa operazione, attenersi alla seguente procedura:
    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare Microsoft PowerPoint Object Library e scegliere Seleziona.

      NOTA: la Libreria oggetti di Microsoft PowerPoint contiene un numero di versione. Il numero di versione per PowerPoint 2000 è 9.0, mentre quello per PowerPoint 2002 è 10.0.
    3. Scegliere OK nella finestra di dialogo Aggiungi riferimento per confermare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere .
  3. Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la Casella degli strumenti e aggiungere un pulsante al form.
  4. Premere F7 per visualizzare la finestra del codice di Form1.
  5. Incollare il codice seguente all'inizio della finestra del codice:
    Imports System.Runtime.InteropServices
    
    Public Class MyApi
        <DllImport("user32.dll")> Public Shared Function _
             FindWindow(ByVal strClassName As String, ByVal strWindowName _
                 As String) As Integer
        End Function
    End Class
  6. Aggiungere il codice riportato di seguito all'evento Click di Button1:
    Dim xlapp As Excel.Application
    Dim hwndExcel As Integer
    
    xlapp = New Excel.Application()
    xlapp.Visible = True
    xlapp.Caption = "Some Window Caption"
    
    hwndExcel = MyApi.FindWindow("XLMAIN", xlapp.Caption)
    
    xlapp.Caption = Nothing
    
    MsgBox("hwndExcel (" & Hex(hwndExcel) & ") has the Window handle to " & _
           "Excel's Main Window." & vbCr &  " Click OK to close Excel." )
    
    xlapp.Quit()
  7. Premere F5 e scegliere Button1 per eseguire l'esempio.

Riferimenti

Per ulteriori informazioni, visitare il seguente sito Web Microsoft Developer Network (MSDN)(informazioni in lingua inglese):
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx (http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx)
Per ulteriori informazioni sul recupero dell'handle di finestra per un server di automazione di Office con versioni precedenti di Visual Studio, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese):
258511  (http://support.microsoft.com/kb/258511/ ) How to Obtain the Window Handle for an Office Automation Server

Le informazioni in questo articolo si applicano a
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Chiavi: 
kbhowto kbautomation kboutlook kbaccess _ik11561 kbword kbexcel kbgrpdso KB302281
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
 

Traduzione articoli