Как сделать активным окно приложения из другой программы ?
От: Аноним  
Дата: 18.06.04 17:05
Оценка:
Хочется переключиться на окно одного из запущенных приложений.
Имеется соответствующий ему hProcess.
Как это сделать ?
Re: Как сделать активным окно приложения из другой программы
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 19.06.04 08:06
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Хочется переключиться на окно одного из запущенных приложений.

А>Имеется соответствующий ему hProcess.
А>Как это сделать ?

http://rsdn.ru/article/qna/ui/wndsetfg.xml
Автор(ы): Александр Шаргин
Re[2]: Как сделать активным окно приложения из другой програ
От: Аноним  
Дата: 21.06.04 11:07
Оценка:
Спасибо.
Re[2]: Как сделать активным окно приложения из другой програ
От: gribunin Россия  
Дата: 21.06.04 11:24
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, <Аноним>, Вы писали:


А>>Хочется переключиться на окно одного из запущенных приложений.

А>>Имеется соответствующий ему hProcess.
А>>Как это сделать ?

OE>http://rsdn.ru/article/qna/ui/wndsetfg.xml
Автор(ы): Александр Шаргин


Кстати, вы не знаете, а будет ли работать простой, но не описанный в той статье способ:

   ShowWindow(appWnd, SW_RESTORE);
   SetForegroundWindow(appWnd);


У меня под XP он работает нормально, какие тут могут быть грабли?
----------------
Кирилл Грибунин
Re[3]: Как сделать активным окно приложения из другой програ
От: Аноним  
Дата: 21.06.04 12:42
Оценка:
Здравствуйте, gribunin, Вы писали:

G>Здравствуйте, Odi$$ey, Вы писали:


OE>>Здравствуйте, <Аноним>, Вы писали:


А>>>Хочется переключиться на окно одного из запущенных приложений.

А>>>Имеется соответствующий ему hProcess.
А>>>Как это сделать ?

OE>>http://rsdn.ru/article/qna/ui/wndsetfg.xml
Автор(ы): Александр Шаргин


G>Кстати, вы не знаете, а будет ли работать простой, но не описанный в той статье способ:


G>
G>   ShowWindow(appWnd, SW_RESTORE);
G>   SetForegroundWindow(appWnd);
G>


G>У меня под XP он работает нормально, какие тут могут быть грабли?




У меня тоже работает...
Но у меня вызывающий процесс является активным, видимо в этом дело.
Re[4]: Как сделать активным окно приложения из другой програ
От: gribunin Россия  
Дата: 21.06.04 13:11
Оценка:
G>>
G>>   ShowWindow(appWnd, SW_RESTORE);
G>>   SetForegroundWindow(appWnd);
G>>


G>>У меня под XP он работает нормально, какие тут могут быть грабли?




А>У меня тоже работает...

А>Но у меня вызывающий процесс является активным, видимо в этом дело.

А что значит "активный" процесс? В моём тесте этот код вызывался из другого процесса, у которого даже не было своих окон.
----------------
Кирилл Грибунин
Re[3]: Как сделать активным окно приложения из другой програ
От: IPv6 Россия http://www.lumarnia.com/
Дата: 21.06.04 13:23
Оценка:
Здравствуйте, gribunin, Вы писали:

G>Кстати, вы не знаете, а будет ли работать простой, но не описанный в той статье способ:


G>
G>   ShowWindow(appWnd, SW_RESTORE);
G>   SetForegroundWindow(appWnd);
G>


G>У меня под XP он работает нормально, какие тут могут быть грабли?


Это работает в редкой половине случаев, проверено на большой практичке. часто приложение становится foreground, но его окно продолжает находиться за другими. лучше всего работает вариант с SC_HOTKEY
Re[5]: Как сделать активным окно приложения из другой програ
От: Аноним  
Дата: 21.06.04 13:37
Оценка:
Здравствуйте, gribunin, Вы писали:


G>>>
G>>>   ShowWindow(appWnd, SW_RESTORE);
G>>>   SetForegroundWindow(appWnd);
G>>>


G>>>У меня под XP он работает нормально, какие тут могут быть грабли?




А>>У меня тоже работает...

А>>Но у меня вызывающий процесс является активным, видимо в этом дело.

G>А что значит "активный" процесс? В моём тесте этот код вызывался из другого процесса, у которого даже не было своих окон.



В описании SetForegroundWindow одним из требований для вызывающего процесса выделено:

"The process is the foreground process."

Вероятно, для ShowWindow это тоже должно соблюдаться.
Re[4]: Как сделать активным окно приложения из другой програ
От: Аноним  
Дата: 21.06.04 13:40
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>Здравствуйте, gribunin, Вы писали:


G>>Кстати, вы не знаете, а будет ли работать простой, но не описанный в той статье способ:


G>>
G>>   ShowWindow(appWnd, SW_RESTORE);
G>>   SetForegroundWindow(appWnd);
G>>


G>>У меня под XP он работает нормально, какие тут могут быть грабли?


IP>Это работает в редкой половине случаев, проверено на большой практичке. часто приложение становится foreground, но его окно продолжает находиться за другими. лучше всего работает вариант с SC_HOTKEY



Что за вариант ?
Как сделать активным окно приложения из другой программы
От: IPv6 Россия http://www.lumarnia.com/
Дата: 21.06.04 16:45
Оценка: 46 (6) :)
#Имя: FAQ.winapi.wndsetfg
G>>>У меня под XP он работает нормально, какие тут могут быть грабли?
IP>>Это работает в редкой половине случаев, проверено на большой практичке. часто приложение становится foreground, но его окно продолжает находиться за другими. лучше всего работает вариант с SC_HOTKEY
А>Что за вариант ?

::SendMessage(::GetDesktopWindow(), WM_SYSCOMMAND, (WPARAM) SC_HOTKEY, (LPARAM) hWin);


подробности в МСДНе. Работает до XP включительно. Врядли это отключат в буд. версиях, потому как что-то из виндов эту фичу использует
Re[6]: Как сделать активным окно приложения из другой програ
От: MicVit  
Дата: 21.06.04 17:08
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, IPv6, Вы писали:


G>>>>У меня под XP он работает нормально, какие тут могут быть грабли?

IP>>>Это работает в редкой половине случаев, проверено на большой практичке. часто приложение становится foreground, но его окно продолжает находиться за другими. лучше всего работает вариант с SC_HOTKEY
А>>Что за вариант ?
IP>::SendMessage(::GetDesktopWindow(), WM_SYSCOMMAND, (WPARAM) SC_HOTKEY, (LPARAM)hWin);
IP>подробности в МСДНе. Работает до XP включительно. Врядли это отключат в буд. версиях, потому как что-то из виндов эту фичу использует

Интересно. Спасибо.
Re: Как сделать активным окно приложения из другой программы
От: Chez Россия  
Дата: 22.07.04 11:12
Оценка:
А>Хочется переключиться на окно одного из запущенных приложений.
А>Имеется соответствующий ему hProcess.
А>Как это сделать ?

Если извесно HWND любого процесса (к примеру главное окно нужной тебе программы, можно найти используя FindWindow), то
рулит функция:
void SystemActivateWindow(HWND hWindow)
{
    ASSERT(IsWindow(hWindow));

    ShowWindow(hWindow, SW_SHOWNORMAL);

    INT32 nThisTID = GetCurrentThreadId();

    HWND hCurrWnd = GetForegroundWindow();
    if (!IsWindow(hCurrWnd))
    {
        SetForegroundWindow(hWindow);
        return;
    }
    if (hCurrWnd == hWindow)
        return;

    INT32 nCurrTID = GetWindowThreadProcessId(hCurrWnd, 0);

    if (nThisTID != nCurrTID)
        VERIFY(AttachThreadInput(nThisTID, nCurrTID, TRUE));

    VERIFY(SetForegroundWindow(hWindow));

    if (nThisTID != nCurrTID)
        VERIFY(AttachThreadInput(nThisTID, nCurrTID, FALSE));

    // VERIFY(RedrawWindow(hWindow, NULL, NULL, RDW_UPDATENOW | RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN));
}


Создавалась для САМОактивации приложения, но по идее должна работать и с другими...
Re[2]: Как сделать активным окно приложения из другой програ
От: Rampant Россия http://www.edgebeyond.com/
Дата: 06.11.04 17:56
Оценка:
Здравствуйте, Chez, Вы писали:

А>>Хочется переключиться на окно одного из запущенных приложений.

А>>Имеется соответствующий ему hProcess.
А>>Как это сделать ?

C>Если извесно HWND любого процесса (к примеру главное окно нужной тебе программы, можно найти используя FindWindow), то

C>рулит функция:
C>
....
C>


C>Создавалась для САМОактивации приложения, но по идее должна работать и с другими...


Вот нифига она не работает, под XP во всяком случае. пробовал, знаю. Вот пост по поводу послать системнуб комманду — это работает.
Just dream can be infinity.
ICQ:77405006
Re: Как сделать активным окно приложения из другой программы
От: orangy Россия
Дата: 26.09.05 10:44
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>
IP>::SendMessage(::GetDesktopWindow(), WM_SYSCOMMAND, (WPARAM) SC_HOTKEY, (LPARAM) hWin);
IP>


IP>подробности в МСДНе. Работает до XP включительно. Врядли это отключат в буд. версиях, потому как что-то из виндов эту фичу использует

У меня есть подозрение, что это перестало работать в W2K3 SP1. По-крайней мере в тестовых условиях на такой OS не срабатывает... Есть идеи?
"Develop with pleasure!"
Re[3]: Как сделать активным окно приложения из другой програ
От: Аноним  
Дата: 26.09.05 10:47
Оценка:
Здравствуйте, Rampant, Вы писали:

R>Здравствуйте, Chez, Вы писали:


А>>>Хочется переключиться на окно одного из запущенных приложений.

А>>>Имеется соответствующий ему hProcess.
А>>>Как это сделать ?

C>>Если извесно HWND любого процесса (к примеру главное окно нужной тебе программы, можно найти используя FindWindow), то

C>>рулит функция:
C>>
R>....
C>>


C>>Создавалась для САМОактивации приложения, но по идее должна работать и с другими...


R>Вот нифига она не работает, под XP во всяком случае. пробовал, знаю. Вот пост по поводу послать системнуб комманду — это работает.


Системная комманда тоже не работает... Во всяком случае начиная с WinXP SP 2. На других версиях вроде работает. Проверено практикой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.