Главная страница
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.026 c
14-1099552719
Fay
2004-11-04 10:18
2004.11.21
Требуется программист


1-1099474994
Relaxxx
2004-11-03 12:43
2004.11.21
Как мне заполнить комбоБокс, установленными принтерами и в


1-1100091483
Ditrix
2004-11-10 15:58
2004.11.21
хранение GUI в BLOB полях


1-1099547598
InfMag
2004-11-04 08:53
2004.11.21
Запоритсая проблема с конвертом TColor а


4-1097500329
TeNY
2004-10-11 17:12
2004.11.21
Как програмно нажать кнопку Enter через SendMessage