2009年1月22日木曜日

.NET(Mobile) SIPの情報(表示状態、高さ、作業領域)を取得するには?

SIPの情報(表示状態、高さ、作業領域)するには SipGetInfo APIを使用します。
<DllImport("coredll.dll")> _
Public Structure SIPINFO
Public cbSize As Int32
Public fdwFlags As Int32
Public rcVisibleDesktop As RECT
Public rcSipRect As RECT
Public dwImDataSize As Int32
Public pvImData As IntPtr
End Structure

Public Structure RECT
Public left As Int32
Public top As Int32
Public right As Int32
Public bottom As Int32
End Structure

Private Const SIPF_DOCKED As Integer = 0
Private Const SIPF_LOCKED As Integer = 1
Private Const SIPF_OFF As Integer = 2
Private Const SIPF_ON As Integer = 3

<DllImport("coredll.dll")> _
Private Shared Function SipGetInfo(ByRef pSipInfo As SIPINFO) As Boolean
End Function


Private Sub cmdShipInfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles cmdShipInfo.Click

Dim info As SIPINFO
info.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(info)
Call SipGetInfo(info)

'SIP起動状態
Dim isSipOpen As Boolean 
If info.fdwFlags = SIPF_ON Then
isSipOpen = True
ElseIf info.fdwFlags = SIPF_OFF Then
isSipOpen = False
End If
'SIPの高さ
Dim iSipHeight As Integer = info.rcSipRect.bottom - info.rcSipRect.top
'作業領域
Dim iDesktopHeight As Integer = info.rcVisibleDesktop.bottom - info.rcVisibleDesktop.top

MessageBox.Show(String.Format("Sip起動:{0} Sipの高さ:{1} 作業領域の高さ:{2}", isSipOpen, iSipHeight, iDesktopHeight))

End Sub


WS007SH(Willcom)では以下の値が返りました。
SIPが表示されていない状態
Sip起動:False Sipの高さ:160 作業領域の高さ:376
SIPが表示されている状態
Sip起動:True Sipの高さ:160 作業領域の高さ:588


X04HT(SoftBank)では以下の値が返りました。
SIPが表示されていない状態
Sip起動:False Sipの高さ:318 作業領域の高さ:218
SIPが表示されている状態
Sip起動:True Sipの高さ:318 作業領域の高さ:588


DT-5200(CASIO)ではSIPINFO.fdwFlags がSIPF_DOCKED(表示)/SIPF_LOCKED(非表示)になるようです。
DT-5200ではプログラムを以下のように修正します。
'SIP起動状態
Dim isSipOpen As Boolean 
If info.fdwFlags = SIPF_LOCKED Then
isSipOpen = True
ElseIf info.fdwFlags = SIPF_DOCKED Then
isSipOpen = False
End If

SIPが表示されていない状態
Sip起動:False Sipの高さ:105 作業領域の高さ:294
SIPが表示されている状態
Sip起動:True Sipの高さ:105 作業領域の高さ:294
※作業領域の高さがSIPが起動している時も起動していない時も変わらない。

DT-5200はSIPがタスクバーにあるけれど
X04HT、WS007SHはFormのMainMenuでSIPが起動するからその違いなのかな・・・

0 件のコメント: