Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
ВнизКак Найти похожие ветки
← →
cyril (2003-05-07 20:56) [0]Проблема заключается в следующем:
Есть два приложения, которы обмениваются друг с другом командами
Одно из них мое, и когда я получаю команду, назовем ее
- "показать окно приложения", то пытаюсь выполнить следующий код
SetForegroundWindow(Application.Handle);
Вроде бы должно появиться окно приложения, ан нет, начинает
мигать кнопка на таскбаре, что совершенно не в тему.
Вопрос: можно ли что-нибудь с этим поделать
← →
Dmk (2003-05-07 21:28) [1]Скорее всего нужно так:
SetForegroundWindow(Application.MainForm.Handle);
← →
Романов Р.В. (2003-05-07 21:49) [2]Способ 3
Как утверждает документация, SetForegroundWindow работает как нам нужно, только если вызывающий её процесс является активным. А активен тот процесс, чей поток обрабатывает пользовательский ввод. Оказывается, наш процесс может "прикинуться" активным, подключив свой поток к обработке пользовательского ввода. Это осуществляется при помощи функции AttachThreadInput. После вызова SetForegroundWindow можно будет отключиться от чужого потока, используя ту же функцию (но передавая в качестве третьего параметра FALSE, а не TRUE).
Реализация этой идеи выглядит так.
HWND hCurrWnd;
int iMyTID;
int iCurrTID;
hCurrWnd = ::GetForegroundWindow();
iMyTID = GetCurrentThreadId();
iCurrTID = GetWindowThreadProcessId(hCurrWnd,0);
AttachThreadInput(iMyTID, iCurrTID, TRUE);
// hWnd - дескриптор окна.
SetForegroundWindow(hWnd);
AttachThreadInput(iMyTID, iCurrTID, FALSE);
(C) Александр Шаргин
← →
cyril (2003-05-07 21:56) [3]Большое спасибо, мне существенно полегчало ;-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c