« [Windows Mobile]Windows Mobile向けQKC 1.0 (Quick KANJI code Converter C Version 1.0)正式公開 | Main | [N810]Advanced/W-ZERO3[es]をNOKIA N810のモデムとして認識させるKernel Module »

2008.05.10

[Windows Mobile]Advanced/W-ZERO3[es]でのBluetooth PAN接続/切断支援MortScript

先日、Advanced/W-ZERO3[es]によるBluetooth PANについてエントリしましたが、ワンアクションで接続、切断できるようにするため、久しぶりにMortScriptを書いてみました。

関連エントリ:[N810]NOKIA N810とAdvanced/W-ZERO3[es]でBluetooth PAN

Bluetooth PAN切断中にこのMortScriptを起動すると接続を、接続中に起動すると切断します。(たまに動作が変なことも?)

僕はSortInchKeyで、このスクリプトをSoftKey2のダブルクリックに設定しています。

動画編集の練習とYouTubeデビューをかねて、デモを作ってみました。

前半: トグル動作の説明
後半: Bluetooth PANの確立〜NOKIA N810でのブラウジングまでの一連の動作

前半、なぜか額縁になっちゃってます。なんでだろ……。

ダウンロード

自分でも使ってますが、無保証です。

ライセンスは……そんなもんはありません。自由にしてください。

「togglebtpan.mscr」をダウンロード

インストールと使い方

前回のエントリを参照の上Bluetooth PANを設定。MortScriptのPPC版をインストールします。個別にダウンロードするようにはなっておらず、zipの中にOS別に数種類入っています。

僕はページ下部のリンクTemporaryからたどってダウンロードできるV4.11b7を使っています。

あとはスクリプトをダウンロードして実行するだけですが、実行に手間をかけていては本末転倒ですので、最も効率的な実行方法を模索してください。

前述の通り、僕はSortInchKeyで、このスクリプトをSoftKey2のダブルクリックに設定しています。

画面の解像度等に依存するため、RealWVGA化や、フォントサイズの変更などをしていると動かないと思います。

ソースコード

サブルーチン「POff」の「PowerOff」はコメントアウトしていますが、外してもいいかも?

#
# Helper script for ICS via Bluetooth PAN
#
# Use MortScript V4.11b7
#

######### Global Variable definition #########

Global(AppName, AppPath, MannerMode)

AppName = "インターネット共有"

AppPath = "\Windows\IntShrUI.exe"

MannerMode = RegRead("HKCU",\
		"\Software\Sharp\PhoneStatus",\
		"Status3")

######### Entry Point #########

Call("Main")

######### Subroutine definition #########

# メイン
Sub Main
	# インターネット共有を起動し
	# 前面に出るまで待つ
	Call("Activate")

	# Bluetooth PANの項目が現れるまで
	# タイムラグがあるので待つ
	Sleep(1000)

	# 接続が無い状況を確認
	IF(WindowText(60, 120) eq "切断完了")
		# Bluetooth PANの存在を確認
		Call("BluetoothCheck")
		# 「接続」ボタンを押して、進捗確認
		# SoftKeyの文字はWindowText()で
		# 読み取れないようなので、みなし
		Call("POn")
	Else
		# 接続中であることが想定されるので
		# 「切断」ボタンを押して、進捗確認へ
		# SoftKeyの文字はWindowText()で
		# 読み取れないようなので、みなし
		Call("POff")
	EndIF
EndSub

# インターネット共有の起動と起動チェック
Sub Activate
	# インターネット共有の起動
	Run(AppPath)
	# インターネット共有が前面になるのを待つ
	WaitForActive(AppName, 4)

	# 起動に失敗しているようなら終了
	If(NOT wndExists(AppName))
		Call("ErrorSound")
		Message(AppName & "が^CR^^LF^起動できないようです")
		Exit
	EndIf
EndSub

# Bluetooh PANの有無のチェック
Sub BluetoothCheck
	btstatus = RegRead("HKLM",\
		"\System\State\Hardware",\
		"Bluetooth")

	Switch(btstatus)
		Case(0, 8)
			Call("ErrorSound")
			Message("Bluetoothが^CR^^LF^使用不能です")
			Exit
	EndSwitch

	# Bluetooth PANが無ければ
	IF(WindowText(60, 240) eq "USB")
		# リストボックスの下の項目を選択してみる
		MouseClick(AppName, 60, 240)
		SendSpecial("Down")
		SendSpecial("CR")
		Sleep(100)
		# それでもBluetooth PANでなければ終了
		IF(WindowText(60, 240) eq "Bluetooth PAN")
			# nop
		Else
			Call("ErrorSound")
			Message("Bluetooth PANが^CR^^LF^見つからないようです")
			Exit
		EndIf
	EndIf
EndSub

# 「接続」ボタン押しと、その後の処理
Sub POn
	Call("WSIMCheck")
	SendSpecial("LeftSoft")
	# W-SIMの接続が確立するまで待つ
	# 20秒でタイムアウト
	Repeat(20)
		status = RegRead("HKLM",\
			"\System\State\Connections\Modem",\
			"Count")
		If(status = 0)
			Sleep(1000)
		EndIF
	EndRepeat

	If(status = True)
		# 接続が確立したら
		ToggleDisplay(off)
		If(NOT MannerMode)
			PlaySound("\Windows\Alarm3.wav")
		EndIf
		Call("RepeatVibrate", 1)
	Else
		# 接続が確立しなかったら
			Call("ErrorSound")
		Call("RepeatVibrate", 2)
	EndIf
EndSub

# 「切断」ボタン押しと、その後の処理
Sub POff
	SendSpecial("LeftSoft")
	ToggleDisplay(off)
	If(NOT MannerMode)
		PlaySound("\Windows\Infend.wav")
	EndIf
	Call("RepeatVibrate", 3)
	#PowerOff
EndSub

Sub RepeatVibrate
	IF(argc = 1 and argv[1] > 0)
		For i = 1 to argv[1]
			Vibrate(200)
			IF(i < argv[1])
				Sleep(300)
			EndIF
		Next
	EndIF
EndSub

Sub WSIMCheck
	strength = RegRead("HKCU", \
	"Software\Sharp\ShPhoneLib", \
	"RFStrength")
	If(strength < 2 || strength > 6)
		Call("ErrorSound")
		Message("電界強度が^CR^^LF^弱いようです")
		Exit
	EndIf
EndSub

Sub ErrorSound
	If(NOT MannerMode)
		PlaySound("\Windows\spl_outofrange.wav")
	EndIf
EndSub

|

« [Windows Mobile]Windows Mobile向けQKC 1.0 (Quick KANJI code Converter C Version 1.0)正式公開 | Main | [N810]Advanced/W-ZERO3[es]をNOKIA N810のモデムとして認識させるKernel Module »