이 내용은 2004/04/23 기준으로 쓰여졌습니다. 최신 내용은 본가에서 얻으실 수 있습니다.
차례
개요
WM_SAKURAAPI 를 Embryo에 송신하는 것으로써, 임의의 외부 프로세스가 Embryo를 제어하거나 프로세스 내부의 정보를 Low cost하게 확실히 얻을 수가 있습니다.
WM_SAKURAAPI 는 RegisterWindowMessage API 에 "Sakura" 라고 하는 캐릭터 라인을 건네주는 것으로 정의 됩니다.
WM_SAKURAAPI = RegisterWindowMessage("Sakura"); SAKURA API 가 사용하는 윈도우 메세지는 WM_SAKURAAPI 만으로, 구체적인 커멘드는 wParam 및 lParam 으로 건네받습니다.
wParam 0-127 는 카테고리 EXECUTE 입니다. Embryo는 지시받은 커멘드를 실행합니다.
wParam 128-255 는 카테고리 GET 입니다. Embryo는 요구된 데이터를 클라이언트에 답신합니다.
wParam 256-384 는 카테고리 NOTIFY 입니다. Embryo는 이벤트를 받습니다.
API 일람
- EXECUTE
SA_EXECUTEREMAKEMENU 0 SA_EXECUTEREWRITEFMO 1 SA_EXECUTEWINDOWSTATESWITCH 2 SA_EXECUTERELOADSHIORI 3 SA_EXECUTENOTIFYOTHERGHOSTNAME 4
- GET
SA_GETHEADCOLLISIONRECTSAKURA 128 SA_GETFACECOLLISIONRECTSAKURA 129 SA_GETBUSTCOLLISIONRECTSAKURA 130 SA_GETCENTERPOINTSAKURA 131 SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA 132 SA_GETHEADCOLLISIONRECTKERO 133 SA_GETFACECOLLISIONRECTKERO 134 SA_GETBUSTCOLLISIONRECTKERO 135 SA_GETCENTERPOINTKERO 136 SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO 137 SA_GETPROCESSID 138 SA_GETSHAREDMEMORY 139 SA_GETGHOSTSTATE 140
- NOTIFY
SA_NOTIFYEVENT 256
SAKURA API/1.0
SA_EXECUTEREMAKEMENU
인수
wParam = 0
lParam = n/a
pop-up menu를 재구축. 기동중에 파일 구성이나 디렉토리 구성이 변화해도 Embryo 의 메뉴 트리는 그것을 즉석에서 반영하지 않지만, 이 커맨드를 보내는 것으로 리로드를 지시 할 수 있다.
SA_EXECUTEREWRITEFMO
인수
wParam = 1
lParam = n/a
FMO (File Mapping Object - SpecMemoryObject 참조) 의 rewrite.
SA_EXECUTENOTIFYOTHERGHOSTNAME
인수
wParam = 4
lParam = n/a
NOTIFY OtherGhostname을 실행.
SAKURA API/1.1
SA_GET????COLLISIONRECTSAKURA
- SA_GETHEADCOLLISIONRECTSAKURA
인수
wParam = 128
lParam = 아래 설명
- SA_GETFACECOLLISIONRECTSAKURA
인수
wParam = 129
lParam = 아래 설명
- SA_GETBUSTCOLLISIONRECTSAKURA
인수
wParam = 130
lParam = 아래 설명
현재 표시되어 있는 sakura 측 표면의 머리 부분, 얼굴, 가슴 판정 영역을 rect 좌표값으로 돌려준다.
lParam
- 0 left
- 1 top
- 2 right
- 3 bottom
SA_GETCENTERPOINTSAKURA
인수
wParam = 131
lParam = 0 - 1
현재 표시되어 있는 sakura 측 표면의 중심 x 좌표 및 y 좌표를 좌표값으로 돌려준다.
lParam
- 0 centerx
- 1 centery
SA_GET????COLLISIONRECTKERO
- SA_GETHEADCOLLISIONRECTKERO
인수
wParam = 133
lParam = SA_GET????COLLISIONRECTSAKURA 참조
- SA_GETFACECOLLISIONRECTKERO
인수
wParam = 134
lParam = SA_GET????COLLISIONRECTSAKURA 참조
- SA_GETBUSTCOLLISIONRECTKERO
인수
wParam = 135
lParam = SA_GET????COLLISIONRECTSAKURA 참조
현재 표시되어 있는 kero 측 표면의 머리 부분, 얼굴, 가슴 판정 영역을 rect 좌표값으로 돌려준다. lParam 의 사양은 128 (SA_GET????COLLISIONRECTSAKURA) 과 같다.
SA_GETCENTERPOINTKERO
인수
wParam = 136
lParam = 0 - 1
현재 표시되어 있는 kero 측 표면의 중심 x 좌표 및 y 좌표를 좌표값으로 돌려준다.
lParam
- 0 centerx
- 1 centery
SA_GETGHOSTSTATE
인수
wParam = 140
lParam = n/a
고스트의 현재의 상태를 돌려준다. 반환값은 다음과 같은 의미를 가진다.
- result
- GS_NONE 0
- 이벤트 없음, 대기 상태
- GS_TALKING 1
- 뭔가 말하고 있다
- GS_TIMECRITICALSESSION 2
- 타임 위기 세션
- GS_NONE 0
SAKURA API/1.2
SAKURA API/1.2 는 절대 버섯 영역(AKF; Absolute Kinoko Field - 버섯 발생 영역)을 취득하기 위한 리퀘스트입니다.
SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA
인수
wParam = 132
lParam = 0 - 1
현재 표시되어 있는 sakura 측 표면의 절대 버섯 영역 중심 좌표의 x 좌표 및 y 좌표를 좌표값으로 돌려준다.
lParam
- 0 kinoko.centerx
- 1 kinoko.centery
SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO
인수
wParam = 137
lParam = 0 - 1
현재 표시되어 있는 kero 측 표면의 절대 버섯 영역 중심 좌표의 x 좌표 및 y 좌표를 좌표값으로 돌려준다. lParam 의 사양은 SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA 와 같다.
SAKURA API/1.3
SAKURA API/1.3 은 Sakura 에의 이벤트 통지를 실현하기 위한 리퀘스트입니다.
SA_GETPROCESSID
인수
wParam = 138
lParam = n/a
Sakura 프로세스의 프로세스 ID를 돌려줍니다.
SA_GETSHAREDMEMORY
인수
wParam = 139
lParam = -1 ~ 7
Sakura 프로세스 공간내에 항상 존재하는 8192 바이트의 정적 메모리를 가리키는 포인터를 돌려줍니다. 메모리는 9개의 슬롯이 존재(8192 *9)해, lParam의 값으로 각 슬롯의 포인터값을 취득할 수 있습니다.
외부 프로세스는 이상 2가지의 정보를 이용해 Sakura 에 이벤트를 통지합니다. 구체적으로는, 이벤트를 통지하고 싶은 프로세스는 우선 SA_GETPROCESSID 로 Process ID 를 얻어, 그것을 OpenProcess 해, SA_GETSHAREDMEMORY 로 얻은 포인터에 대해서 WriteProcessMemory로 필요한 정보를 기입해, 그 후 다음과 같이 정의 되는 이벤트 메세지를 Sakura 에게 보냅니다. 이벤트를 수신한 Sakura 는 이벤트를 인식 함과 동시에 SHAREDMEMORY 의 각 슬롯으로부터 정보를 꺼내, 적절한 동작(주로 SHIORI 에의 이벤트 통지)을 합니다.
-1 의 슬롯은 많은 경우 특수한 의미를 가집니다. 예를 들면 SAKURA API/1.3 을 SHIORI/2.2 의 이벤트 통지로서 사용하는 경우, 슬롯 0∼7 은 각각 Reference0∼7 으로 대응하며, 슬롯 -1 은 이벤트 식별자로서 사용됩니다.
SA_NOTIFYEVENT
인수
wParam = 256
lParam = n/a
이벤트 발생을 Sakura 에 통지합니다. 이 메세지는 이벤트가 발생했다고 하는 이외 어떤 정보도 가지지 않습니다. 송신자는 이 메세지를 보내기 전에 반드시 SHAREDMEMORY 에 적절한 값을 세트해 두지 않으면 안됩니다.
SAKURA API/1.4
SA_EXECUTEWINDOWSTATESWITCH
인수
wParam = 2
lParam = n/a
최소화를 한다. 이미 최소화 상태였던 경우에는 복원한다.
SAKURA API/1.5
SA_EXECUTERELOADSHIORI
인수
wParam = 3
lParam = n/a
현재 고스트의 Shiori 를 다시 로드한다.
