powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как вернуть фокус приложению программно С++ Builder?
7 сообщений из 7, страница 1 из 1
Как вернуть фокус приложению программно С++ Builder?
    #34945098
Giker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравсвуйте. Помогите пожалуйста, проблема вот какая. Мое приложение запускается при загрузке системы, для этого я разместил ярлык в папке "Автозапуск". После старта основного окно приложения запускается в этом приложении окно с прогресс баром. Но пока идет прогресс бар, в системе запускается NetOP, он хоть и сворачивается в трей но забирает у моего приложения фокус. Я пытался по таймеру вернуть приложению фокус,
FormWhithPB->SetFocus();
но он почему то не возвращается, а возвращается только после нажатия ALT+TAB, что не допустимо.
Помогите. Как быть?
...
Рейтинг: 0 / 0
Как вернуть фокус приложению программно С++ Builder?
    #34946098
Фотография Tshamіl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GikerЗдравсвуйте. Помогите пожалуйста, проблема вот какая. Мое приложение запускается при загрузке системы, для этого я разместил ярлык в папке "Автозапуск". После старта основного окно приложения запускается в этом приложении окно с прогресс баром. Но пока идет прогресс бар, в системе запускается NetOP, он хоть и сворачивается в трей но забирает у моего приложения фокус. Я пытался по таймеру вернуть приложению фокус,
FormWhithPB->SetFocus();
но он почему то не возвращается, а возвращается только после нажатия ALT+TAB, что не допустимо.
Помогите. Как быть?
Ну вопервых, я бы советовал для автозапуска программу прописывать в реестр, например вот сюда -
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
или

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
в первом случае программа будет запускатся из под конкретного пользователя, во втором случае, на локальной машине. Там ты сможешь ее(программу) поставить в конце списка что бы ее запуск происходил когда запустятся все служебные программы.

Во вторых, для чего тебе нужен фокус в твоей программе?
...
Рейтинг: 0 / 0
Как вернуть фокус приложению программно С++ Builder?
    #34946397
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Giker wrote:
> Здравсвуйте. Помогите пожалуйста, проблема вот какая. Мое приложение
> запускается при загрузке системы, для этого я разместил ярлык в папке
> "Автозапуск". После старта основного окно приложения запускается в этом
> приложении окно с прогресс баром. Но пока идет прогресс бар, в системе
> запускается NetOP, он хоть и сворачивается в трей но забирает у моего
> приложения фокус. Я пытался по таймеру вернуть приложению фокус,
> FormWhithPB->SetFocus();
> но он почему то не возвращается, а возвращается только после нажатия
> ALT+TAB, что не допустимо.
> Помогите. Как быть?

BringWindowToTop()
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как вернуть фокус приложению программно С++ Builder?
    #34947189
Giker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terasBringWindowToTop()
Создал обычное приложение. Положил на форму таймер (Interval=10000) в обработчике события Timer у таймера пишу
Код: plaintext
1.
2.
3.
4.
5.
6.
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        Label1->Caption = "Time!";
        BringWindowToTop(Form1->Handle);
        SetActiveWindow(Form1->Handle);
}

Запускаю приложение, перекрваю форму любым приложением (Например тем же Builder или Winamp). Time пишется, но форма не становится активной, а все так же остается на заднем фоне.
Приэтом никаких ошибок не происходит.
Что не так?
...
Рейтинг: 0 / 0
Как вернуть фокус приложению программно С++ Builder?
    #34947190
teras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Giker wrote:
>
> Запускаю приложение, перекрваю форму любым приложением (Например тем же
> Builder или Winamp). Time пишется, но форма не становится активной, а
> все так же остается на заднем фоне.
> Приэтом никаких ошибок не происходит.
> Что не так?

Если ничего не поменялось - это фича VCL. У Form1 на самом деле есть
владелец - его и надо дергать. Я правда плохо помню как (давно VCL не
пользуюсь) - выцепить через TApplication или просто взять
TForm1.Owner/Parent. За имена уже тоже не ручаюсь ;-)
На крайний случай - GetWindow(Form1->Handle, GW_OWNER); Если я прав,
должно возвращать ненулевое значение.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как вернуть фокус приложению программно С++ Builder?
    #34947200
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
terasвыцепить через TApplication Application->Handle

Вобще, такие вопросы лучше в дельфи задавать. К языку это не относится, тут чисто по архитектуре VCL
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как вернуть фокус приложению программно С++ Builder?
    #38226083
Я долго мучился с похожей задачей, поэтому скину кусок кода, может выручит кого-то.
Задача - открыть файл программно в блокноте, затем вынести блокнот НА ПЕРЕДНИЙ ПЛАН (ФОКУС НА ПЕРЕДНИЙ ПЛАН)
(pchFilePath - путь к txt-файлу)

Код: plaintext
1.
2.
//простой вариант открытия, в этом случае мы не получаем ID процесса, а значит файл откроется, но окно на передний план не вынесется
ShellExecute(hFind, "open", "NOTEPAD", pchFilePath, NULL, SW_SHOWNORMAL);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//а вот расширенный вариант открытия с получением ID системного процесса
SHELLEXECUTEINFO shellExInfo;
shellExInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shellExInfo.fMask = SEE_MASK_HOTKEY;
shellExInfo.hwnd = NULL;
shellExInfo.lpVerb = "open";
shellExInfo.lpFile = "c:\\windows\\notepad.exe";
shellExInfo.lpParameters = pchFilePath;
shellExInfo.lpDirectory = NULL;
shellExInfo.nShow = SW_SHOW;
shellExInfo.hInstApp = NULL;
ShellExecuteEx(&shellExInfo);//запустить процесс
GetProcessId(shellExInfo.hProcess);//извлечь ID процесса
ShowWindow(shellExInfo.hProcess, SW_SHOWNA);//вынести окно блокнота на передний план
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как вернуть фокус приложению программно С++ Builder?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]