![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Focus [D7, WinXP]
Пантелеев Иван © (2005-09-01 17:54:00)Как программно проверить потерю программой фокуса, и, если такое случилось, то передать фокус обратно программе.
Пантелеев Иван (2005-09-05 00:33:00) [1]А чё тут приводить я просто твой код кидаю в таймер, а что не правильно?
psa247 (2005-09-04 20:39:00) [2]Приведи код.
Пантелеев Иван (2005-09-04 19:53:00) [3]Код компилируется бкз проблем, но работать не хочет!
В чём проблема?
psa247 (2005-09-04 09:31:00) [4]Удалено модератором
psa247 (2005-09-04 09:31:00) [5]Делай SetTimer и добавь это:
var CurrentW, OurW : HWND;
OurID, CurrentID : integer;
Timeout : DWORD;
const SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
begin
OurW:= FindWindow(nil,'Start Stealth');
if IsIconic(OurW) then OpenIcon(OurW);
if IsWindowEnabled(OurW)= False then EnableWindow(OurW, True);
if IsWindowVisible(OurW)= False then begin
Application.ShowMainForm:= True;
ShowWindow(OurW, SW_SHOWNORMAL);
end;
CurrentW:= GetForegroundWindow;
if CurrentW = OurW then exit;
OurID:= GetCurrentThreadId;
CurrentID:= GetWindowThreadProcessId(CurrentW);
AttachThreadInput(OurID, CurrentID, True);
BringWindowToTop(OurW);
SetForegroundWindow(OurW);
if GetForegroundWindow <> OurW then begin
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,@Timeout,0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,TObject(0),SPIF_SENDCHANGE);
BringWindowToTop(OurW);
SetForegroundWindow(OurW);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,TObject(Timeout),SPIF_SENDCHANGE);
end;
AttachThreadInput(OurID, CurrentID, False);
Не помню чье это решение, но идея хорошая! :)
Пантелеев Иван (2005-09-03 21:53:00) [6]psa247 © (03.09.05 13:06) [15]
Знаю - читал.
Но ты умеешь различать поверх всех окон и передача фокуса?
Короче - это не то!
psa247 (2005-09-03 13:06:00) [7]Элементарно, Ватсон!(с)
Пользуйтесь поиском
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1125314385&n=5
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1124876130&n=5
Пантелеев Иван (2005-09-03 12:02:00) [8]А почему программа будет терять фокус?
Если у меня открыто 2 приложения, то одно из них получает фокус, так вот пока я не переключусь на другое приложение, первое фокус не потеряет.
alpet (2005-09-02 23:26:00) [9]Пантелеев Иван (02.09.05 23:08) [12]
Она в любом случае его будет терять. Так в системе заведено, и не следует этот порядок менять. Разберись с десктопами, если уж на бессмысленные эксперименты потянуло. Могу даже дать прототип одной функции:
BOOL SwitchDesktop(
HDESK hDesktop
);
Пантелеев Иван (2005-09-02 23:08:00) [10]Она у меня и так на переднем плане, тут дело именно в потере фокуса приложением
Alexander Panov (2005-09-02 22:57:00) [11]но для твоей задачи решение выглядит тривиальным(на первый взгляд).
Все, что нужно, это окно твоей программы пересылать на передний план.
Почему бы это не делать по таймеру, например, раз в 10мс?
Alexander Panov (2005-09-02 22:55:00) [12]Пантелеев Иван (02.09.05 22:48) [9]
> Alexander Panov © (02.09.05 21:48) [6]
А нет конкретного кода?
А то пока найдёшь - так целая вечность пройдёт.
Так мне тоже надо искать. Каждая нестандартная задача требует поиска ее решения.
В том числе иногда и нетривиального поиска в MSDN, порой не один час.
Пантелеев Иван (2005-09-02 22:48:00) [13]> alpet © (02.09.05 21:56) [7]
Всё что нужно я уже сделал, теперь дело за малым.
> Alexander Panov © (02.09.05 21:48) [6]
А нет конкретного кода?
А то пока найдёшь - так целая вечность пройдёт.
> Anatoly Podgoretsky © (02.09.05 21:59) [8]
Плохая шутка, да и не к месту.
Anatoly Podgoretsky (2005-09-02 21:59:00) [14]Win+L
alpet (2005-09-02 21:56:00) [15]Пантелеев Иван (01.09.05 17:54)
Тебе надо не окна блокировать, а доступ к пользовательскому десктопу. Это так просто по подсказке с форума, нормально сделать не получится. Надо книжки соответсвующие почитать, или MSDN.
Alexander Panov (2005-09-02 21:48:00) [16]Пантелеев Иван (02.09.05 21:35) [5]
Почитай про z-index в MSDN, например.
Про таймеры.
Про функции работы с окнами. Например, про ShowWindow.
Пантелеев Иван (2005-09-02 21:35:00) [17]wal © (02.09.05 09:58) [4]
Может ты ничего не путаешь, но меня интересует такой вопрос:
Сайт называется "Мастера DELPHI", так вот, какие же это "Мастера", которые ни чем не могут помочь, а только поясничают!
Или может как уже говорилось ранее:
> Может мастера не те?
Помогите в решении вопроса.
wal (2005-09-02 09:58:00) [18]
> просто моя программа служит для блокировки компьютера от
> посторонних.
> [D7, WinXP]
Или я что-то путаю, или ХР и без всяких посторонних программ компьютер блокировать умеет.
С уважением.
Котик Бегемотик (2005-09-02 09:21:00) [19]Уважаемый - послушайте мастера :)
"В корзину" !!!
ЗЫ: А может она и от просмотрщика процессов прячеться :))))
Пантелеев Иван (2005-09-01 20:45:00) [20]Ну зачем же так сразу, просто моя программа служит для блокировки компьютера от посторонних. И при попытке переключиться на другую программу во время работы моей, мне нужно чтобы она не теряла фокуса. Там не очень трудный код. Но чего-то я его подзабыл. Сли не трудно - покажите.