WiresharkでLuaスクリプトを使った GUI 表示の方法

# WiresharkでLuaスクリプトを使った GUI 表示の方法

WiresharkでLuaスクリプトを使用してメニュー項目を追加したりダイアログの表示を行ったりする事が出来ます。


## メニュー項目の追加

メニューバーに新規メニューを追加する。

```lua
function menu_func()

	debug("menu_func calling!")

end

-- Register a menu item in one of the main menus.
register_menu("Menu item name", menu_func, MENU_TOOLS_UNSORTED)
```

上記のコードでメニューバーのTools直下に_Menu item name_と表示されたメニュー項目を追加する事が出来ます。
これにより_Menu item name_を選択する度に_menu_func()_を呼び出す事が出来ます。


## register_menu(name, action [,group])

### Description 
メインメニューにメニュー項目を追加する

### Parameters 

|引数名        |型の種類  |備考                                             |
|--------------|----------|-------------------------------------------------|
|name          |string    |メニューのラベル名                               |
|action        |function  |メニューが押された時に呼び出す関数               |
|group(option) |MenuGroup |メニューを追加する場所(default:MENU_STAT_GENERIC)|

#### group(option) 
|menu group               | destination menu                 |備考   				|
|-------------------------|----------------------------------|----------------------|
|MENU_STAT_UNSORTED       |Statistics                        |統計					|
|MENU_STAT_GENERIC        |Statistics (first section)        |？					|
|MENU_STAT_CONVERSATION   |Statistics/Conversation List      |？					|
|MENU_STAT_ENDPOINT       |Statistics/Endpoint List          |？					|
|MENU_STAT_RESPONSE       |Statistics/Service Response Time  |統計/サービス応答時間	|
|MENU_STAT_TELEPHONY      |Telephony                         |テレフォニー			|
|MENU_ANALYZE             |Analyze                           |？					|
|MENU_ANALYZE_CONVERSATION|Analyze/Conversation Filter       |？					|
|MENU_TOOLS_UNSORTED      |Tools                             |ツール				|

備考は日本語版で追加される場所を示しています。
「？」になっている部分は表示がされなかったパラメータです。
例えば MENU_ANALYZEは「分析」の場所に追加されていそうでしたが追加されませんでした。

## ダイアログの追加

新規ダイアログを追加する。

```lua
function dialog_func(Data1, Data2, Data3)

	debug("Data1=" .. Data1 .. "(" .. type(Data1) .. ")")
	debug("Data2=" .. Data2 .. "(" .. type(Data2) .. ")")
	debug("Data3=" .. Data3 .. "(" .. type(Data3) .. ")")

end

-- 
new_dialog("Dialog Title", dialog_func,"入力1", "入力2", "入力3")
```
上記のコードでダイアログを呼び出すことが出来る。
ダイアログにはパラメータを入力できる項目を任意数用意出来る。
これにより任意の値を引数にして_dialog_func_を呼び出す事が出来る。

## new_dialog(title, action, field1 [,field2 ...])

### Description 
ダイアログの表示、ダイアログには OK と Cancel のボタンが含まれる

### Parameters 

|引数名        |型の種類 |備考                                           |
|--------------|---------|-----------------------------------------------|
|title         |string   |ダイアログのタイトル                           |
|action        |function |ダイアログのOKボタンが押された時に呼び出す関数 |
|field1        |string   |ダイアログのフィールドラベル1(_必須_)          |
|[,field2 ...] |string   |ダイアログのフィールドラベル2～(_任意_)        |



## Example

メニューボタンを押したらダイアログが表示するサンプル

```lua
function dialog_func(Data1, Data2, Data3)

	debug("Data1=" .. Data1 .. "(" .. type(Data1) .. ")")
	debug("Data2=" .. Data2 .. "(" .. type(Data2) .. ")")
	debug("Data3=" .. Data3 .. "(" .. type(Data3) .. ")")

end

-- show this dialog when the user select "Dialog Open" from the Tools menu
function begin_dialog_menu()

	new_dialog("Dialog Title", dialog_func, "データ1", "データ2", "データ3")

end

-- Register a menu item in one of the main menus.
register_menu("Open Dialog", begin_dialog_menu, MENU_TOOLS_UNSORTED)
```

これを行うことで好きな時に任意の関数を呼び出す事が出来るので色々使い道はありそうです(主にデバッグとか)


[1]: http://wiki.wireshark.org/LuaAPI/GUI