Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт авг 21, 2018 19:20

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: пример работы с callback вызовом
СообщениеДобавлено: Сб июл 25, 2009 21:49 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4926
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
вот, ловим комбинации 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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 26, 2009 13:45 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
То же самое и с мышой проделать можно?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 27, 2009 16:47 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4926
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
MrYuran писал(а):
То же самое и с мышой проделать можно?

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 01, 2009 23:25 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4926
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
еще один маленький пример:
\ 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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 03, 2009 22:06 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4926
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
еще один маленький примерчик
\ 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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB