Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-1129623344
V-A-V
2005-10-18 12:15
2005.11.06
TreeView


8-1118530099
VoloSoft
2005-06-12 02:48
2005.11.06
Надо перехватить PC-Speaker


1-1129708560
kot1110
2005-10-19 11:56
2005.11.06
Unit-тестирование


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


14-1129564817
syte_ser78
2005-10-17 20:00
2005.11.06
Delphi 5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский