SAKURA API

任何外部進程都可以從遠程控制偽春菜,或通過發送WM_SAKURAAPI給偽春菜進程來低成本的獲取偽春菜的內部信息。
WM_SAKURAAPI被定義名為"Sakura"的窗口消息。

WM_SAKURAAPI = RegisterWindowMessage("Sakura");

SAKURA API只使用窗口消息WM_SAKURAAPI,具體命令是通過參數“wparam”和“lparam”來控制的。
控制參數“wparam 0-127”被分為EXECUTE請求。偽春菜執行指示命令。
控制參數“wparam 128-255”被分為GET請求。偽春菜返回請求的數據到客戶端。
控制參數“wparam 256-384”被分為的NOTIFY請求。偽春菜收到事件請求。

wParam列表

EXECUTE
SA_EXECUTEREMAKEMENU0
SA_EXECUTEREWRITEFMO1
SA_EXECUTEWINDOWSTATESWITCH2
SA_EXECUTERELOADSHIORI3
SA_EXECUTENOTIFYOTHERGHOSTNAME4
GET
SA_GETHEADCOLLISIONRECTSAKURA128
SA_GETFACECOLLISIONRECTSAKURA129
SA_GETBUSTCOLLISIONRECTSAKURA130
SA_GETCENTERPOINTSAKURA131
SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA132
SA_GETHEADCOLLISIONRECTKERO133
SA_GETFACECOLLISIONRECTKERO134
SA_GETBUSTCOLLISIONRECTKERO135
SA_GETCENTERPOINTKERO136
SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO137
SA_GETPROCESSID138
SA_GETSHAREDMEMORY139
SA_GETGHOSTSTATE140
NOTIFY
SA_NOTIFYEVENT256

SAKURA API/1.0

SAKURA API/1.0是處理一般EXECUTE命令的請求。

下面這個API用來重建彈出菜單。在移動外表或人格等的文件時,偽春菜的菜單樹是不符合的,但您可以直接通過發送此命令刷新菜單樹。

SA_EXECUTEREMAKEMENU / wparam = 0 / lparam = n/a


下面這個API是用來重寫FMO。僅供內部使用。

SA_EXECUTEREWRITEFMO / wparam = 1 / lparam = n/a


下面這個API的EXECUTE的NOTIFY otherghostname。

SA_EXECUTENOTIFYOTHERGHOSTNAME / wparam = 4 / lparam = n/a

SAKURA API/1.1

SAKURA API/1.1處理一般GET命令的請求。

下面這些API是用來返回head/face/bust(頭/臉/胸)的碰撞區域的主菜皮膚的矩形坐標。

SA_GETHEADCOLLISIONRECTSAKURA / wparam = 128 / lparam = 0 - 3
SA_GETFACECOLLISIONRECTSAKURA / wparam = 129 / lparam = 0 - 3
SA_GETBUSTCOLLISIONRECTSAKURA / wparam = 130 / lparam = 0 - 3
lparam說明
0左邊
1頂端
2右邊
3底部


下面這個API是用來返回當前顯示主菜皮膚的中心坐標的x和y值。

SA_GETCENTERPOINTSAKURA / wparam = 131 / lparam = 0 - 1
lparam說明
0centerx
1centery


下面這些API是用來返回head/face/bust(頭/臉/胸)的碰撞區域的使魔皮膚的矩形坐標。控制參數“lparam”的規格類似控制代碼128。

SA_GETHEADCOLLISIONRECTKERO / wparam = 133 / lparam = 0 - 3
SA_GETFACECOLLISIONRECTKERO / wparam = 134 / lparam = 0 - 3
SA_GETBUSTCOLLISIONRECTKERO / wparam = 135 / lparam = 0 - 3
lparam說明
0左邊
1頂端
2右邊
3底部


下面這個API是用來返回當前顯示使魔皮膚的中心坐標的x和y值。

SA_GETCENTERPOINTKERO / wparam = 136 / lparam = 0 - 1
lparam說明
0centerx
1centery

下面這個API是用來返回人格的當前狀態。返回值意義如下。

SA_GETGHOSTSTATE / wparam = 140 / lparam = n/a
result說明
GS_NONE0沒有事件,空閒狀態
GS_TALKING1現在談話中
GS_TIMECRITICALSESSION2time critical session

SAKURA API/1.2

SAKURA API/1.2是獲得KINOKO絕對領域(AKF)的請求。

下面這個API是用來返回當前顯示主菜皮膚KINOKO絕對領域的中心坐標的x和y值。

SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA / wparam = 132 / lparam = 0 - 1
lparam說明
0kinoko.centerx
1kinoko.centery


下面這個API是用來返回當前顯示使魔皮膚KINOKO絕對領域的中心坐標的x和y值。控制參數“lparam”的規格類似控制代碼132。

SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO / wparam = 137 / lparam = 0 - 1

SAKURA API/1.3

SAKURA API/1.3 是通知事件的請求。

下面這個API返回偽春菜的進程ID。

SA_GETPROCESSID / wparam = 138 / lparam = n/a


下面這個API返回一個指針,它指向在進程空間中永久存在的8192bytes的靜態內存區。該指針作為內存插槽存在。在內存內的插槽數目為9(8192x9bytes),你可以得到每個插槽的指針值。

SA_GETSHAREDMEMORY / wparam = 139 / lparam = -1 - 7

外部進程通知事件給偽春菜用以上所示的兩種類型的信息。具體來說,首先,希望通知事件的外部進程必須使用SA_GETPROCESSID得到進程ID。接下來,通過使用函數“openprocess”打開進程。然後,通過使用函數WriteProcessMemory向SA_GETSHAREDMEMORY獲得的指針寫入所需的資料,最後,向偽春菜發送事件定義消息。當偽春菜收到事件請求時,根據從SHAREDMEMORY的每個插槽獲取的信息識別事件並適當的運行(在此之際,偽春菜主要是通知事件給SHIORI。)。

插槽編號-1是為特殊用途使用。例如,當您使用SAKURA API/1.3通知事件給SHIORI/2.2時,插槽0-7對應於關於SHIORI規範的Reference0-7,-1用於事件的標識符。

下面這個API通知觸發事件給偽春菜。此消息除了觸發的事件無其他信息。發送者必須在發送此消息之前把SHAREDMEMORY設置正確的值。

SA_NOTIFYEVENT / wparam = 256 / lparam = n/a

SAKURA API/1.4

執行最小化。如果已經最小化,執行恢復。

SA_EXECUTEWINDOWSTATESWITCH / wparam = 2 / lparam = n/a

SAKURA API/1.5

重載當前人格的SHIORI模塊。

SA_EXECUTERELOADSHIORI / wparam = 3 / lparam = n/a

其他

FMO變更時給其他進程的通知
NOTIFY otherghostname實裝、其他使用FMO的工具製作時、一次次的定期讀入FMO進行更新檢查的話花費太高。
因此……SAKURA_API_BROADCAST_FMOUPDATE(1024)(SSP/HF3.2追加)。

#define SAKURA_API_BROADCAST_GHOSTCHANGE 1024

WM_SAKURAAPI = RegisterWindowMessage("Sakura");

SendNotifyMessage(HWND_BROADCAST,WM_SAKURAAPI,SAKURA_API_BROADCAST_GHOSTCHANGE,m_ProcID);

上述、更新FMO側

•message = Sakura API相同
•wParam = 1024
•lParam = SSP自己的進程ID

人格變化後對所有程序主窗體廣播FMO的更新通知。

#define SAKURA_API_BROADCAST_GHOSTCHANGE 1024

WM_SAKURAAPI = RegisterWindowMessage("Sakura");

int CALLBACK WindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {
switch( message ){
  case WM_SAKURAAPI:
    if ( wParam == SAKURA_API_BROADCAST_GHOSTCHANGE ) {
      if ( lParam != GetCurrentProcessId() ) {
        做些什麼;
      }
    }
}

接收側可以按更新的通知檢查。


外部連結


首頁   編輯 封鎖 差異 備份 上傳檔案 複製 變更名稱 重新載入   新建條目 一覽 搜索 最近的變更   幫助   最近更新的RSS
Last-modified: 2013-05-24 (五) 13:50:31 (2031d)