Форум: "WinAPI";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
ВнизКак сделать окно активным. Найти похожие ветки
← →
Nikfel © (2007-06-21 17:28) [0]Подскажите как вывести на передний план чужое окно, зная его handl c помощью функции FindWindow.
← →
Инс (2007-06-21 17:29) [1]SetForegroundWindow
← →
Инс (2007-06-21 17:34) [2]В дополнение. Начиная с Windows 2000 введена блокировка всплывающих окон. Если пользователь работает с чужим приложением, то ваше не всплывет, а будет мигать на панели задачь. если несмотря ни на что вы хотите, чтобы ваше окно всплыло поверх других, то есть пару трюков. По хорошему, нужно, чтобы чужое приложение вызывало AllowForegroundWindows, но сработает и такой код:
function ForceForegroundWindow(Wnd:HWND):Boolean;
var
ForegroundWnd:HWND;
ActiveThread,WndThread:DWORD;
Attached:Boolean;
begin
ForegroundWnd:=GetForegroundWindow;
Attached:=False;
if ForegroundWnd<>0 then begin
ActiveThread:=GetWindowThreadProcessId(ForegroundWnd,nil);
WndThread:=GetWindowThreadProcessId(Wnd,nil);
if ActiveThread<>WndThread then
Attached:=AttachThreadInput(WndThread,ActiveThread,True)
end;
Result:=SetForegroundWindow(Wnd);
if Attached then AttachThreadInput(WndThread,ActiveThread,False);
end;
И даже такой, хотя если с предыдущим все ясно, то с этим непонятно, почему он работает.function ForceForegroundWindow(Wnd:HWND):Boolean;
var
Input:TInput;
begin
FillChar(Input,SizeOf(Input),0);
SendInput(1,Input,SizeOf(TInput));
Result:=SetForegroundWindow(Wnd);
end;
← →
Leonid Troyanovsky © (2007-06-21 18:13) [3]
> Инс (21.06.07 17:34) [2]
> несмотря ни на что вы хотите, чтобы ваше окно всплыло поверх
> других, то есть пару трюков.
В печь ее [проф. Преображенский].
> И даже такой, хотя если с предыдущим все ясно, то с этим
> непонятно, почему он работает.
Во-первых, не ясно и с первым, а, во-вторых,
непонятно, почему известно, что он работает.
--
Regards, LVT.
← →
Инс (2007-06-21 18:21) [4]
> В печь ее
Десятый раз отвечаю на подобный вопрос, и всегда говорил, что это не хорошо. Повторю еще раз: ПО ХОРОШЕМУ, ЧУЖОЕ ПРИЛОЖЕНИЕ ДОЛЖНО ВЫЗЫВАТЬ ALLOWFOREGROUNDWINDOW!!!
> Во-первых, не ясно и с первым
Рихтера почитайте, тогда ясно будет. Всплывать может только окно потока, подключенного к очереди клавиатурного ввода. А в первом коде мы искуственно подключам наш поток к нему.
> непонятно, почему известно, что он работает
Тыщу раз использовал! Не верите - проверьте.
← →
Инс (2007-06-21 18:30) [5]
> окно потока, подключенного к очереди клавиатурного ввода
Иногда можно еще встретить термин Foreground Thread
← →
Leonid Troyanovsky © (2007-06-21 18:47) [6]
> Инс (21.06.07 18:21) [4]
> ПРИЛОЖЕНИЕ ДОЛЖНО ВЫЗЫВАТЬ ALLOWFOREGROUNDWINDOW!!!
Во-первых, не надо на меня кричать, я и не собирался
преступным путем вытаскивать левые окна foreground.
Во-вторых, AFGW здесь причем только поскольку
в msdn в статье ей посвященной есть перечень ограничений,
которые некоторым следовало бы выучить наизусть.
> Рихтера почитайте, тогда ясно будет. Всплывать может только
Рихтер-то тут причем? Он подобным всплытием, слава Богу,
не страдает.
> А в первом коде мы искуственно подключам наш поток к нему.
Возможно, что SFGW просто спутана, скажем, с SetFocus.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-21 18:54) [7]
> Инс (21.06.07 18:21) [4]
> Тыщу раз использовал! Не верите - проверьте.
Даже пробывать не буду, бо бред.
Вот, допустим, я узнал некий бронебойный метод.
Но, если я про него буду везде рассказывать, то стану
нарушителем конвенции, и, кроме того, вынужу
MS залатать оную дыру.
Т.е., никакой пользы в расспространении подобных знаний нет.
Как, впрочем, и нет пользы в подобных методах :)
--
Regards, LVT.
← →
Инс (2007-06-21 19:13) [8]
> Во-первых, не надо на меня кричать
Да я не на Вас кричу, Вы мне ничего плохого не сделали. Если у Вас сложилось такое впечатление, то искренне прошу прощения. Это крик души ;)
> Во-вторых, AFGW здесь причем только поскольку
> в msdn в статье ей посвященной есть перечень ограничений,
> которые некоторым следовало бы выучить наизусть.
Хм, о чем это Вы? Даже специально залез в MSDN, ничего особенного в remarks не нашел.
> Рихтер-то тут причем? Он подобным всплытием, слава Богу,
>
> не страдает
Там достаточно подробно описано работы всплывающих окон.
> Возможно, что SFGW просто спутана, скажем, с SetFocus.
Брр. Не понял, что с чем спутано? В первом коде мы получаем foreground-окно, идентификатор потока, который его создал, и подключаем нашу очередь виртуального ввода к нему. Таким образом, наш поток становится подключенным к очереди виртуального ввода. Она только одна, и ей обладает поток верхнего уровня (Foreground Thread). Теперь всплывающие окна нашего потока не будут заблокированы. А причем тут SetFocus? Он фокусом ввода управляет, а фокус у каждого потока свой (в отличие от очереди виртуального ввода, которая только одна)
← →
Инс (2007-06-21 19:17) [9]
> Как, впрочем, и нет пользы в подобных методах
Не скажите. Ни кому не нравится просыпаться утром от звука будильника, но тем не менее, все понимают, что он нужен ;) Это я к чему. В каких-нибудь органайзерах-будильниках, порой нужно, чтобы окно нагло влезло несмотря ни на что, иначе пользователь может его просто не заметить. Или, например, ICQ пользуетесь? Там окошки с сообщением тоже всплывают, когда ICQ неактивно.
← →
Nikfel © (2007-06-21 19:33) [10]Спасибо функция SetForegroundWindow работает. Остольное пока не проверял.
← →
Инс (2007-06-21 19:37) [11]Вообще, не понимаю, о чем мы спорим? Вы считаете, что код не рабочий? Если да, то вы объективно неправы. Жаль что не хотите проверять, ну да ладно, это Ваше дело, я не буду настаивать ;) А если вы утверждаете, что код рабочий, но вот делать так категорически не надо, то тут частично соглашусь. Почему частично, я уже объяснял в [9]
← →
Инс (2007-06-21 19:39) [12]О! Еще пример, когда можно воспользоваться этим способом: запускается второй экземпляр приложения, при этом нужно не допустить повторного запуска, а найти окно предыдущего экземпляра и поместить его наверх.
← →
Leonid Troyanovsky © (2007-06-21 20:25) [13]
> Инс (21.06.07 19:13) [8]
> Хм, о чем это Вы? Даже специально залез в MSDN, ничего особенного
> в remarks не нашел.
Remarks
Starting with Microsoft Windows 98 and Windows 2000, the system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:
The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The foreground process is being debugged.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-21 20:29) [14]
> Инс (21.06.07 19:37) [11]
> не рабочий? Если да, то вы объективно неправы. Жаль что
> не хотите проверять, ну да ладно, это Ваше дело, я не буду
> настаивать ;) А если вы утверждаете, что код рабочий, но
> вот делать так категорически не надо, то тут частично соглашусь.
Код нерабочий, а методы бесполезные (вредные).
Ранее здесь уже частично объяснял.
--
Regards, LVT.
← →
Инс (2007-06-21 20:31) [15]Я это читал :) И? На что я должен обратить внимание? И почему? Что из написанного в MSDN противоречит моим словам?
Кстати,
> которые некоторым следовало бы выучить наизусть
Наизусть учить SDK - бред (Вы первые начали употребление таких слов). Но я этим не ограничусь, а приведу аргумент, который и так, думаю, Вам известен. Умный не тот, кто много знает, а тот, кто умеет найти информацию и воспользоваться ей.
← →
Leonid Troyanovsky © (2007-06-21 20:32) [16]
> Инс (21.06.07 19:39) [12]
> О! Еще пример, когда можно воспользоваться этим способом:
> запускается второй экземпляр приложения, при этом нужно
> не допустить повторного запуска, а найти окно предыдущего
> экземпляра и поместить его наверх.
Эта другая песня, здесь ничего нарушать не надо,
см. [13] первые два пункта ограничений.
--
Regards, LVT.
← →
Инс (2007-06-21 20:37) [17]
> Код нерабочий...
По поводу вредности - это Ваше субъективное мнение. А по поводу нерабочести... Эх, не получается у нас конструктивного спора, так как некоторые просто не хотят слушать собеседника, проверять его аргументы и приводить свои. В таком ключе я дальше беседовать не намерен. Какая-то дедовщина у Вас тут! Почему-то "старожилы" форума, думают, что мозги есть только у них. До свидания!
← →
Инс (2007-06-21 20:43) [18]
> см. [13] первые два пункта ограничений.
Нет, все-таки отвечу. Смотрю. А теперь представьте ситуацию. Запущен экземпляр MyCoolProg, но юзер в данный момент печатает текст в MS Word. Потом берет - и из меню запускает вторую копию MyCoolProg. Теперь нам нужно из второй копии найти первую и поместить поверх всего, а вторую - закрыть. Окно первой копии будет заблокировано, так как по первым двум пунктам - оно не принадлежит foreground-process (вторая копия) и процесс первой копии не создан foreground-process-ом.
← →
Anatoly Podgoretsky © (2007-06-21 20:43) [19]> Инс (21.06.2007 20:37:17) [17]
Пока, пока, передумает - заходите в гости.
← →
Инс (2007-06-21 20:45) [20]
> Пока, пока, передумает - заходите в гости.
Я вообще-то про этот топик говорю. А насчет в гости... вы к нам тоже на delphikingdom чаще заглядывайте ;)
← →
Anatoly Podgoretsky © (2007-06-21 20:47) [21]> Инс (21.06.2007 20:45:20) [20]
Захожу иногда, пишу редко.
← →
Инс (2007-06-21 20:55) [22]Вижу Вас иногда, по Вашим статьям с Indy знакомился ;)
← →
Anatoly Podgoretsky © (2007-06-21 21:04) [23]> Инс (21.06.2007 20:55:22) [22]
Я попробовал в свое время активно там работать - не понравилось. Основной недостаток сообщения не всплывают, а лазить по ним и смотреть не изменились ли нет желания. Это единственная причина. Сами вопросы ничем не отличаются от других форумов - даже пред модерирование не помогает.
← →
Leonid Troyanovsky © (2007-06-21 21:38) [24]
> Инс (21.06.07 20:43) [18]
> текст в MS Word. Потом берет - и из меню запускает вторую
> копию MyCoolProg. Теперь нам нужно из второй копии найти
> первую и поместить поверх всего, а вторую - закрыть. Окно
> первой копии будет заблокировано, так как по первым двум
> пунктам - оно не принадлежит foreground-process (вторая
> копия) и процесс первой копии не создан foreground-process-
> ом.
А не надо пытаться активировать вторую копию из non-foreground первой.
Вторая же - является таковой по закону, бо запущена by the foreground
process (Explorer), который, в свою очередь, был таковым благодаря
received the last input event (меню).
>умный не тот, кто много знает, а тот, кто умеет найти информацию и воспользоваться ей.
Изволь :)
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-21 21:51) [25]
> Инс (21.06.07 20:37) [17]
> > Код нерабочий...
> спора, так как некоторые просто не хотят слушать собеседника,
> проверять его аргументы
Ты привел код, ну и доказывай его работоспособность.
В качестве контраргумента я привел выдержку из msdn.
Очевидно, что первое противоречит второму.
Про выводы мне судить трудно, хотя, и доказательства
первого представляются мне весьма непростыми, особенно
в условиях пренебрежения вторым.
--
Regards, LVT.
← →
Инс (2007-06-21 22:53) [26]
> А не надо пытаться активировать вторую копию из non-foreground
> первой.
Я вообще-то говорил наоборот - активировать первую из второй, а вторую - закрывать. Перечитайте мое сообщение [18] еще раз.
> Ты привел код, ну и доказывай его работоспособность.
Что ж, еще раз. Перевожу MSDN. Всплыть может только в одном из следующих случаев.
- Окно принадлежит foreground-процессу
- Окно принадлежит процессу, чей родитель foreground-процесс
- Процесс подключен к очереди ввода
- Нет foreground-процесса
- Foreground-процесс отлаживается
- Foreground-процесс не заблокирован с пом. LockSetForegroundWindow
- Истек таймаут блокировки Foreground
Мой первый код выполняет условие из пункта, выделенного жирным. Что еще объяснить?
← →
Инс (2007-06-21 22:58) [27]Хотя вот оно что! Если переводить буквально "процесс получил последним событие ввода", то это еще и объясняет трюк с SendInput. Теперь точно все понятно, по крайней мере для меня. Такое поведение документировано, а значит, ничего преступного в трюке нет.
← →
DVM © (2007-06-21 22:59) [28]Вот 100% рабочий код.
function ForceForegroundWindow(hWnd: HWND): BOOL;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
OsVerInfo: TOSVersionInfo;
Win32MajorVersion: Integer;
Win32MinorVersion: Integer;
Win32Platform: Integer;
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
Timeout: DWORD;
begin
OsVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(osVerInfo);
Win32MajorVersion := OsVerInfo.dwMajorVersion;
Win32MinorVersion := OsVerInfo.dwMinorVersion;
Win32Platform := OsVerInfo.dwPlatformId;
if IsIconic(hWnd) then ShowWindow(hWnd, SW_RESTORE);
if GetForegroundWindow = hWnd then Result := True
else
begin
if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4)
or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then
begin
Result := False;
ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hWnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
begin
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hWnd);
end;
if not Result then
begin
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @Timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(Timeout),
SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
end;
Result := (GetForegroundWindow = hWnd);
end;
end; // End of function ForceForegroundWindow
Еще есть недокументированная функция SwitchToThisWindow(), которой пользуется сама MS.
← →
Инс (2007-06-21 23:05) [29]
> Основной недостаток сообщения не всплывают, а лазить по
> ним и смотреть не изменились ли нет желания.
Так есть же отслеживание по RSS. В прочем, Вы правы, сами вопросы ничем не отличаются, разве что откровенный мусор, благодаря предмодерации, все же на форум не попадает. Ну да ладно, не это главное. Подобные ресурсы любят за атмосферу, общение с близкими по духу людьми, да за многое!
← →
Leonid Troyanovsky © (2007-06-21 23:26) [30]
> Инс (21.06.07 22:53) [26]
> Я вообще-то говорил наоборот - активировать первую из второй,
> а вторую - закрывать. Перечитайте мое сообщение [18] еще
Очевидно, что я читал его более внимательно, чем ты [24].
Активировать надо первую, а вторую - закрывать.
Тогда все получится в соответствии с условиями.
Тем более, что такого есть полезного у свежепущенной
копии, кроме, возможно, ее комстроки.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-21 23:35) [31]
> Инс (21.06.07 22:58) [27]
> Хотя вот оно что! Если переводить буквально "процесс получил
> последним событие ввода", то это еще и объясняет трюк с
Пусть так, но уж никак не "Процесс подключен (?) к очереди ввода"
Только ничего это не объясняет, бо SI пошлет ввод foreground
процессу, а не вызывающему SFGW.
Есть на этом пути некое продолжение, но, рассказывать о нем я
не буду (почему аргументировал), могу лишь предложить
в качестве домашнего задания.
Но, в любом случае, оно должно оставаться академическим решением.
--
Regards, LVT.
← →
Инс (2007-06-21 23:35) [32]
> Очевидно, что я читал его более внимательно, чем ты [24].
Тогда чего вы пишите "А не надо пытаться активировать вторую копию из non-foreground первой." Я ничего про активирование второй из первой не писал! Вот только при активации первой из второй, как МЫ предлагаем, без дополнительных ухищрений, ни одно условие не соблюдается? Вы не согласны? Если не согласны, то какое соблюдается?
← →
Инс (2007-06-21 23:46) [33]Да, с SendInput возможно погорячился... Что ж, останется пока загадкой. А насчет
> Пусть так, но уж никак не "Процесс подключен (?) к очереди
> ввода"
Я Вам Рихтера процитирую, ладно.
...Чтобы прекратить всю эту неразбериху, Microsoft сделала SetForegroundWindow чуть поумнее. В частности, эта функция срабатывает, только если вызывающий поток уже подключен к RIT или если поток, связанный с RIT R данный момент, не получал ввода на протяжении определенного периода (который задается функцией System ParametersInfo и значением SPI_SETFOREGROUNDLOCKTIMEOUT)
А от себя добавлю, что с помощью AttachThreadinput можно заставить два потока совместно использовать одну очередь ввода.
← →
Leonid Troyanovsky © (2007-06-21 23:47) [34]
> DVM © (21.06.07 22:59) [28]
> Вот 100% рабочий код.
Любой сегодня работающий код на эту тему
уже завтра станет неработающим.
Давай порассуждаем. Предположим, что некто разработал
систему, основанную на правилах MS, а некий код пробивает
в оных брешь. После любого иска к MS (ведь захватом чужого
фокуса легко нанести этой системе вред) последние эту брешь
обязательно заткнут, бо такова политика. Скорее даже
это произойдет еще до иска, достаточно обсуждений в usenet :)
Да и нечего бороться с ветряными мельницами,
захват чужого фокуса и на самом деле отвратительнейшая вещь.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-21 23:56) [35]
> Инс (21.06.07 23:35) [32]
> второй из первой не писал! Вот только при активации первой
> из второй, как МЫ предлагаем, без дополнительных ухищрений,
> ни одно условие не соблюдается? Вы не согласны? Если не
> согласны, то какое соблюдается?
Ровно 3, считаем:
Вторая же - является таковой по закону, бо запущена by the foreground
process (Explorer) - раз
который, в свою очередь, был таковым благодаря
received the last input event (меню). - два
и три: запущенная проводником копия, являясь foreground,
может делать SFGW по первому пункту.
--
Regards, LVT.
← →
Инс (2007-06-21 23:57) [36]
> Давай порассуждаем. Предположим, что некто разработал
> систему, основанную на правилах MS, а некий код пробивает
> в оных брешь. После любого иска к MS (ведь захватом чужого
> фокуса легко нанести этой системе вред) последние эту брешь
> обязательно заткнут, бо такова политика.
Вот в этом фрагменте готов подписаться под каждым словом. Вот только трюк с AttachThreadInput ничему не противоречит, это вполне документированное поведение. Для меня это очевидно. Насчет трюка с SendInput я такого утверждать не могу, пока не разберусь, как это работает. Возможно это "фича", которую скоро заткнут. Нет плохих функций, есть плохие программы и плохие программисты, которые неправильно используют системные механизмы. Нужно править руки тех, кто пишет плохие программы, а не затыкать сомнительные дыры. Я приводил примеры, где эти трюки могут пойти во благо, но если ими злоупотреблять, то это разумеется вред.
← →
Leonid Troyanovsky © (2007-06-22 00:05) [37]
> Инс (21.06.07 23:46) [33]
> Я Вам Рихтера процитирую, ладно.
Да я с ним и не спорил :)
> А от себя добавлю, что с помощью AttachThreadinput можно
> заставить два потока совместно использовать одну очередь
> ввода.
Ну, хорошо, приаттачься своим потоком, скажем, к Блокноту
и заставь его OnKeyDown ;) на нажатие к-л клавиши в ем.
Можешь и в msdn заглянуть, ради любопытства.
--
Regards, LVT.
← →
Инс (2007-06-22 00:06) [38]
> Ровно 3, считаем:
Хм.. Что ж, тут посыпаю голову пеплом. В этой ситуации действительно отделаемся простым SetForegroundWindow. Но я ведь приводил еще два примера - будильник и ICQ. Комментируйте...
← →
Anatoly Podgoretsky © (2007-06-22 00:11) [39]> Инс (22.06.2007 00:06:38) [38]
Те мои пользователи, которые использую ICQ - отключили этот поплавок, поскольку работать не возможно, только начинаешь бить текст как он всплывает и уже дальше бьешь в нем.
Будильник, а кто сказал что он должен всплывать а не сигнализировать другим способом, для этого существует область оповещений и ballon hints, которые как раз и изобрели, что бы избежать проблем поплавка.
Пока ни один приведеный довод не убедил.
← →
Leonid Troyanovsky © (2007-06-22 00:15) [40]
> Инс (21.06.07 23:35) [32]
> копию из non-foreground первой." Я ничего про активирование
> второй из первой не писал!
Да, был невнимателен, sorry.
Т.е., описанный тобой (нами) путь вполне легален и не
требует никаких трюков. MS - гарантирует ;)
--
Regards, LVT.
← →
Инс (2007-06-22 00:17) [41]
> Те мои пользователи, которые использую ICQ - отключили этот
> поплавок, поскольку работать не возможно, только начинаешь
> бить текст как он всплывает и уже дальше бьешь в нем.
Вот тока что проверил. Печатаю тут текст без перерыва, и при этом мне приходят сообщения по ICQ. И все в порядке!
← →
Anatoly Podgoretsky © (2007-06-22 00:19) [42]> Anatoly Podgoretsky (22.06.2007 00:11:39) [39]
А если точнее, то согласен с одним доводом, когда всплывает предыдущая копия приложения, вместо запущенной новой, а новая закрывается. Тут нет неудобства.
← →
Leonid Troyanovsky © (2007-06-22 00:25) [43]
> Инс (22.06.07 00:17) [41]
> Вот тока что проверил. Печатаю тут текст без перерыва, и
> при этом мне приходят сообщения по ICQ. И все в порядке!
Значит, это не SFGW, а, возможно, перемещение его наверх,
без передачи фокуса ввода. Хотя, и на этом пути MS
установил некоторые ограничения (тоже, IMHO, разумные).
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-06-22 00:29) [44]
> Anatoly Podgoretsky © (22.06.07 00:19) [42]
> А если точнее, то согласен с одним доводом, когда всплывает
> предыдущая копия приложения, вместо запущенной новой, а
> новая закрывается. Тут нет неудобства.
Мы ж выяснили, что в этом случае простому SWFG ничего не препятствует.
Если, конечно, приложение запускается юзером, т.е., приложением,
получившим от него событие ввода, а не, скажем, будильником.
--
Regards, LVT.
← →
Инс (2007-06-22 00:30) [45]Ладно, смысл продолжать спор не вижу, все равно каждый останется при своем. Если кто найдет основание использовать подобный метод, у него есть и готовый код, и "критический взгляд", так что ему будет над чем подумать. Каждый сам для себя решит, как ему поступать. Так что, используйте на свой страх и риск.
PS: А я кстати очень люблю подобные "фичи", еще могу примеров привести, главное действительно не злоупотреблять и взвешивать все "за" и "против".
← →
Anatoly Podgoretsky © (2007-06-22 00:32) [46]> Leonid Troyanovsky (22.06.2007 00:25:43) [43]
ICQ они разные бывают, речь про Web ICQ, непомню только Flash или Java, да и версии изменяются.
Кроме того даже не важно, передается фокус или нет, само появления окна поверх моего окна уже сильно достает.
← →
Anatoly Podgoretsky © (2007-06-22 00:34) [47]> Leonid Troyanovsky (22.06.2007 00:29:44) [44]
> Если, конечно, приложение запускается юзером, т.е., приложением,
Именно этот случай я и имел ввиду, а не самовольное.
Например Outlook Express
← →
Инс (2007-06-22 00:34) [48]
> само появления окна поверх моего окна уже сильно достает.
А меня сильно достает моргание в панели задач! Видите, на вкус и цвет...
← →
Anatoly Podgoretsky © (2007-06-22 00:35) [49]> Инс (22.06.2007 00:34:48) [48]
Моргание внизу не перекрывает мне видимую часть моего рабочего окна.
← →
Инс (2007-06-22 00:38) [50]Небольшие всплывающие внизу экрана окошки ничего не перекрывают, так как пользователь, как правило, работает в центре экрана. А вот моргание в панели задач заставляет отвлечься и перевести туда не только взгляд, но и курсор мыши, чтобы его прекратить. Видите, Вас раздражает одно, а меня другое. Мы оба правы, потому что доводы субъективные.
← →
Leonid Troyanovsky © (2007-06-22 00:42) [51]
> Инс (22.06.07 00:30) [45]
> Ладно, смысл продолжать спор не вижу, все равно каждый останется
Мы не спорим, а обсуждаем. Что кто вынесет из обсуждения
зависит от каждого читателя (писателя)
> PS: А я кстати очень люблю подобные "фичи", еще могу примеров
> привести,
Вот если б ты привел "фичи" и примеры правильных решений,
которые должны применяться на самом деле, то было б тебе
большое программистское спасибо.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2007-06-22 00:44) [52]> Инс (22.06.2007 00:38:50) [50]
Всплывает окно большого размера по центру экрана.
Еще раз ICQ они разные бывают.
Да и не про ICQ речь, а про поплавки, у МС мне мешает всплывающее окно у OE при работе с NNTP если не уйти с группы, но оно хоть фокус не перехватывает, просто мешает своим фактов всплытия. Но это продукт старый, до этой эпохи, его родословная отсчитывает от Win 3.1 а в данном виде он почти без изменения с Win95. Микрософт очень редко переделывает поведение старых программ, новые программы подчиняются правилам нового интерфейса.
← →
Инс (2007-06-22 00:50) [53]
> Вот если б ты привел "фичи" и примеры правильных решений,
> которые должны применяться на самом деле, то было б тебе
> большое программистское спасибо.
Всему свое время...
← →
Инс (2007-06-22 00:59) [54]Ладно, Вы сами попросили... Вот моя любимая фича ;) И вроде бы кроме фичи, приведено правильное решение.
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=51242
Сойдет?
← →
Leonid Troyanovsky © (2007-06-22 01:10) [55]
> Инс (22.06.07 00:59) [54]
> Ладно, Вы сами попросили... Вот моя любимая фича ;) И вроде
> бы кроме фичи, приведено правильное решение.
>
> http://www.delphikingdom.com/asp/answer.asp?IDAnswer=51242
Правильное решение: TerminateProcess :)
Приложению после подобных завершений, все равно, долго не жить.
--
Regards, LVT.
← →
Инс (2007-06-22 01:17) [56]
> TerminateProcess
TerminateThread вы имеете в виду? Это неправильное решение в большинстве случаев, а правильное - это посылка сообщения или QueueUserAPC, в общем - мягкое завершение. Почему - не будем разводить флейм, если хотите чтобы я объяснил - добро пожаловать ко мне в ICQ. 371-759-799
← →
Инс (2007-06-22 01:33) [57]А, не, вы наверное имелли в виду именно TerminateProcess :) Ценю юмор :)) Вот только если все сделать ПРАВИЛЬНО, то приложение будет работать еще долго...
← →
Leonid Troyanovsky © (2007-06-22 01:40) [58]
> Инс (22.06.07 01:17) [56]
>
> > TerminateProcess
> TerminateThread вы имеете в виду?
Правильных ответов на неправильные вопросы нет.
Имел же я ввиду то, что сказал, почему - объяснил.
За адресок спасибо, но тут есть и курилка: "Прочее"
Только мягкое завершение там не очень в почете,
более - жесткие концы :)
Ладно, спать уж пора, завтра еще трудиться.
--
Regards, LVT.
← →
Германн © (2007-06-22 02:03) [59]Четвертый год соленый пот и кровь рекой.
А мне б в девчоночку хорошую влюбиться
И не лень Вам было?
Страницы: 1 2 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.051 c