Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизFocus Найти похожие ветки
← →
Пантелеев Иван (2005-09-01 17:54) [0]Как программно проверить потерю программой фокуса, и, если такое случилось, то передать фокус обратно программе.
← →
Игорь Шевченко © (2005-09-01 17:58) [1]В корзину такую программу.
← →
Пантелеев Иван (2005-09-01 20:45) [2]Ну зачем же так сразу, просто моя программа служит для блокировки компьютера от посторонних. И при попытке переключиться на другую программу во время работы моей, мне нужно чтобы она не теряла фокуса. Там не очень трудный код. Но чего-то я его подзабыл. Сли не трудно - покажите.
← →
Котик Бегемотик (2005-09-02 09:21) [3]Уважаемый - послушайте мастера :)
"В корзину" !!!
ЗЫ: А может она и от просмотрщика процессов прячеться :))))
← →
wal © (2005-09-02 09:58) [4]
> просто моя программа служит для блокировки компьютера от
> посторонних.
> [D7, WinXP]
Или я что-то путаю, или ХР и без всяких посторонних программ компьютер блокировать умеет.
С уважением.
← →
Пантелеев Иван (2005-09-02 21:35) [5]wal © (02.09.05 09:58) [4]
Может ты ничего не путаешь, но меня интересует такой вопрос:
Сайт называется "Мастера DELPHI", так вот, какие же это "Мастера", которые ни чем не могут помочь, а только поясничают!
Или может как уже говорилось ранее:
> Может мастера не те?
Помогите в решении вопроса.
← →
Alexander Panov © (2005-09-02 21:48) [6]Пантелеев Иван (02.09.05 21:35) [5]
Почитай про z-index в MSDN, например.
Про таймеры.
Про функции работы с окнами. Например, про ShowWindow.
← →
alpet © (2005-09-02 21:56) [7]Пантелеев Иван (01.09.05 17:54)
Тебе надо не окна блокировать, а доступ к пользовательскому десктопу. Это так просто по подсказке с форума, нормально сделать не получится. Надо книжки соответсвующие почитать, или MSDN.
← →
Anatoly Podgoretsky © (2005-09-02 21:59) [8]Win+L
← →
Пантелеев Иван (2005-09-02 22:48) [9]> alpet © (02.09.05 21:56) [7]
Всё что нужно я уже сделал, теперь дело за малым.
> Alexander Panov © (02.09.05 21:48) [6]
А нет конкретного кода?
А то пока найдёшь - так целая вечность пройдёт.
> Anatoly Podgoretsky © (02.09.05 21:59) [8]
Плохая шутка, да и не к месту.
← →
Alexander Panov © (2005-09-02 22:55) [10]Пантелеев Иван (02.09.05 22:48) [9]
> Alexander Panov © (02.09.05 21:48) [6]
А нет конкретного кода?
А то пока найдёшь - так целая вечность пройдёт.
Так мне тоже надо искать. Каждая нестандартная задача требует поиска ее решения.
В том числе иногда и нетривиального поиска в MSDN, порой не один час.
← →
Alexander Panov © (2005-09-02 22:57) [11]но для твоей задачи решение выглядит тривиальным(на первый взгляд).
Все, что нужно, это окно твоей программы пересылать на передний план.
Почему бы это не делать по таймеру, например, раз в 10мс?
← →
Пантелеев Иван (2005-09-02 23:08) [12]Она у меня и так на переднем плане, тут дело именно в потере фокуса приложением
← →
alpet © (2005-09-02 23:26) [13]Пантелеев Иван (02.09.05 23:08) [12]
Она в любом случае его будет терять. Так в системе заведено, и не следует этот порядок менять. Разберись с десктопами, если уж на бессмысленные эксперименты потянуло. Могу даже дать прототип одной функции:
BOOL SwitchDesktop(
HDESK hDesktop
);
← →
Пантелеев Иван (2005-09-03 12:02) [14]А почему программа будет терять фокус?
Если у меня открыто 2 приложения, то одно из них получает фокус, так вот пока я не переключусь на другое приложение, первое фокус не потеряет.
← →
psa247 © (2005-09-03 13:06) [15]Элементарно, Ватсон!(с)
Пользуйтесь поиском
http://delphimaster.net/view/4-1125314385/
http://delphimaster.net/view/4-1125314385/
← →
Пантелеев Иван (2005-09-03 21:53) [16]psa247 © (03.09.05 13:06) [15]
Знаю - читал.
Но ты умеешь различать поверх всех окон и передача фокуса?
Короче - это не то!
← →
psa247 © (2005-09-04 09:31) [17]Делай 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);
Не помню чье это решение, но идея хорошая! :)
← →
psa247 © (2005-09-04 09:31) [18]Удалено модератором
← →
Пантелеев Иван (2005-09-04 19:53) [19]Код компилируется бкз проблем, но работать не хочет!
В чём проблема?
← →
psa247 © (2005-09-04 20:39) [20]Приведи код.
← →
Пантелеев Иван (2005-09-05 00:33) [21]А чё тут приводить я просто твой код кидаю в таймер, а что не правильно?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.039 c