Forth
http://www.fforum.winglion.ru/

пример работы с callback вызовом
http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2219
Страница 1 из 1

Автор:  mOleg [ Сб июл 25, 2009 21:49 ]
Заголовок сообщения:  пример работы с callback вызовом

вот, ловим комбинации Ctrl+C или Ctrl+Break

\ 17.07.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ пример callback обработчика асинхронного события

os/ import.fts
os/ callback.fts

WINAPI: SetConsoleCtrlHandler KERNEL32.DLL

\ обработчик нажатия комбинации Ctrl+C
CB: CtrlHandler ( --> err )
." \bНажата комбинация: "
@ IF ." Ctrl+Break"
ELSE ." Crtl+C"
THEN CR
1 \ вернуть true
\ 0 \ если false, работа системы будет завершена
;

\ установка обработчика комбинации Ctrl+C
: init ( --> )
1 CtrlHandler SetConsoleCtrlHandler
;

init

\ дальше надо нажать комбинацию CTrl+C либо Ctrl+Break

Автор:  MrYuran [ Вс июл 26, 2009 13:45 ]
Заголовок сообщения: 

То же самое и с мышой проделать можно?

Автор:  mOleg [ Пн июл 27, 2009 16:47 ]
Заголовок сообщения: 

MrYuran писал(а):
То же самое и с мышой проделать можно?

для мыши скорее подойдет другой пример .\samples\win1.fts , хотя, вроде можно как-то это дело через хуки.

Автор:  mOleg [ Сб авг 01, 2009 23:25 ]
Заголовок сообщения: 

еще один маленький пример:
\ 01.08.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ отображение списка окон в системе

os/ import.fts
os/ callback.fts

WINAPI: EnumWindows USER32.DLL
WINAPI: GetWindowTextA USER32.DLL

CREATE buff 0x100 ALLOT

\ обработчик сообщений
CB: ~windows ( addr --> n )
DUP @ \ --> hwnd
0x100 buff ROT GetWindowTextA
*IF ." \n\rwindow: " buff SWAP TYPE THEN
1 ;

\ отобразить все именованые окна в системе.
: ~WIN ( --> ) 0 ~windows EnumWindows DROP ;

~WIN

Автор:  mOleg [ Пн авг 03, 2009 22:06 ]
Заголовок сообщения: 

еще один маленький примерчик
\ 01.08.2009 ~mOleg
\ Сopyright [C] 2009 mOleg mininoleg@yahoo.com
\ поиск идентификатора консольного окна

os/ import.fts
os/ callback.fts
os/ console.fts
stack/ add.fts

WINAPI: EnumWindows USER32.DLL
WINAPI: GetWindowTextA USER32.DLL
WINAPI: GetCurrentThreadId KERNEL32.DLL

CREATE buff 0x100 ALLOT

\ вернуть строку, идентифицирующую текущий поток
: pid>s ( --> ) GetCurrentThreadId S>D 0x10 {# #S s" thread pid = " HOLDS #> ;

0 VALUE hwnd

\ колбэк функция ищет hwnd консоли
CB: FindOwn ( addr --> flag )
@ TO hwnd
0x100 buff hwnd GetWindowTextA
buff SWAP pid>s COMPARE ;

\ определить hwnd консольного окна
\ в случае успеха hwnd хранит хэндл окна, а Own возвращает 0
\ в случае неуспеха, Own возвращает 1, а hwnd хранит мусор
: Own ( --> 0 | 1 )
pid>s ~title 40 PAUSE
0 FindOwn EnumWindows ;


\ а так можно проверить достоверность hwnd визуально
WINAPI: MoveWindow USER32.DLL
: >ps ( ?? ) D>L 1 100 200 DL> hwnd MoveWindow DROP ;
\ 20 30 >ps

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/