Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.061 c
1-1129290248
Lirik
2005-10-14 15:44
2005.11.06
Запретить двигать формой


14-1129125684
Гость из прошлого
2005-10-12 18:01
2005.11.06
Помогите рассортировать языки програмирования


6-1121948027
chili
2005-07-21 16:13
2005.11.06
Возникла задача, нужно написать систему учета трафика...


9-1118910515
Xenon
2005-06-16 12:28
2005.11.06
Вопросик по PD


14-1129639182
vecna
2005-10-18 16:39
2005.11.06
может кто-нить сталкивался и лечил такой косяк: