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.
Ç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- Yeni bir iletişim tabanlı MFC EXE projesi oluşturun.
- Düğme, iletişim kutunuzu ve BN_CLICKED işleyicisi için ekleyin.
- ClassWizard (CTRL + W) açın, Otomasyon sekmesini tıklatın, Add Class ' ı tıklatın ve bir tür kitaplığı seçin.
- <a1>Office</a1> (örneğin, C:\Program Files\Microsoft Office\Office) yüklediğiniz dizine gidin ve Msppt9.olb seçin.
- 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.
- 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();
- 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;
- 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- Yeni bir iletişim tabanlı MFC EXE projesi oluşturun.
- Düğme, iletişim kutunuzu ve BN_CLICKED işleyicisi için ekleyin.
- ClassWizard (CTRL + W) açın, Otomasyon sekmesini tıklatın, Add Class ' ı tıklatın ve bir tür kitaplığı seçin.
- <a1>Office</a1> (örneğin, C:\Program Files\Microsoft Office\Office) yüklediğiniz dizine gidin ve Excel9.olb seçin.
- 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ş.
- 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();
- 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;
- 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.
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