none
WinApi запуск приложения из программы RRS feed

  • Вопрос

  • Моя задача сделать так, чтобы из моего приложения запускался Word и его окно располагалось бы в правой части экрана.

     Я пишу так

      AnsiString s = "C:\\Program Files\\Microsoft Office\\Office12\\WINWORD;
    ::ShellExecute(0, NULL, s.c_str(), NULL, NULL, SW_RESTORE);
    if(GetLastError == 0) {
    HWND h = GetNextWindow(h, GW_HWNDNEXT);
    SetWindowPos(h, 0, 500, 10, 300, 800, SWP_SHOWWINDOW);
    }

    но Word запускается на весь экран

    • Перемещено Abolmasov Dmitry 7 сентября 2011 г. 12:33 (От:Языки программирования)
    2 августа 2011 г. 5:36

Ответы

  • Пробовал) Вообщем, получилось запустить окно приложения на половину экрана, только не получилось это сделать с вордом. Adobe Acrobat, блокнот - открываются так как задано флагом в ShellExecute. А ворд игнорирует флаг и запускается на весь экран

    вот код

    HWND H=Handle;
        ShellExecute(Handle, NULL, "t4.doc", NULL, NULL, SW_HIDE);
        Sleep(1500);
        char Pch[128];
        int i=0;
        do
        {
            H = GetNextWindow(H,GW_HWNDPREV);
            GetWindowText(H,Pch,128);
            if(AnsiString(Pch).Pos("t4"))
                break;
        } while(H);
        if(H)
        SetWindowPos(H, 0, 600, 10, 400, 800, SWP_SHOWWINDOW);

    тему можно закрывать

    • Помечено в качестве ответа Abolmasov Dmitry 4 августа 2011 г. 10:17
    4 августа 2011 г. 9:52

Все ответы

  • Т.е. Word запускает в максимизированном состоянии? Попробуйте поиграться с флагом запуска в ShellExecute. Попробуйте SW_SHOWNORMAL или SW_SHOWDEFAULT.


    Для связи [mail]
    • Предложено в качестве ответа Abolmasov Dmitry 4 августа 2011 г. 5:18
    2 августа 2011 г. 7:44
  • Пробовал) Вообщем, получилось запустить окно приложения на половину экрана, только не получилось это сделать с вордом. Adobe Acrobat, блокнот - открываются так как задано флагом в ShellExecute. А ворд игнорирует флаг и запускается на весь экран

    вот код

    HWND H=Handle;
        ShellExecute(Handle, NULL, "t4.doc", NULL, NULL, SW_HIDE);
        Sleep(1500);
        char Pch[128];
        int i=0;
        do
        {
            H = GetNextWindow(H,GW_HWNDPREV);
            GetWindowText(H,Pch,128);
            if(AnsiString(Pch).Pos("t4"))
                break;
        } while(H);
        if(H)
        SetWindowPos(H, 0, 600, 10, 400, 800, SWP_SHOWWINDOW);

    тему можно закрывать

    • Помечено в качестве ответа Abolmasov Dmitry 4 августа 2011 г. 10:17
    4 августа 2011 г. 9:52