|
2D-программирование Вопросы, касающиеся двумерного программирования |
02.01.2013, 18:50
|
#16
|
|
Ответ: Закрытие окна (крестик)
Либа лежит в БлицМаксе, в модуле pub.stdc
Скомпиль исходники любым сишным компилятором в режиме DLL.
|
|
|
08.01.2013, 18:12
|
#17
|
AnyKey`щик
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Закрытие окна (крестик)
Всмысле в языке БлицМакс? Всю папку проверил на наличие pub.stdc, нашёл лишь pub.mod, и то папку.
|
(Offline)
|
|
09.01.2013, 02:52
|
#18
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Закрытие окна (крестик)
Сообщение от Gamemaker1
Всмысле в языке БлицМакс? Всю папку проверил на наличие pub.stdc, нашёл лишь pub.mod, и то папку.
|
Может это?
\BlitzMax\mod\pub.mod\stdc.mod
|
|
(Offline)
|
|
09.01.2013, 03:27
|
#19
|
|
Ответ: Закрытие окна (крестик)
Я то думал, что ты с БМаксом на "ты"
Nex все правильно сказал.
|
|
|
09.01.2013, 11:55
|
#20
|
AnyKey`щик
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Закрытие окна (крестик)
Да нет, мне у него синтаксис не понравился. Сейчас установлю С++, а то недавно удалил.
|
(Offline)
|
|
09.01.2013, 11:56
|
#21
|
AnyKey`щик
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Закрытие окна (крестик)
Кстати, что-то подобное нашёл сегодня в БлицПлюс, но сам файл искать надо.
|
(Offline)
|
|
09.01.2013, 14:07
|
#22
|
|
Ответ: Закрытие окна (крестик)
Можешь еще погуглить : Standatd C Library
|
|
|
12.01.2013, 21:44
|
#23
|
AnyKey`щик
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Закрытие окна (крестик)
Нагуглил ссылочку, осталось лишь найти подходящую из этих DLL:
---Ссылка---
|
(Offline)
|
|
16.01.2013, 02:31
|
#24
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Закрытие окна (крестик)
AutoIt
|
(Offline)
|
|
16.01.2013, 06:08
|
#25
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Ответ: Закрытие окна (крестик)
да можно обойтись только средствами winapi, хохо :D
Const PAGE_EXECUTE_READWRITE% = 64
Const GWL_WNDPROC% = -4
Const GWL_USERDATA% = -21
;
; хендл окна и адрес его функции обработки сообщений
;
Global BlitzWindowID% = SystemProperty( "AppHWND" )
Global BlitzWindowProc% = GetWindowLong( BlitzWindowID, GWL_WNDPROC )
;
; создаем банк, хранящий адрес родной функции окна и флаг
; который будет сигнализировать о получении сообщения закрытия окна WM_CLOSE
;
Global CloseHandlerData% = CreateBank( 5 )
PokeInt( CloseHandlerData, 0, BlitzWindowProc )
PokeByte( CloseHandlerData, 4, False )
;
; устанавливаем окну этот банк как пользовательские данные
; для передачи их в новую оконную функцию
;
SetWindowLong2( BlitzWindowID, GWL_USERDATA, CloseHandlerData )
;
; получаем адреса функций, необходимых для работы оконной функции
;
Local User32Module% = GetModuleHandle( "USER32.DLL" )
Local GetWindowLongAddress% = GetProcAddress( User32Module, "GetWindowLongA" )
Local CallWindowProcAddress% = GetProcAddress( User32Module, "CallWindowProcA" )
;
; создаем банк, хранящий машинный код новой функции обработки сообщений
; эта функция обрабатывает сообщение WM_CLOSE, а остальные отдает родной функции
;
; выглядит следующим образом:
;
; Function CloseHandlerProc%( WindowID%, MessageID%, WParam%, LParam% )
; Local CloseHandlerData% = GetWindowLongA( WindowID, GWL_USERDATA )
; If MessageID <> WM_CLOSE Then
; Return CallWindowProcA( PeekInt( CloseHandlerData, 0 ), WindowID, MessageID, WParam, LParam )
; End If
; PokeByte( CloseHandlerData, 4, True )
; Return 0
; End Function
;
Global CloseHandlerProc% = CreateBank( 92 )
PokeInt( CloseHandlerProc, 0, $0424448B )
PokeInt( CloseHandlerProc, 4, $8908EC83 )
PokeInt( CloseHandlerProc, 8, $44C72404 )
PokeInt( CloseHandlerProc, 12, $FFEB0424 )
PokeInt( CloseHandlerProc, 16, ( ( GetWindowLongAddress And $FF ) Shl 24 ) Or $B8FFFF )
PokeInt( CloseHandlerProc, 20, $FF000000 Or ( ( GetWindowLongAddress Shr 8 ) And $FFFFFF ) )
PokeInt( CloseHandlerProc, 24, $247C83D0 )
PokeInt( CloseHandlerProc, 28, $32741008 )
PokeInt( CloseHandlerProc, 32, $EC83008B )
PokeInt( CloseHandlerProc, 36, $24048914 )
PokeInt( CloseHandlerProc, 40, $1824448B )
PokeInt( CloseHandlerProc, 44, $04244489 )
PokeInt( CloseHandlerProc, 48, $1C24448B )
PokeInt( CloseHandlerProc, 52, $08244489 )
PokeInt( CloseHandlerProc, 56, $2024448B )
PokeInt( CloseHandlerProc, 60, $0C244489 )
PokeInt( CloseHandlerProc, 64, $2424448B )
PokeInt( CloseHandlerProc, 68, $10244489 )
PokeInt( CloseHandlerProc, 72, ( ( CallWindowProcAddress And $FFFFFF ) Shl 8 ) Or $B8 )
PokeInt( CloseHandlerProc, 76, $C2D0FF00 Or ( CallWindowProcAddress Shr 24 ) )
PokeInt( CloseHandlerProc, 80, $40C60010 )
PokeInt( CloseHandlerProc, 84, $C0310104 )
PokeInt( CloseHandlerProc, 88, $900010C2 )
;
; т.к. банк содержит исполняемый код, нужно изменить аттрибут доступа этого блока памяти на исполняемый
;
Local OldProtect% = CreateBank( 4 )
VirtualProtect2( CloseHandlerProc, 92, PAGE_EXECUTE_READWRITE, OldProtect )
FreeBank( OldProtect )
;
; устанавливаем новую функцию обработки сообщения
;
SetWindowLong2( BlitzWindowID, GWL_WNDPROC, CloseHandlerProc )
Graphics( 800, 600, 0, 2 )
Repeat
Cls()
;
; значение True или 1 означает что была попытка закрыть окно
;
If PeekByte( CloseHandlerData, 4 ) = True Then Text( 400, 300, "window close detected", True, True )
Flip()
Until KeyDown( 1 )
;
; устанавливаем блицевскому окну обратно его родную функцию для корректного завершения
;
SetWindowLong( BlitzWindowID, GWL_WNDPROC, BlitzWindowProc )
End
в функцию думаю сами оформите если потребуется
а, и соответствующий winapi.decls еще
.lib "KERNEL32.DLL"
GetModuleHandle%( Name$ ) : "GetModuleHandleA"
GetProcAddress%( Module%, Name$ ) : "GetProcAddress"
VirtualProtect2%( MemoryBank*, Size%, NewProtect%, OldProtectBank* ) : "VirtualProtect"
.lib "USER32.DLL"
GetWindowLong%( Window%, Index% ) : "GetWindowLongA"
SetWindowLong%( Window%, Index%, Value% ) : "SetWindowLongA"
SetWindowLong2%( Window%, Index%, Bank* ) : "SetWindowLongA"
|
(Offline)
|
|
15.04.2013, 15:13
|
#26
|
AnyKey`щик
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Закрытие окна (крестик)
Хмм... Не то чтобы последний способ работал).
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:03.
|