Форум: "WinAPI";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизПередача клавиатурногог фокуса стороннему приложению. Найти похожие ветки
← →
Falcon © (2004-10-08 15:25) [0]Вопрос много раз подымался, поэтому посьба ногами не бить и по возможности разъяснить.
Суть такова, есть стороннее приложение, которое должно постоянно иметь клавиатурный фокус, поскольку работает со считывателем штрих кода, который включается в разрыв клавиатуры.
Пробовал сделать вот так:
procedure BringWindowToForeground(pWnd: HWnd);
var
dwUserInputTimeout, dwThreadID, dwCurThreadID: DWORD;
WND_Active : HWND;
begin
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT, 0,
@dwUserInputTimeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, 0);
SetWindowPos( pWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE);
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT, 0,
@dwUserInputTimeout, 0);
WND_Active:=GetForegroundWindow;
dwThreadID := GetCurrentThreadId();
dwCurThreadID := GetWindowThreadProcessId(pWnd, nil);
AttachThreadInput(dwThreadID, dwCurThreadID, TRUE);
SetForegroundWindow(pWnd);
AttachThreadInput(dwThreadID, dwCurThreadID, FALSE);
..........
Может кто подскажет что не так?
← →
Digitman © (2004-10-08 15:33) [1]
> Может кто подскажет что не так?
а что, собссно "не так" ?
сомнения берут уже начиная с вопроса, приложение не может иметь фокус по определению, его (фокус) может иметь окно
← →
DVM © (2004-10-08 17:42) [2]
>
> Falcon © (08.10.04 15:25)
SwitchToThisWindow()
P.S. Яндекс очень хорошо знает где взять эту функцию.
← →
Falcon © (2004-10-08 18:04) [3]"Не так" то, что все работает пока окно моей пограммы развернуто. Если свернуто - то вижу только мигание в таск баре окна той самой программы которой нужно передать фокус.
Про окна и приложения Вы конечно же правы.
> SwitchToThisWindow()
>
> P.S. Яндекс очень хорошо знает где взять эту функцию.
Это я пробовал. Имею только мигание заголовка в таскбаре. Без подключения к другому потоку у меня ничего не получилось...
← →
DVM © (2004-10-08 18:51) [4]
> Falcon © (08.10.04 18:04) [3]
http://www.swissdelphicenter.ch/torry/showcode.php?id=261
Проверено,работает на все 100%.
А насчет мигания,может дело во втором параметре?
Для того, чтобы установить фокус на любое окно, используйте функцию SwitchToThisWindow:
procedure SwitchToThisWindow(wnd : HWND; bRestore: BOOL); stdcall;
external "user32.dll" name "SwitchToThisWindow";
wnd
описатель окна, которому следует передаь фокус;
bRestore
TRUE, если нужно восстановить минимизированное окно.
Чтобы использовать эту функцию, просто скопируйте её определение, данное выше, в любое место программы вне основного кода.
← →
GanibalLector © (2004-10-08 21:32) [5]поскольку работает со считывателем штрих кода, который включается в разрыв клавиатуры.
Выкинь эту гадость!!!Или обратись в ту организацию где приобретал и поменяй шнурок на комовский.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c