Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение hInstance приложения, Запущенного ShellExecuteEx 
:(
    Опции темы
Kostt
Дата 19.12.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

Репутация: 2
Всего: 3



Здравствуйте!

Использую ShellExecuteEx для открытия различных документов.
Хочу, чтобы после открытия, окно этого документа становилось активным,
для чего получаю hInstance запущенного приложения. Проблема в том, что если экземпляр этого приложения уже запущен на момент вызова функции, в ShellExecuteEx возвращает NULL в поле hProccess. Кто-нибудь знает, как заставить его возвращать правильный HINSTANCE? Заранее благодарен.
Ниже приведен код:

Код

    SHELLEXECUTEINFO info = {0};    
    info.fMask        = SEE_MASK_NOCLOSEPROCESS ;
    info.lpFile       = strFilePath.GetBuffer(0);
    info.lpVerb          = _T( "open" );
    info.nShow        = SW_SHOW;
    info.cbSize          = sizeof( SHELLEXECUTEINFO );

    int i              = ERROR_ACCESS_DENIED ;
    bSuccess          = FALSE;

    ShellExecuteEx( &info );
    i = GetLastError();
    
    if( i == ERROR_SUCCESS ) 
    {
        bSuccess = TRUE;

        if( !info.hProcess ) //тут NULL, если приложение открывающее документ уже запущено :(
            return NULL;

        if( ::EnumWindows( (WNDENUMPROC)EnumWindowsProc, GetProcessId( info.hProcess ) ) ) 
        {
            if( !SetForegroundWindow( m_hWnd ) )
            {
                CString strLog;
                strLog.Format( _T( "Не получается SetForegroundWindow для %s\n" ), strFilePath );
                LogPtr->WriteToLog( strLog );
            }
        }
        CloseHandle( info.hProcess );
    }

PM MAIL   Вверх
zkv
Дата 19.12.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



какие-то проблемы возникают при использовании ShellExecuteEx (не помню какие), возможно это одна из них.
используй CreateProcess()
PM MAIL   Вверх
Kostt
Дата 20.12.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

Репутация: 2
Всего: 3



CreateProcess не подходит, т.к. мне нужно открывать файл ассоциированным приложением, имя которого заранее не известно
PM MAIL   Вверх
zkv
Дата 20.12.2007, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Kostt @  20.12.2007,  11:47 Найти цитируемый пост)
мне нужно открывать файл ассоциированным приложением, имя которого заранее не известно 

посмотри тут:
Цитата(dumb)

FindExecutable + CreateProcess 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.