Пожалуйста, ознакомьтесь следующий код, который предполагается подключить к Excel в настоящее время работает:AccessibleObjectFromWindow возвращает код E_FAIL
#include <windows.h>
#include <oleacc.h>
#import "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" no_implementation rename("RGB", "ExclRGB") rename("DocumentProperties", "ExclDocumentProperties") rename("SearchPath", "ExclSearchPath")
#import "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB" no_implementation
#import "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" rename("DialogBox", "ExclDialogBox") rename("RGB", "ExclRGB") rename("CopyFile", "ExclCopyFile") rename("ReplaceText", "ExclReplaceText")
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM)
{
WCHAR szClassName[64];
if(GetClassNameW(hwnd, szClassName, 64))
{
if(_wcsicmp(szClassName, L"EXCEL7") == 0)
{
//Get AccessibleObject
Excel::Window* pWindow = NULL;
HRESULT hr = AccessibleObjectFromWindow(hwnd, OBJID_NATIVEOM, __uuidof(Excel::Window), (void**)&pWindow);
if(hr == S_OK)
{
//Excel object is now in pWindow pointer, from this you can obtain the document or application
Excel::_Application* pApp = NULL;
pApp = pWindow->GetApplication();
pWindow->Release();
}
return false; // Stops enumerating through children
}
}
return true;
}
int main(int argc, CHAR* argv[])
{
//The main window in Microsoft Excel has a class name of XLMAIN
HWND excelWindow = FindWindow(L"XLMAIN", NULL);
//Use the EnumChildWindows function to iterate through all child windows until we find _WwG
EnumChildWindows(excelWindow, (WNDENUMPROC) EnumChildProc, (LPARAM)1);
return 0;
}
Правда Excel действительно работает в текущий момент, но AccessibleObjectFromWindow возвращает E_FAIL. Я также попытался запустить этот код в цикле и переключиться в Excel на него сфокусированным приложением. Та же история, AccessibleObjectFromWindow возвращает E_FAIL. Я сейчас ищу в интернете ответ, но все, что я нашел, ничего не дал мне. Поэтому, если кто-то может дать объяснение, мы будем очень благодарны.
Вы не сказали «пожалуйста, не отвечайте на ссылки MSDN», поэтому [здесь вы идете!] (Http://support.microsoft.com/kb/216686). Это статья о «Как автоматизировать Excel с C++» в комплекте с примерами кода, и это прямо из уст лошади! –
Я видел этот пример, и он отлично работает. Спасибо! К сожалению, он использует OLE вместо MSAA, который мне действительно нужен. Поэтому вопрос все еще открыт. –
Пожалуйста, не обращайте внимания на предыдущие комментарии, так как я резко изменил этот вопрос. Давайте выкопаем точный пример кода, опубликованный выше. Спасибо всем заблаговременно. –