Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Вниз

Получение клавиатурного фокуса   Найти похожие ветки 

 
Diamond Cat   (2003-04-21 02:04) [0]

Неужели никак не возможно (в ХР и 2000) переключить фокус на совое окно
все функции типа
BringWindowToTop(hwnd);
setactivewindow(hwnd);
SetForegroundWindow(hwnd);
setfocus(...
не срабатывают, функция SwitchToThisWindow(hwnd,0)не может сработать из-за того что у программы нет закладки в панели задач.
Как еще можно попытаться переключить фокус на свое окно.


 
Suntechnic   (2003-04-21 02:57) [1]

Известная "фишка" в Win 2000. Посмотри MSDN Q97925. Там упоминается как минимум 2 способа:
1) Через AttachThreadInput()
2) поиграться с SystemParametersInfo, а именное с параметром SPI_SETFOREGROUNDLOCKTIMEOUT


 
DVM   (2003-04-21 10:25) [2]

function ForceForegroundWindow(hwnd: THandle): Boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
begin
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

if GetForegroundWindow = hwnd then Result := True
else
begin
// Windows 98/2000 doesn"t want to foreground a window when some other
// window has keyboard focus

if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
(Win32MinorVersion > 0)))) then
begin
// Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
// Converted to Delphi by Ray Lischner
// Published in The Delphi Magazine 55, page 16

Result := False;
ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
begin
// Code by Daniel P. Stasinski
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
end;

Result := (GetForegroundWindow = hwnd);
end;
end; { ForceForegroundWindow }





 
Diamond Cat   (2003-04-21 15:02) [3]

Спасибо большое, все работает нормально. а я уж было отчаялся


 
Diamond Cat   (2003-04-21 15:10) [4]

Ан нет, работает да не совсем, вроде как переключается на мое окно, да вот обрабатывать клавиатуру не хочет


 
Diamond Cat   (2003-04-21 15:14) [5]

И всетаки она вертится, все работает, просто у меня был в продолжении кусок кода который я забыл закоментировать.
Извините за лишнюю писАнину :о)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.126 c
3-60058
BigVova
2003-05-27 10:55
2003.06.19
права юзеру через роль не получается


3-60072
Kapitan
2003-05-28 16:59
2003.06.19
сообщение: поле ХХХ должно иметь значение


3-60020
vajo
2003-05-27 14:53
2003.06.19
TQuery


9-60008
fsn
2002-12-19 01:04
2003.06.19
DELPHI X


14-60418
remiG
2003-06-03 14:18
2003.06.19
Просто небольшие сомнения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский