Главная страница
    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.45 MB
Время: 0.012 c
7-60436
VIB
2003-04-12 11:55
2003.06.19
COM - порт


14-60380
Asrw
2003-06-02 20:47
2003.06.19
100+2 и т.д


1-60153
Shluz
2003-06-06 18:39
2003.06.19
Проект без форм....


6-60302
Kedis
2003-04-18 14:24
2003.06.19
Отправка писем


8-60281
Карелин Артем
2003-03-07 06:39
2003.06.19
Чем показать картинки в 100 мегов?





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