Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
1-1099580627
3APA3A
2004-11-04 18:03
2004.11.21
Canvas не обновляется...


14-1099307045
Holy
2004-11-01 14:04
2004.11.21
Посоветуйте CVS...


14-1099678595
Ломброзо
2004-11-05 21:16
2004.11.21
Расскажите про Астану?


3-1098849822
КаПиБаРа
2004-10-27 08:03
2004.11.21
Не отображаются строки в DBGrid


4-1097509885
TeNY
2004-10-11 19:51
2004.11.21
Как установавить саретку в TMemo в нужное положение




   Наверх