Wachtwoord vergeten?

Wachtwoord vergeten
Vul hier uw email adres in. U ontvangt dan een nieuw wachtwoord.

De vensteringang verkrijgen voor een Office-automatiseringsserver met MFC

Gepost op 13-02-2006 - Microsoft Office - 0 reacties


De informatie in dit artikel is van toepassing op:

  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Foundation Class Library 4.2
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition

Samenvatting

In dit artikel wordt beschreven hoe u de vensteringang kunt verkrijgen van een Office-toepassing met Microsoft Foundation Classes (MFC) terwijl u deze toepassing automatiseert vanuit Visual C++.

Meer informatie

De objectmodellen voor de meeste Microsoft Office-toepassingen stellen geen eigenschappen beschikbaar voor het ophalen van vensteringangen van toepassingen. Voor het bepalen van de vensteringang van een Office-toepassing die u wilt automatiseren, kunt u de API-functie FindWindow gebruiken met de klassenaam voor het venster op het bovenste niveau van de toepassing. Als er van de toepassing meerdere exemplaren tegelijkertijd kunnen worden uitgevoerd, moet u hier mogelijk rekening mee houden, zodat u de juiste vensteringang kunt ophalen. In de onderstaande secties vindt u technieken voor het ophalen van de vensteringangen van toepassingen waarvan een of meer exemplaren worden uitgevoerd.

Opmerking Het objectmodel van Microsoft Access stelt de functie hWndAccessApp beschikbaar voor het _Application-object voor het bepalen van de vensteringang voor de toepassing. Bovendien is Microsoft Excel 2002 de eerste versie van Excel met een hWnd-eigenschap voor het Application-object. Voor wat betreft Microsoft Excel 2002 en Microsoft Access vanaf versie 97 en later is de methode van FindWindow die in dit artikel wordt toegelicht niet vereist, omdat deze Office-toepassingen een manier bieden waarmee de respectievelijke objectmodellen de vensteringang voor de toepassing kunnen ophalen.

De vensteringang zoeken voor een toepassing waarvan één exemplaar wordt uitgevoerd

De volgende stappen laten zien hoe u de functie FindWindow kunt gebruiken met een automatiseringsclient van Visual C++ voor het bepalen van de vensteringang voor een out-of-process-automatiseringsserver waarvan slechts één exemplaar kan worden uitgevoerd. Dit is de techniek die wordt toegepast bij gebruik van Microsoft PowerPoint als automatiseringsserver.

Stapsgewijs voorbeeld
  1. Maak een nieuw, op een dialoogvenster gebaseerd MFC EXE-project.
  2. Voeg een knop en een BN_CLICKED-handler toe aan het dialoogvenster.
  3. Open ClassWizard (CTRL+W), klik op het tabblad Automation, klik op Add Class en selecteer From a type library.
  4. Ga naar de map waarin Office is geïnstalleerd (bijvoorbeeld C:\Program Files\Microsoft Office\Office) en kies Msppt9.olb.
  5. Selecteer alle klassen die door ClassWizard worden gevonden en klik op OK om terug te keren naar het project. ClassWizard heeft enkele wrapperklassen voor automatisering gegenereerd vanuit de typebibliotheek van PowerPoint en heeft de bestanden Msppt9.h en Msppt9.cpp gemaakt.
  6. Voeg de volgende code toe aan de knop-handler:
    // Start PowerPoint_Application app;COleException e;if(!app.CreateDispatch("PowerPoint.Application", &e)) { CString str; str.Format("CreateDispatch() failed w/err 0x%08lx", e.m_sc), AfxMessageBox(str, MB_SETFOREGROUND); return;} // Haal de Presentations-collectie op en voeg een nieuwe presentatie toe.Presentations presSet(app.GetPresentations());_Presentation pres(presSet.Add(TRUE)); // Haal de Slides-collectie op en voeg een nieuwe dia toe.Slides slideSet(pres.GetSlides());_Slide slide1(slideSet.Add(1, 2)); // Voeg tekst toe aan dia door hier op de volgende wijze naartoe te navigeren:// slide1.shapes(#).TextFrame.TextRange.Text{ Shapes shapes(slide1.GetShapes()); Shape shape(shapes.Item(COleVariant((long)1))); TextFrame textFrame(shape.GetTextFrame()); TextRange textRange(textFrame.GetTextRange()); textRange.SetText("Window Handle of PowerPoint Application"); }
    // Haal de vensteringang opHWND hWndPpt = ::FindWindow ("PP9FrameClass", NULL);
    ::ShowWindow (hWndPpt, SW_SHOWNORMAL);// U kunt de toepassing zichtbaar maken met:// app.SetVisible(TRUE);// Hier wordt ShowWindow-API gebruikt om te tonen hoe // de vensteringang werkt die is verkregen van FindWindow<BR/> ::MessageBox(NULL, "Now displaying PPT using the ShowWindow API", "", MB_SETFOREGROUND);
    {
    Shapes shapes(slide1.GetShapes()); Shape shape(shapes.Item(COleVariant((long)2))); TextFrame textFrame(shape.GetTextFrame()); TextRange textRange(textFrame.GetTextRange()); textRange.SetText("hWndPpt bevat de vensteringang van de PowerPoint-toepassing. U kunt " "deze vensteringang gebruiken in verschillende Win 32-API's, zoals SetForeGroundWindow, " "waarvoor een vensteringangparameter moet worden verstrekt.\r\n" "Dit voorbeeld gebruikt de vensteringang in de ShowWindow-API.\r\n\r\n"
    "Alles klaar. PowerPoint sluit over 15 seconden."); }
    // Een diavoorstelling voorbereiden en uitvoeren.{ SlideShowSettings sss(pres.GetSlideShowSettings()); sss.SetShowType(3); // Kiosk. sss.SetLoopUntilStopped(TRUE); sss.SetRangeType(1); // Alles weergeven. sss.SetAdvanceMode(2); // Tijdsinstellingen van dia's gebruiken. SlideShowWindow ssw(sss.Run()); // Voorstelling uitvoeren.}
    // Slaapstand activeren, zodat de gebruiker de diavoorstelling kan bekijken.::Sleep(15000);
    // PowerPoint meedelen dat het moet worden afgesloten.app.Quit();

  7. Voeg de volgende regels toe voordat u de knop-handler implementeert:
    #include "msppt9.h"
    // Ole-initialisatieklasse.class OleInitClass {public: OleInitClass() { OleInitialize(NULL); } ~OleInitClass() { OleUninitialize(); }};// Deze globale klasse roept OleInitialize() aan bij// het starten van de toepassing en roept OleUninitialize()// aan bij het afsluiten van de toepassing.OleInitClass g_OleInitClass;

  8. Compileer het programma en voer het uit. Als u op de knop klikt, start PowerPoint een diapresentatie met één dia die na 15 seconden wordt afgesloten.

De vensteringang zoeken voor een toepassing waarvan meerdere exemplaren kunnen worden uitgevoerd

Van bepaalde toepassingen, zoals Microsoft Excel of Microsoft Word, kunt u meerdere exemplaren tegelijkertijd uitvoeren. Om de ingang op te halen voor het exemplaar van de toepassing dat u automatisch wilt laten uitvoeren, kunt u eerst automatisering gebruiken om de titel van een toepassing te wijzingen in een unieke waarde en vervolgens FindWindow gebruiken om de vensteringang op te halen. In de volgende stappen wordt deze techniek beschreven met Microsoft Excel als automatiseringsserver.

Stapsgewijs voorbeeld
  1. Maak een nieuw, op een dialoogvenster gebaseerd MFC EXE-project.
  2. Voeg een knop en een BN_CLICKED-handler toe aan het dialoogvenster.
  3. Open ClassWizard (CTRL+W), klik op het tabblad Automation, klik op Add Class en selecteer From a type library.
  4. Ga naar de map waarin Office in geïnstalleerd (bijvoorbeeld C:\Program Files\Microsoft Office\Office) en kies Excel9.olb.
  5. Selecteer alle klassen die door ClassWizard worden gevonden en klik op OK om terug te keren naar het project. ClassWizard heeft enkele wrapperklassen voor automatisering gegenereerd vanuit de typebibliotheek van Excel en heeft de bestanden excel9.h en excel9.cpp gemaakt.
  6. Voeg de volgende code toe aan de knop-handler:
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); _Application app;
    Workbooks books;_Workbook book;Worksheets sheets;_Worksheet sheet; // Start Excel en haal het Application-object op.if(!app.CreateDispatch("Excel.Application")){ AfxMessageBox("Kon Excel niet starten en Application-object niet ophalen."); return;}
    //Haal een nieuwe werkmap op.books = app.GetWorkbooks();book = books.Add (covOptional); app.SetCaption ("Nieuw bijschrift geleverd door programma"); // Haal de vensteringang opHWND hWndXL = ::FindWindow ("XLMAIN", app.GetCaption ()); // Zet de oorspronkelijke toelichting terugapp.SetCaption (""); ::ShowWindow (hWndXL, SW_SHOWNORMAL);// U kunt de toepassing zichtbaar maken met:// app.SetVisible(TRUE);// Hier wordt ShowWindow-API gebruikt om te tonen hoe // de van FindWindow verkregen vensteringang wordt gebruikt AfxMessageBox ("hWndXL bevat de vensteringang van de Excel-toepassing. U kunt\n" "deze vensteringang gebruiken in verschillende Win 32-API's, zoals SetForeGroundWindow,\n" "waarvoor een vensteringangparameter moet worden verstrekt.\n\n" "Dit voorbeeld gebruikt de vensteringang in de ShowWindow-API.\n\n" "Alles klaar. Klik op OK om Excel af te sluiten.", MB_SETFOREGROUND); // Excel melden dat het moet worden afgesloten.app.Quit();

  7. Voeg de volgende regels toe voordat u de knop-handler implementeert:
    #include "excel9.h"
    // Ole-initialisatieklasse.class OleInitClass {public: OleInitClass() { OleInitialize(NULL); } ~OleInitClass() { OleUninitialize(); }};// Deze globale klasse roept OleInitialize() aan bij// het opstarten van de toepassing en roept OleUninitialize()// aan bij het afsluiten van de toepassing.OleInitClass g_OleInitClass;

  8. Compileer het programma en voer het uit. Als u op de knop klikt, wordt Excel gestart en wordt in een berichtvak gemeld dat de verkregen vensteringang als voorbeeld wordt gebruikt in de ShowWindow-API. Klik op OK om het berichtvenster te sluiten en sluit Excel af.

Referenties


Voor meer informatie klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:

178749Automatiseringsproject maken met MFC en een typebibliotheek

183009Vensters inventariseren met de WIN32 API

175030Toepassingen inventariseren met Win32 API's

179706MFC gebruiken om Excel te automatiseren en een nieuwe werkmap te maken/op te maken


PrintPrint RSS reactiesRSS reacties BookmarkBookmark

Gekoppelde tags

Access, Access 2000, Access 2002, Access 2003, Access 97, Excel, Excel 2000, Excel 2002, Excel 2003, Excel 97, Office, Patch, PowerPoint, PowerPoint 2000, PowerPoint 2002, PowerPoint 2003, PowerPoint 97, Project, Visual C, Word, Word 2000, Word 2003, Works

Reacties
Nog geen reacties geplaatst.

Winkelmandje

Het winkelmandje is leeg

Inloggen
Als u hierboven op de knop 'bestellen' klikt krijgt u een overzicht van de door uw gewenste producten. Indien het overzicht compleet en correct is kunt via de wizard de verdere gegevens invullen en uw bestelling afronden. In het bestelproces kunt u altijd op 'vorige' drukken om terug te gaan in het proces. Bij Perrit staan vertrouwen, privacy en veiligheid op de eerste plaats, wij zullen uw gegevens dan ook met uiterste zorgvuldigheid behandelen en nooit doorgeven aan derden.

Perrit.nl Sherwood Rangers 29 Hengelo

Perrit.nl telefoon: +31 74 750 12 20

Kenniscentrum - De vensteringang verkrijgen voor een Office-automatiseringsserver met MFC
Perrit Kenniscentrum - De vensteringang verkrijgen voor een Office-automatiseringsserver met MFC