Пилотирование Microsoft Word с Ole в C ++ Builder: как поставить Word на передний план - PullRequest
1 голос
/ 12 марта 2010

У меня есть код (который отлично работает) для пилотирования слова с помощью C ++ Builder. Это полезно для доступа к различным закладкам в документе.

Variant vNom, vWDocuments, vWDocument, vMSWord, vSignets, vSignet;
    vNom = WideString("blabla.doc");
    try
    {
        vMSWord = Variant::GetActiveObject("Word.Application");
    }
    catch(...)
    {
        vMSWord = Variant::CreateObject("Word.Application");
    }
    vMSWord.OlePropertySet("Visible", true);
    vWDocuments = vMSWord.OlePropertyGet("Documents");
    vWDocument = vWDocuments.OleFunction("Open", vNom);
    vSignets = vWDocument.OlePropertyGet("BookMarks");
    if (vSignets.OleFunction("Exists", signet))
    {
        vSignet = vSignets.OleFunction("Item", signet);
        vSignet.OleFunction("Select");
    }

Но как только документ открыт, пользователь больше не может видеть, когда была достигнута другая закладка, поскольку приложение остается в фоновом режиме.

Кто-нибудь знает, как я могу сделать так, чтобы Word отображался на переднем плане или освещал документ на панели задач?

Ответы [ 2 ]

1 голос
/ 12 марта 2010

Для этого есть простой трюк (с использованием Win32 API):

ShowWindow(hwnd, SW_MINIMIZE);
ShowWindow(hwnd, SW_RESTORE);

Вы должны найти слово, используя функцию EnumWindows .

0 голосов
/ 12 марта 2010

Я использую метод "FindWindow":

HWND hwnd = FindWindowA(NULL,"blabla.doc - Microsoft Word");
    ShowWindow(hwnd, SW_MINIMIZE);
    ShowWindow(hwnd, SW_RESTORE);
...