Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.188 c
14-1099575770
DelphiN!
2004-11-04 16:42
2004.11.21
Сокеты на винде тормозят


1-1100087739
Leksiy
2004-11-10 14:55
2004.11.21
Перебор каталогов


14-1099480482
AlexR
2004-11-03 14:14
2004.11.21
Работа с dll.


14-1099564888
Трафарет
2004-11-04 13:41
2004.11.21
Можно ли создать ISO образ без CD-DVD дисковода?


1-1099484746
dolphin
2004-11-03 15:25
2004.11.21
Создание курсора