Makale numarası: 261997 - Son Gözden Geçirme: 27 Ocak 2007 Cumartesi - Gözden geçirme: 7.7

Bir Office Otomasyonu Sunucusu ile MFC için pencere tanıtıcı elde nasıl kullanılır

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu makalede, Visual C++, uygulamadan otomatikleştirme sırasında bir Office uygulamasını Microsoft Foundation Classes (MFC) pencere tanıtıcısı edinme gösterilmektedir.

Daha fazla bilgi

Çoğu Microsoft Office uygulamaları için nesne modellerini özellikleri, uygulama penceresinin tanıtıcıları alma dosyalarına. Pencere tanıtıcısı otomatikleştirme, bir Office uygulamasını belirlemek için <a0></a0>, uygulamanın en üstteki pencere sınıf adı FindWindow API işlevini kullanabilirsiniz. Uygulama, aynı anda çalışan birden çok örneği olabilir, böylece doğru pencere tanıtıcısı almak için bu hesabı gerekebilir. Aşağıdaki bölümlerde her iki tek ve birden çok örnek uygulama için Pencere tanıtıcısı almak için kullanabileceğiniz teknikler gösterilmiştir.

Not Microsoft Access nesne modelini, uygulama için Pencere tanıtıcısı belirlemek için _Application nesnenin hWndAccessApp işlevi sunar. Ayrıca, Microsoft Excel 2002, Application nesnesi için bir hWnd özelliğini tanıtmak için Excel'i ilk sürümüdür. Bu Office uygulamaları, uygulama için Pencere tanıtıcısı almak için ilgili nesne modeli aracılığıyla bir yol sağlar, çünkü Microsoft Excel 2002 ve Microsoft Access ile 97 ve sonraki sürümleri, bu makalede açıklanan yaklaşım FindWindow gerekli değildir.

Tek örnek iş, bir uygulama için pencere tanıtıcı bulma

Aşağıdaki adımlar, nasıl FindWindow işlevi bir Visual C++ Otomasyon istemcisiyle yalnızca tek bir örneği olabilen bir işlem dışı Otomasyon sunucusu için Pencere tanıtıcısı belirlemek için kullanabileceğinizi göstermektedir. Microsoft PowerPoint, Otomasyon sunucusu kullanıldığında işe tekniğidir.

Adım adım örnek
  1. Yeni bir iletişim tabanlı MFC EXE projesi oluşturun.
  2. Düğme, iletişim kutunuzu ve BN_CLICKED işleyicisi için ekleyin.
  3. ClassWizard (CTRL + W) açın, Otomasyon sekmesini tıklatın, Add Class ' ı tıklatın ve bir tür kitaplığı seçin.
  4. <a1>Office</a1> (örneğin, C:\Program Files\Microsoft Office\Office) yüklediğiniz dizine gidin ve Msppt9.olb seçin.
  5. ClassWizard bulduğu tüm sınıfları seçin ve geri projenize dönmek için Tamam ' ı tıklatın. ClassWizard bazı Otomasyon üretti PowerPoint'ten sarmalayıcı sınıfları, tür kitaplığına ve Msppt9.h ve Msppt9.cpp oluşturuldu.
  6. Sizin düğmesini işleyicisine aşağıdaki kodu ekleyin:
    	
    // 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;
    }
    	
    // Get Presentations collection and add a new presentation.
    Presentations presSet(app.GetPresentations());
    _Presentation pres(presSet.Add(TRUE));
    	
    // Get Slides collection and add a new slide.
    Slides slideSet(pres.GetSlides());
    _Slide slide1(slideSet.Add(1, 2));
    	
    // Add text to slide, by navigating the slide as follows:
    // 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");
    	}
    
    // Get the Window Handle
    HWND hWndPpt = ::FindWindow ("PP9FrameClass", NULL);
    
    ::ShowWindow (hWndPpt, SW_SHOWNORMAL);
    // You can make the application visible using:
    // app.SetVisible(TRUE);
    // Here ShowWindow API is used to demonstrate the use of 
    // the Window Handle got from 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 contains the Window Handle of the PowerPoint application.  You can "
    					"use this Window Handle in various Win 32 APIs, such as SetForeGroundWindow, "
    					"which require a Window Handle parameter to be supplied.\r\n"
    					"This example uses the Window Handle in the ShowWindow API.\r\n\r\n"
    
    					"All done.  PowerPoint will close in 15 seconds.");
    	}
    
    
    // Prepare and run a slide show.
    {
    	 SlideShowSettings sss(pres.GetSlideShowSettings());
    	 sss.SetShowType(3); // Kiosk.
    	 sss.SetLoopUntilStopped(TRUE);
             sss.SetRangeType(1); // Show all.
    	 sss.SetAdvanceMode(2); // Use slide timings.
    	 SlideShowWindow ssw(sss.Run()); // Run show.
    }
    
    // Sleep so user can watch slide show.
    ::Sleep(15000);
    
    // Tell PowerPoint to quit.
    app.Quit(); 	
    					
  7. Kendi düğme işleyicisi uygulamadan önce aşağıdaki satırları ekleyin:
    #include "msppt9.h"
    
    // Ole initialization class.
    class OleInitClass {
    public:
       OleInitClass() {
    	  OleInitialize(NULL);
       }
       ~OleInitClass() {
    	  OleUninitialize();
       }
    };
    // This global class calls OleInitialize() at
    // application startup, and calls OleUninitialize()
    // at application exit.
    OleInitClass g_OleInitClass; 
    					
  8. Derleme ve programı çalıştırın. Düğmeyi tıklatın ve PowerPoint bir tek bir slayt sunusunu başlatır ve 15 saniye içinde kapatılır unutmayın.

Pencere tanıtıcı ve birden çok yineleme olan bir uygulamayı bulun.

Microsoft Excel veya Microsoft Word gibi bazı uygulamalar, aynı anda çalışan birden çok örneği olabilir. Otomatikleştirme, uygulama örneğinin tanıtıcısını almak için <a0></a0>, önce bir uygulama için benzersiz bir değer başlığını değiştirmek ve sonra FindWindow, pencere tanıtıcısı almak için Otomasyon kullanabilirsiniz. Aşağıdaki adımları, Otomasyon sunucusu Microsoft Excel kullanarak bu teknik gösterilmiştir.

Adım adım örnek
  1. Yeni bir iletişim tabanlı MFC EXE projesi oluşturun.
  2. Düğme, iletişim kutunuzu ve BN_CLICKED işleyicisi için ekleyin.
  3. ClassWizard (CTRL + W) açın, Otomasyon sekmesini tıklatın, Add Class ' ı tıklatın ve bir tür kitaplığı seçin.
  4. <a1>Office</a1> (örneğin, C:\Program Files\Microsoft Office\Office) yüklediğiniz dizine gidin ve Excel9.olb seçin.
  5. ClassWizard bulduğu tüm sınıfları seçin ve sonra geri projenize dönmek için Tamam ' ı tıklatın. ClassWizard vardır ve bazı <a0>Otomasyon</a0> sarmalayıcı sınıfları Excel tür kitaplığından oluşturulan dosyaları excel9.h ve excel9.cpp oluşturulmuş.
  6. Kendi düğmesini işleyicisine aşağıdaki kodu ekleyin: ((uzun) DISP_E_PARAMNOTFOUND, VT_ERROR)
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    	
    _Application app;
    
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    	
    // Start Excel and get Application object.
    if(!app.CreateDispatch("Excel.Application"))
    {
    	AfxMessageBox("Couldn't start Excel and get Application object.");
    		return;
    }
    	
    
    //Get a new workbook.
    books = app.GetWorkbooks();
    book = books.Add (covOptional);
    	
    app.SetCaption ("New Caption Supplied by Program");
    	
    // Get the Window Handle
    HWND hWndXL = ::FindWindow ("XLMAIN", app.GetCaption ());
    	
    // Set the original caption back
    app.SetCaption ("");
    	
    ::ShowWindow (hWndXL, SW_SHOWNORMAL);
    // You can make the application visible using:
    // app.SetVisible(TRUE);
    // Here ShowWindow API is used to demonstrate the use of 
    // the Window Handle got from FindWindow
    	
    AfxMessageBox ("hWndXL contains the Window Handle of the Excel application.  You can use\n"
    	"this Window Handle in various Win 32 APIs, such as SetForeGroundWindow,\n"
    	"which require a Window Handle parameter to be supplied.\n\n"
    	"This example uses the Window Handle in the ShowWindow API.\n\n"
    	"All done.  Press OK to close Excel.", MB_SETFOREGROUND);
    	
    // Tell Excel to quit.
    app.Quit();
    					
  7. Kendi düğme işleyicisi uygulamadan önce aşağıdaki satırları ekleyin:
    #include "excel9.h"
    
    // Ole initialization class.
    class OleInitClass {
    public:
    	  OleInitClass() {
    		 OleInitialize(NULL);
    	  }
    	  ~OleInitClass() {
    		  OleUninitialize();
    	  }
    };
    // This global class calls OleInitialize() at
    // application startup, and calls OleUninitialize()
    // at application exit.
    OleInitClass g_OleInitClass; 
    					
  8. Derleme ve programı çalıştırın. Düğmeyi tıklatın ve Not Excel başlatır ve elde edilen pencere tanıtıcısı ShowWindow APı'örnek olarak kullanıldığını belirten bir ileti kutusu görünür. Ileti kutusunu kapatmak için Tamam ' ı tıklatın ve ardından Excel'den çıkın.

Referanslar

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
178749  (http://support.microsoft.com/kb/178749/ ) MFC ve bir tür kitaplığı'nı kullanarak, otomasyon Proje oluşturma
183009  (http://support.microsoft.com/kb/183009/ ) Numaralandırma Windows wın32 API kullanarak nasıl
179706  (http://support.microsoft.com/kb/179706/ ) Nasıl Excel otomatikleştirmek ve yeni bir çalışma kitabı oluşturun/biçimi kullan MFC'için

Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbautomation kbhowto KB261997 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:261997  (http://support.microsoft.com/kb/261997/en-us/ )