Win32 API 日本語リファレンス
ホームDevices.Tapi › PHONECAPS

PHONECAPS

構造体
サイズx64: 196 バイト / x86: 196 バイトパッキング1

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwTotalSizeDWORD4+0+0このデータ構造体に割り当てられた合計サイズ (バイト単位)。
dwNeededSizeDWORD4+4+4返されるすべての情報を格納するために必要な、このデータ構造体のサイズ (バイト単位)。
dwUsedSizeDWORD4+8+8このデータ構造体のうち、有用な情報が格納されている部分のサイズ (バイト単位)。
dwProviderInfoSizeDWORD4+12+12プロバイダー固有の情報のサイズ (バイト単位)。プロバイダー固有の情報が文字列へのポインターである場合、サイズには null 終端文字を含めなければなりません。
dwProviderInfoOffsetDWORD4+16+16

構造体の先頭から、サービス プロバイダー固有の情報を格納する可変サイズのフィールドまでのオフセット。

このメンバーは、ベンダー名や、ハードウェアおよびソフトウェアのバージョン番号など、プロバイダーのハードウェアやソフトウェアに関する情報を提供します。この情報は、プロバイダーに関する問題でユーザーがカスタマー サービスに問い合わせる必要がある場合に役立ちます。このフィールドのサイズは dwProviderInfoSize で指定されます。

dwPhoneInfoSizeDWORD4+20+20電話固有の情報のサイズ (バイト単位)。電話固有の情報が文字列へのポインターである場合、サイズには null 終端文字を含めなければなりません。
dwPhoneInfoOffsetDWORD4+24+24

構造体の先頭から、電話固有の情報を格納する可変サイズのデバイス フィールドまでのオフセット。

このメンバーは、電話デバイスの製造元、モデル名、ソフトウェアのバージョンなど、接続されている電話デバイスに関する情報を提供します。この情報は、電話に関する問題でユーザーがカスタマー サービスに問い合わせる必要がある場合に役立ちます。このフィールドのサイズは dwPhoneInfoSize で指定されます。

dwPermanentPhoneIDDWORD4+28+28システムの構成において、この電話デバイスを識別するための永続的な識別子。
dwPhoneNameSizeDWORD4+32+32電話の構成可能な名前のサイズ (null 終端文字を含む、バイト単位)。
dwPhoneNameOffsetDWORD4+36+36構造体の先頭から、この電話デバイスのユーザー構成可能な名前を格納する可変サイズのデバイス フィールドまでのオフセット。この名前は、電話デバイスのサービス プロバイダーを構成する際にユーザーが設定でき、ユーザーの利便性のために提供されます。このフィールドのサイズは dwPhoneNameSize で指定されます。
dwStringFormatDWORD4+40+40この電話デバイスで使用される文字列形式。このメンバーは、 STRINGFORMAT_ 定数 のいずれかを使用します。
dwPhoneStatesDWORD4+44+44PHONE_STATE メッセージでアプリケーションに通知できる、この電話デバイスの状態変化。このメンバーは、 PHONESTATE_ 定数 の 1 つ以上を使用します。
dwHookSwitchDevsDWORD4+48+48電話のフックスイッチ デバイス。このメンバーは、 PHONEHOOKSWITCHDEV_ 定数 のいずれかを使用します。
dwHandsetHookSwitchModesDWORD4+52+52ハンドセットのフックスイッチ モード。このメンバーは、フックスイッチ デバイスが dwHookSwitchDevs に列挙されている場合にのみ意味を持ちます。 PHONEHOOKSWITCHMODE_ 定数 のいずれかを使用します。
dwSpeakerHookSwitchModesDWORD4+56+56スピーカーのフックスイッチ モード。このメンバーは、フックスイッチ デバイスが dwHookSwitchDevs に列挙されている場合にのみ意味を持ちます。PHONEHOOKSWITCHMODE_ 定数のいずれかを使用します。
dwHeadsetHookSwitchModesDWORD4+60+60ヘッドセットのフックスイッチ モード。このメンバーは、フックスイッチ デバイスが dwHookSwitchDevs に列挙されている場合にのみ意味を持ちます。 PHONEHOOKSWITCHMODE_ 定数 のいずれかを使用します。
dwVolumeFlagsDWORD4+64+64電話デバイスのスピーカー コンポーネントの音量設定機能。PHONEHOOKSWITCHDEV_ に対応するビット位置が TRUE の場合、対応するフックスイッチ デバイスのスピーカー コンポーネントの音量を phoneSetVolume で調整できます。
dwGainFlagsDWORD4+68+68電話デバイスのマイク コンポーネントのゲイン設定機能。PHONEHOOKSWITCHDEV_ に対応するビット位置が TRUE の場合、対応するフックスイッチ デバイスのマイク コンポーネントの音量を phoneSetGain で調整できます。
dwDisplayNumRowsDWORD4+72+72電話のディスプレイの行数を示す、電話デバイスの表示機能。ディスプレイを持たない電話デバイスでは、dwDisplayNumRows メンバーと dwDisplayNumColumns メンバーはいずれも 0 です。
dwDisplayNumColumnsDWORD4+76+76電話のディスプレイの列数を示す、電話デバイスの表示機能。ディスプレイを持たない電話デバイスでは、dwDisplayNumRows メンバーと dwDisplayNumColumns メンバーはいずれも 0 です。
dwNumRingModesDWORD4+80+80電話デバイスの呼び出し (リング) 機能。この電話は dwNumRingModes 種類の呼び出しパターンで鳴動でき、それらは 1、2、から dwNumRingModes から 1 を引いた値までで識別されます。このメンバーの値が 0 の場合、アプリケーションは電話の呼び出しモードを制御できません。このメンバーの値が 0 より大きい場合は、サービス プロバイダーがサポートする、無音に加えて使用できる呼び出しモードの数を示します。 phoneGetRinglpdwRingMode パラメーター、または phoneSetRingdwRingMode パラメーターの値 0 は無音 (電話が鳴っていない、または鳴らすべきでない状態) を示し、1 から dwNumRingModes までの dwRingMode の値が、その電話デバイスで有効な呼び出しモードです。
dwNumButtonLampsDWORD4+84+84TAPI で検出できる、電話デバイス上のボタン/ランプの数。ボタン/ランプは識別子によって識別されます。有効なボタン/ランプ識別子の範囲は、0 から dwNumButtonLamps から 1 を引いた値までです。キーパッドのボタン '0' から '9'、'*'、'#' には、識別子 0 から 12 が割り当てられます。
dwButtonModesSizeDWORD4+88+88ボタン モード配列のサイズ (バイト単位)。
dwButtonModesOffsetDWORD4+92+92この構造体の先頭から、電話のボタンのボタン モードを格納する可変サイズのフィールドまでのオフセット。この配列は、ボタン/ランプ識別子でインデックス付けされます。この配列は PHONEBUTTONMODE_ 定数 を使用します。配列のサイズは dwButtonModesSize で指定されます。
dwButtonFunctionsSizeDWORD4+96+96ボタン機能フィールドのサイズ (バイト単位)。
dwButtonFunctionsOffsetDWORD4+100+100この構造体の先頭から、電話のボタンのボタン機能を格納する可変サイズのフィールドまでのオフセット。この配列は、ボタン/ランプ識別子でインデックス付けされます。この配列は PHONEBUTTONFUNCTION_ 定数 を使用します。配列のサイズは dwButtonFunctionsSize で指定されます。
dwLampModesSizeDWORD4+104+104ランプ モード配列のサイズ (バイト単位)。
dwLampModesOffsetDWORD4+108+108この構造体の先頭から、電話のランプのランプ モードを格納する可変サイズのフィールドまでのオフセット。この配列は、ボタン/ランプ識別子でインデックス付けされます。この配列は PHONELAMPMODE_ 定数 を使用します。配列のサイズは dwLampModesSize で指定されます。
dwNumSetDataDWORD4+112+112電話デバイス内のダウンロード領域の数。それぞれの領域は、データ ID 0、1、…、dwNumSetData から 1 を引いた値を使用して参照されます。このメンバーが 0 の場合、その電話はダウンロード機能をサポートしていません。
dwSetDataSizeDWORD4+116+116データ サイズ配列のサイズ (バイト単位)。
dwSetDataOffsetDWORD4+120+120この構造体の先頭から、電話のダウンロード データ領域のサイズ (バイト単位) を格納する可変サイズのフィールドまでのオフセット。これは、データ識別子でインデックス付けされる DWORD サイズの要素から成る配列です。配列のサイズは dwSetDataSize で指定されます。
dwNumGetDataDWORD4+124+124電話デバイス内のアップロード領域の数。それぞれの領域は、データ ID 0、1、…、dwNumGetData から 1 を引いた値を使用して参照されます。このフィールドが 0 の場合、その電話はアップロード機能をサポートしていません。
dwGetDataSizeDWORD4+128+128データ サイズ配列のサイズ (バイト単位)。
dwGetDataOffsetDWORD4+132+132この構造体の先頭から、電話のアップロード データ領域のサイズ (バイト単位) を格納する可変サイズのフィールドまでのオフセット。これは、データ識別子でインデックス付けされる DWORD サイズの要素から成る配列です。配列のサイズは dwGetDataSize で指定されます。
dwDevSpecificSizeDWORD4+136+136デバイス固有フィールドのサイズ (バイト単位)。デバイス固有の情報が文字列へのポインターである場合、サイズには null 終端文字を含めなければなりません。
dwDevSpecificOffsetDWORD4+140+140この構造体の先頭から、可変サイズのデバイス固有フィールドまでのオフセット。このフィールドのサイズは dwDevSpecificSize で指定されます。
dwDeviceClassesSizeDWORD4+144+144サポートされるデバイス クラス識別子のサイズ (バイト単位)。
dwDeviceClassesOffsetDWORD4+148+148この構造体の先頭から、 phoneGetID で使用するためにこのデバイスでサポートされるデバイス クラス識別子から成る文字列までのオフセット。各識別子は NULL で区切られ、リストの最後の識別子の後には 2 つの NULL が続きます。このフィールドのサイズは dwDeviceClassesSize で指定されます。
dwPhoneFeaturesDWORD4+152+152その電話で呼び出すことができるテレフォニー API 関数を示すフラグ。0 は、対応する機能が実装されておらず、アプリケーションがその電話に対して呼び出すことが一切できないことを示します。1 は、デバイスの状態やその他の要因に応じて、その機能を呼び出せる可能性があることを示します。このメンバーは PHONEFEATURE_ 定数 を使用します。
dwSettableHandsetHookSwitchModesDWORD4+156+156PHONEHOOKSWITCHMODE_ の値のうち、 phoneSetHookSwitch を使用してハンドセットに設定できるもの。
dwSettableSpeakerHookSwitchModesDWORD4+160+160PHONEHOOKSWITCHMODE_ の値のうち、 phoneSetHookSwitch を使用してスピーカーフォンに設定できるもの。
dwSettableHeadsetHookSwitchModesDWORD4+164+164PHONEHOOKSWITCHMODE_ の値のうち、 phoneSetHookSwitch を使用してヘッドセットに設定できるもの。
dwMonitoredHandsetHookSwitchModesDWORD4+168+168PHONEHOOKSWITCHMODE_ の値のうち、 PHONE_STATE メッセージおよび phoneGetHookSwitch によって、ハンドセットについて検出および報告できるもの。
dwMonitoredSpeakerHookSwitchModesDWORD4+172+172PHONEHOOKSWITCHMODE_ の値のうち、PHONE_STATE メッセージおよび phoneSetHookSwitch によって、スピーカーフォンについて検出および報告できるもの。
dwMonitoredHeadsetHookSwitchModesDWORD4+176+176PHONEHOOKSWITCHMODE_ の値のうち、PHONE_STATE メッセージおよび phoneSetHookSwitch によって、ヘッドセットについて検出および報告できるもの。
PermanentPhoneGuidGUID16+180+180この電話に永続的に関連付けられている GUID。

公式ドキュメント

PHONECAPS 構造体は、電話デバイスの機能を記述します。 phoneGetDevCaps 関数および TSPI_phoneGetDevCaps 関数は、この構造体を返します。

解説(Remarks)

デバイス固有の拡張には、このデータ構造体の DevSpecific 可変サイズ領域 (dwDevSpecificSize および dwDevSpecificOffset) を使用してください。

dwDeviceClassesSize から dwMonitoredHeadsetHookSwitchModes までのメンバーは、API バージョン 2.0 以降で電話デバイスを開いたアプリケーションでのみ使用できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// PHONECAPS  (x64 196 / x86 196 バイト)
#pragma pack(push, 1)
typedef struct PHONECAPS {
    DWORD dwTotalSize;
    DWORD dwNeededSize;
    DWORD dwUsedSize;
    DWORD dwProviderInfoSize;
    DWORD dwProviderInfoOffset;
    DWORD dwPhoneInfoSize;
    DWORD dwPhoneInfoOffset;
    DWORD dwPermanentPhoneID;
    DWORD dwPhoneNameSize;
    DWORD dwPhoneNameOffset;
    DWORD dwStringFormat;
    DWORD dwPhoneStates;
    DWORD dwHookSwitchDevs;
    DWORD dwHandsetHookSwitchModes;
    DWORD dwSpeakerHookSwitchModes;
    DWORD dwHeadsetHookSwitchModes;
    DWORD dwVolumeFlags;
    DWORD dwGainFlags;
    DWORD dwDisplayNumRows;
    DWORD dwDisplayNumColumns;
    DWORD dwNumRingModes;
    DWORD dwNumButtonLamps;
    DWORD dwButtonModesSize;
    DWORD dwButtonModesOffset;
    DWORD dwButtonFunctionsSize;
    DWORD dwButtonFunctionsOffset;
    DWORD dwLampModesSize;
    DWORD dwLampModesOffset;
    DWORD dwNumSetData;
    DWORD dwSetDataSize;
    DWORD dwSetDataOffset;
    DWORD dwNumGetData;
    DWORD dwGetDataSize;
    DWORD dwGetDataOffset;
    DWORD dwDevSpecificSize;
    DWORD dwDevSpecificOffset;
    DWORD dwDeviceClassesSize;
    DWORD dwDeviceClassesOffset;
    DWORD dwPhoneFeatures;
    DWORD dwSettableHandsetHookSwitchModes;
    DWORD dwSettableSpeakerHookSwitchModes;
    DWORD dwSettableHeadsetHookSwitchModes;
    DWORD dwMonitoredHandsetHookSwitchModes;
    DWORD dwMonitoredSpeakerHookSwitchModes;
    DWORD dwMonitoredHeadsetHookSwitchModes;
    GUID PermanentPhoneGuid;
} PHONECAPS;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct PHONECAPS
{
    public uint dwTotalSize;
    public uint dwNeededSize;
    public uint dwUsedSize;
    public uint dwProviderInfoSize;
    public uint dwProviderInfoOffset;
    public uint dwPhoneInfoSize;
    public uint dwPhoneInfoOffset;
    public uint dwPermanentPhoneID;
    public uint dwPhoneNameSize;
    public uint dwPhoneNameOffset;
    public uint dwStringFormat;
    public uint dwPhoneStates;
    public uint dwHookSwitchDevs;
    public uint dwHandsetHookSwitchModes;
    public uint dwSpeakerHookSwitchModes;
    public uint dwHeadsetHookSwitchModes;
    public uint dwVolumeFlags;
    public uint dwGainFlags;
    public uint dwDisplayNumRows;
    public uint dwDisplayNumColumns;
    public uint dwNumRingModes;
    public uint dwNumButtonLamps;
    public uint dwButtonModesSize;
    public uint dwButtonModesOffset;
    public uint dwButtonFunctionsSize;
    public uint dwButtonFunctionsOffset;
    public uint dwLampModesSize;
    public uint dwLampModesOffset;
    public uint dwNumSetData;
    public uint dwSetDataSize;
    public uint dwSetDataOffset;
    public uint dwNumGetData;
    public uint dwGetDataSize;
    public uint dwGetDataOffset;
    public uint dwDevSpecificSize;
    public uint dwDevSpecificOffset;
    public uint dwDeviceClassesSize;
    public uint dwDeviceClassesOffset;
    public uint dwPhoneFeatures;
    public uint dwSettableHandsetHookSwitchModes;
    public uint dwSettableSpeakerHookSwitchModes;
    public uint dwSettableHeadsetHookSwitchModes;
    public uint dwMonitoredHandsetHookSwitchModes;
    public uint dwMonitoredSpeakerHookSwitchModes;
    public uint dwMonitoredHeadsetHookSwitchModes;
    public Guid PermanentPhoneGuid;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure PHONECAPS
    Public dwTotalSize As UInteger
    Public dwNeededSize As UInteger
    Public dwUsedSize As UInteger
    Public dwProviderInfoSize As UInteger
    Public dwProviderInfoOffset As UInteger
    Public dwPhoneInfoSize As UInteger
    Public dwPhoneInfoOffset As UInteger
    Public dwPermanentPhoneID As UInteger
    Public dwPhoneNameSize As UInteger
    Public dwPhoneNameOffset As UInteger
    Public dwStringFormat As UInteger
    Public dwPhoneStates As UInteger
    Public dwHookSwitchDevs As UInteger
    Public dwHandsetHookSwitchModes As UInteger
    Public dwSpeakerHookSwitchModes As UInteger
    Public dwHeadsetHookSwitchModes As UInteger
    Public dwVolumeFlags As UInteger
    Public dwGainFlags As UInteger
    Public dwDisplayNumRows As UInteger
    Public dwDisplayNumColumns As UInteger
    Public dwNumRingModes As UInteger
    Public dwNumButtonLamps As UInteger
    Public dwButtonModesSize As UInteger
    Public dwButtonModesOffset As UInteger
    Public dwButtonFunctionsSize As UInteger
    Public dwButtonFunctionsOffset As UInteger
    Public dwLampModesSize As UInteger
    Public dwLampModesOffset As UInteger
    Public dwNumSetData As UInteger
    Public dwSetDataSize As UInteger
    Public dwSetDataOffset As UInteger
    Public dwNumGetData As UInteger
    Public dwGetDataSize As UInteger
    Public dwGetDataOffset As UInteger
    Public dwDevSpecificSize As UInteger
    Public dwDevSpecificOffset As UInteger
    Public dwDeviceClassesSize As UInteger
    Public dwDeviceClassesOffset As UInteger
    Public dwPhoneFeatures As UInteger
    Public dwSettableHandsetHookSwitchModes As UInteger
    Public dwSettableSpeakerHookSwitchModes As UInteger
    Public dwSettableHeadsetHookSwitchModes As UInteger
    Public dwMonitoredHandsetHookSwitchModes As UInteger
    Public dwMonitoredSpeakerHookSwitchModes As UInteger
    Public dwMonitoredHeadsetHookSwitchModes As UInteger
    Public PermanentPhoneGuid As Guid
End Structure
import ctypes
from ctypes import wintypes

class PHONECAPS(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("dwTotalSize", wintypes.DWORD),
        ("dwNeededSize", wintypes.DWORD),
        ("dwUsedSize", wintypes.DWORD),
        ("dwProviderInfoSize", wintypes.DWORD),
        ("dwProviderInfoOffset", wintypes.DWORD),
        ("dwPhoneInfoSize", wintypes.DWORD),
        ("dwPhoneInfoOffset", wintypes.DWORD),
        ("dwPermanentPhoneID", wintypes.DWORD),
        ("dwPhoneNameSize", wintypes.DWORD),
        ("dwPhoneNameOffset", wintypes.DWORD),
        ("dwStringFormat", wintypes.DWORD),
        ("dwPhoneStates", wintypes.DWORD),
        ("dwHookSwitchDevs", wintypes.DWORD),
        ("dwHandsetHookSwitchModes", wintypes.DWORD),
        ("dwSpeakerHookSwitchModes", wintypes.DWORD),
        ("dwHeadsetHookSwitchModes", wintypes.DWORD),
        ("dwVolumeFlags", wintypes.DWORD),
        ("dwGainFlags", wintypes.DWORD),
        ("dwDisplayNumRows", wintypes.DWORD),
        ("dwDisplayNumColumns", wintypes.DWORD),
        ("dwNumRingModes", wintypes.DWORD),
        ("dwNumButtonLamps", wintypes.DWORD),
        ("dwButtonModesSize", wintypes.DWORD),
        ("dwButtonModesOffset", wintypes.DWORD),
        ("dwButtonFunctionsSize", wintypes.DWORD),
        ("dwButtonFunctionsOffset", wintypes.DWORD),
        ("dwLampModesSize", wintypes.DWORD),
        ("dwLampModesOffset", wintypes.DWORD),
        ("dwNumSetData", wintypes.DWORD),
        ("dwSetDataSize", wintypes.DWORD),
        ("dwSetDataOffset", wintypes.DWORD),
        ("dwNumGetData", wintypes.DWORD),
        ("dwGetDataSize", wintypes.DWORD),
        ("dwGetDataOffset", wintypes.DWORD),
        ("dwDevSpecificSize", wintypes.DWORD),
        ("dwDevSpecificOffset", wintypes.DWORD),
        ("dwDeviceClassesSize", wintypes.DWORD),
        ("dwDeviceClassesOffset", wintypes.DWORD),
        ("dwPhoneFeatures", wintypes.DWORD),
        ("dwSettableHandsetHookSwitchModes", wintypes.DWORD),
        ("dwSettableSpeakerHookSwitchModes", wintypes.DWORD),
        ("dwSettableHeadsetHookSwitchModes", wintypes.DWORD),
        ("dwMonitoredHandsetHookSwitchModes", wintypes.DWORD),
        ("dwMonitoredSpeakerHookSwitchModes", wintypes.DWORD),
        ("dwMonitoredHeadsetHookSwitchModes", wintypes.DWORD),
        ("PermanentPhoneGuid", GUID),
    ]
#[repr(C, packed(1))]
pub struct PHONECAPS {
    pub dwTotalSize: u32,
    pub dwNeededSize: u32,
    pub dwUsedSize: u32,
    pub dwProviderInfoSize: u32,
    pub dwProviderInfoOffset: u32,
    pub dwPhoneInfoSize: u32,
    pub dwPhoneInfoOffset: u32,
    pub dwPermanentPhoneID: u32,
    pub dwPhoneNameSize: u32,
    pub dwPhoneNameOffset: u32,
    pub dwStringFormat: u32,
    pub dwPhoneStates: u32,
    pub dwHookSwitchDevs: u32,
    pub dwHandsetHookSwitchModes: u32,
    pub dwSpeakerHookSwitchModes: u32,
    pub dwHeadsetHookSwitchModes: u32,
    pub dwVolumeFlags: u32,
    pub dwGainFlags: u32,
    pub dwDisplayNumRows: u32,
    pub dwDisplayNumColumns: u32,
    pub dwNumRingModes: u32,
    pub dwNumButtonLamps: u32,
    pub dwButtonModesSize: u32,
    pub dwButtonModesOffset: u32,
    pub dwButtonFunctionsSize: u32,
    pub dwButtonFunctionsOffset: u32,
    pub dwLampModesSize: u32,
    pub dwLampModesOffset: u32,
    pub dwNumSetData: u32,
    pub dwSetDataSize: u32,
    pub dwSetDataOffset: u32,
    pub dwNumGetData: u32,
    pub dwGetDataSize: u32,
    pub dwGetDataOffset: u32,
    pub dwDevSpecificSize: u32,
    pub dwDevSpecificOffset: u32,
    pub dwDeviceClassesSize: u32,
    pub dwDeviceClassesOffset: u32,
    pub dwPhoneFeatures: u32,
    pub dwSettableHandsetHookSwitchModes: u32,
    pub dwSettableSpeakerHookSwitchModes: u32,
    pub dwSettableHeadsetHookSwitchModes: u32,
    pub dwMonitoredHandsetHookSwitchModes: u32,
    pub dwMonitoredSpeakerHookSwitchModes: u32,
    pub dwMonitoredHeadsetHookSwitchModes: u32,
    pub PermanentPhoneGuid: GUID,
}
import "golang.org/x/sys/windows"

type PHONECAPS struct {
	dwTotalSize uint32
	dwNeededSize uint32
	dwUsedSize uint32
	dwProviderInfoSize uint32
	dwProviderInfoOffset uint32
	dwPhoneInfoSize uint32
	dwPhoneInfoOffset uint32
	dwPermanentPhoneID uint32
	dwPhoneNameSize uint32
	dwPhoneNameOffset uint32
	dwStringFormat uint32
	dwPhoneStates uint32
	dwHookSwitchDevs uint32
	dwHandsetHookSwitchModes uint32
	dwSpeakerHookSwitchModes uint32
	dwHeadsetHookSwitchModes uint32
	dwVolumeFlags uint32
	dwGainFlags uint32
	dwDisplayNumRows uint32
	dwDisplayNumColumns uint32
	dwNumRingModes uint32
	dwNumButtonLamps uint32
	dwButtonModesSize uint32
	dwButtonModesOffset uint32
	dwButtonFunctionsSize uint32
	dwButtonFunctionsOffset uint32
	dwLampModesSize uint32
	dwLampModesOffset uint32
	dwNumSetData uint32
	dwSetDataSize uint32
	dwSetDataOffset uint32
	dwNumGetData uint32
	dwGetDataSize uint32
	dwGetDataOffset uint32
	dwDevSpecificSize uint32
	dwDevSpecificOffset uint32
	dwDeviceClassesSize uint32
	dwDeviceClassesOffset uint32
	dwPhoneFeatures uint32
	dwSettableHandsetHookSwitchModes uint32
	dwSettableSpeakerHookSwitchModes uint32
	dwSettableHeadsetHookSwitchModes uint32
	dwMonitoredHandsetHookSwitchModes uint32
	dwMonitoredSpeakerHookSwitchModes uint32
	dwMonitoredHeadsetHookSwitchModes uint32
	PermanentPhoneGuid windows.GUID
}
type
  PHONECAPS = packed record
    dwTotalSize: DWORD;
    dwNeededSize: DWORD;
    dwUsedSize: DWORD;
    dwProviderInfoSize: DWORD;
    dwProviderInfoOffset: DWORD;
    dwPhoneInfoSize: DWORD;
    dwPhoneInfoOffset: DWORD;
    dwPermanentPhoneID: DWORD;
    dwPhoneNameSize: DWORD;
    dwPhoneNameOffset: DWORD;
    dwStringFormat: DWORD;
    dwPhoneStates: DWORD;
    dwHookSwitchDevs: DWORD;
    dwHandsetHookSwitchModes: DWORD;
    dwSpeakerHookSwitchModes: DWORD;
    dwHeadsetHookSwitchModes: DWORD;
    dwVolumeFlags: DWORD;
    dwGainFlags: DWORD;
    dwDisplayNumRows: DWORD;
    dwDisplayNumColumns: DWORD;
    dwNumRingModes: DWORD;
    dwNumButtonLamps: DWORD;
    dwButtonModesSize: DWORD;
    dwButtonModesOffset: DWORD;
    dwButtonFunctionsSize: DWORD;
    dwButtonFunctionsOffset: DWORD;
    dwLampModesSize: DWORD;
    dwLampModesOffset: DWORD;
    dwNumSetData: DWORD;
    dwSetDataSize: DWORD;
    dwSetDataOffset: DWORD;
    dwNumGetData: DWORD;
    dwGetDataSize: DWORD;
    dwGetDataOffset: DWORD;
    dwDevSpecificSize: DWORD;
    dwDevSpecificOffset: DWORD;
    dwDeviceClassesSize: DWORD;
    dwDeviceClassesOffset: DWORD;
    dwPhoneFeatures: DWORD;
    dwSettableHandsetHookSwitchModes: DWORD;
    dwSettableSpeakerHookSwitchModes: DWORD;
    dwSettableHeadsetHookSwitchModes: DWORD;
    dwMonitoredHandsetHookSwitchModes: DWORD;
    dwMonitoredSpeakerHookSwitchModes: DWORD;
    dwMonitoredHeadsetHookSwitchModes: DWORD;
    PermanentPhoneGuid: TGUID;
  end;
const PHONECAPS = extern struct {
    dwTotalSize: u32,
    dwNeededSize: u32,
    dwUsedSize: u32,
    dwProviderInfoSize: u32,
    dwProviderInfoOffset: u32,
    dwPhoneInfoSize: u32,
    dwPhoneInfoOffset: u32,
    dwPermanentPhoneID: u32,
    dwPhoneNameSize: u32,
    dwPhoneNameOffset: u32,
    dwStringFormat: u32,
    dwPhoneStates: u32,
    dwHookSwitchDevs: u32,
    dwHandsetHookSwitchModes: u32,
    dwSpeakerHookSwitchModes: u32,
    dwHeadsetHookSwitchModes: u32,
    dwVolumeFlags: u32,
    dwGainFlags: u32,
    dwDisplayNumRows: u32,
    dwDisplayNumColumns: u32,
    dwNumRingModes: u32,
    dwNumButtonLamps: u32,
    dwButtonModesSize: u32,
    dwButtonModesOffset: u32,
    dwButtonFunctionsSize: u32,
    dwButtonFunctionsOffset: u32,
    dwLampModesSize: u32,
    dwLampModesOffset: u32,
    dwNumSetData: u32,
    dwSetDataSize: u32,
    dwSetDataOffset: u32,
    dwNumGetData: u32,
    dwGetDataSize: u32,
    dwGetDataOffset: u32,
    dwDevSpecificSize: u32,
    dwDevSpecificOffset: u32,
    dwDeviceClassesSize: u32,
    dwDeviceClassesOffset: u32,
    dwPhoneFeatures: u32,
    dwSettableHandsetHookSwitchModes: u32,
    dwSettableSpeakerHookSwitchModes: u32,
    dwSettableHeadsetHookSwitchModes: u32,
    dwMonitoredHandsetHookSwitchModes: u32,
    dwMonitoredSpeakerHookSwitchModes: u32,
    dwMonitoredHeadsetHookSwitchModes: u32,
    PermanentPhoneGuid: GUID,
};
type
  PHONECAPS {.packed.} = object
    dwTotalSize: uint32
    dwNeededSize: uint32
    dwUsedSize: uint32
    dwProviderInfoSize: uint32
    dwProviderInfoOffset: uint32
    dwPhoneInfoSize: uint32
    dwPhoneInfoOffset: uint32
    dwPermanentPhoneID: uint32
    dwPhoneNameSize: uint32
    dwPhoneNameOffset: uint32
    dwStringFormat: uint32
    dwPhoneStates: uint32
    dwHookSwitchDevs: uint32
    dwHandsetHookSwitchModes: uint32
    dwSpeakerHookSwitchModes: uint32
    dwHeadsetHookSwitchModes: uint32
    dwVolumeFlags: uint32
    dwGainFlags: uint32
    dwDisplayNumRows: uint32
    dwDisplayNumColumns: uint32
    dwNumRingModes: uint32
    dwNumButtonLamps: uint32
    dwButtonModesSize: uint32
    dwButtonModesOffset: uint32
    dwButtonFunctionsSize: uint32
    dwButtonFunctionsOffset: uint32
    dwLampModesSize: uint32
    dwLampModesOffset: uint32
    dwNumSetData: uint32
    dwSetDataSize: uint32
    dwSetDataOffset: uint32
    dwNumGetData: uint32
    dwGetDataSize: uint32
    dwGetDataOffset: uint32
    dwDevSpecificSize: uint32
    dwDevSpecificOffset: uint32
    dwDeviceClassesSize: uint32
    dwDeviceClassesOffset: uint32
    dwPhoneFeatures: uint32
    dwSettableHandsetHookSwitchModes: uint32
    dwSettableSpeakerHookSwitchModes: uint32
    dwSettableHeadsetHookSwitchModes: uint32
    dwMonitoredHandsetHookSwitchModes: uint32
    dwMonitoredSpeakerHookSwitchModes: uint32
    dwMonitoredHeadsetHookSwitchModes: uint32
    PermanentPhoneGuid: GUID
align(1)
struct PHONECAPS
{
    uint dwTotalSize;
    uint dwNeededSize;
    uint dwUsedSize;
    uint dwProviderInfoSize;
    uint dwProviderInfoOffset;
    uint dwPhoneInfoSize;
    uint dwPhoneInfoOffset;
    uint dwPermanentPhoneID;
    uint dwPhoneNameSize;
    uint dwPhoneNameOffset;
    uint dwStringFormat;
    uint dwPhoneStates;
    uint dwHookSwitchDevs;
    uint dwHandsetHookSwitchModes;
    uint dwSpeakerHookSwitchModes;
    uint dwHeadsetHookSwitchModes;
    uint dwVolumeFlags;
    uint dwGainFlags;
    uint dwDisplayNumRows;
    uint dwDisplayNumColumns;
    uint dwNumRingModes;
    uint dwNumButtonLamps;
    uint dwButtonModesSize;
    uint dwButtonModesOffset;
    uint dwButtonFunctionsSize;
    uint dwButtonFunctionsOffset;
    uint dwLampModesSize;
    uint dwLampModesOffset;
    uint dwNumSetData;
    uint dwSetDataSize;
    uint dwSetDataOffset;
    uint dwNumGetData;
    uint dwGetDataSize;
    uint dwGetDataOffset;
    uint dwDevSpecificSize;
    uint dwDevSpecificOffset;
    uint dwDeviceClassesSize;
    uint dwDeviceClassesOffset;
    uint dwPhoneFeatures;
    uint dwSettableHandsetHookSwitchModes;
    uint dwSettableSpeakerHookSwitchModes;
    uint dwSettableHeadsetHookSwitchModes;
    uint dwMonitoredHandsetHookSwitchModes;
    uint dwMonitoredSpeakerHookSwitchModes;
    uint dwMonitoredHeadsetHookSwitchModes;
    GUID PermanentPhoneGuid;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PHONECAPS サイズ: 196 バイト(x64)
dim st, 49    ; 4byte整数×49(構造体サイズ 196 / 4 切り上げ)
; dwTotalSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwNeededSize : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwUsedSize : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwProviderInfoSize : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwProviderInfoOffset : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwPhoneInfoSize : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwPhoneInfoOffset : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwPermanentPhoneID : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwPhoneNameSize : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwPhoneNameOffset : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwStringFormat : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwPhoneStates : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwHookSwitchDevs : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwHandsetHookSwitchModes : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwSpeakerHookSwitchModes : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; dwHeadsetHookSwitchModes : DWORD (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; dwVolumeFlags : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; dwGainFlags : DWORD (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; dwDisplayNumRows : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; dwDisplayNumColumns : DWORD (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; dwNumRingModes : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; dwNumButtonLamps : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; dwButtonModesSize : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; dwButtonModesOffset : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; dwButtonFunctionsSize : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; dwButtonFunctionsOffset : DWORD (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; dwLampModesSize : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; dwLampModesOffset : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; dwNumSetData : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; dwSetDataSize : DWORD (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; dwSetDataOffset : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; dwNumGetData : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; dwGetDataSize : DWORD (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; dwGetDataOffset : DWORD (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; dwDevSpecificSize : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; dwDevSpecificOffset : DWORD (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; dwDeviceClassesSize : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; dwDeviceClassesOffset : DWORD (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; dwPhoneFeatures : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; dwSettableHandsetHookSwitchModes : DWORD (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; dwSettableSpeakerHookSwitchModes : DWORD (+160, 4byte)  st.40 = 値  /  値 = st.40   (lpoke/lpeek も可)
; dwSettableHeadsetHookSwitchModes : DWORD (+164, 4byte)  st.41 = 値  /  値 = st.41   (lpoke/lpeek も可)
; dwMonitoredHandsetHookSwitchModes : DWORD (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; dwMonitoredSpeakerHookSwitchModes : DWORD (+172, 4byte)  st.43 = 値  /  値 = st.43   (lpoke/lpeek も可)
; dwMonitoredHeadsetHookSwitchModes : DWORD (+176, 4byte)  st.44 = 値  /  値 = st.44   (lpoke/lpeek も可)
; PermanentPhoneGuid : GUID (+180, 16byte)  varptr(st)+180 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global PHONECAPS, pack=1
    #field int dwTotalSize
    #field int dwNeededSize
    #field int dwUsedSize
    #field int dwProviderInfoSize
    #field int dwProviderInfoOffset
    #field int dwPhoneInfoSize
    #field int dwPhoneInfoOffset
    #field int dwPermanentPhoneID
    #field int dwPhoneNameSize
    #field int dwPhoneNameOffset
    #field int dwStringFormat
    #field int dwPhoneStates
    #field int dwHookSwitchDevs
    #field int dwHandsetHookSwitchModes
    #field int dwSpeakerHookSwitchModes
    #field int dwHeadsetHookSwitchModes
    #field int dwVolumeFlags
    #field int dwGainFlags
    #field int dwDisplayNumRows
    #field int dwDisplayNumColumns
    #field int dwNumRingModes
    #field int dwNumButtonLamps
    #field int dwButtonModesSize
    #field int dwButtonModesOffset
    #field int dwButtonFunctionsSize
    #field int dwButtonFunctionsOffset
    #field int dwLampModesSize
    #field int dwLampModesOffset
    #field int dwNumSetData
    #field int dwSetDataSize
    #field int dwSetDataOffset
    #field int dwNumGetData
    #field int dwGetDataSize
    #field int dwGetDataOffset
    #field int dwDevSpecificSize
    #field int dwDevSpecificOffset
    #field int dwDeviceClassesSize
    #field int dwDeviceClassesOffset
    #field int dwPhoneFeatures
    #field int dwSettableHandsetHookSwitchModes
    #field int dwSettableSpeakerHookSwitchModes
    #field int dwSettableHeadsetHookSwitchModes
    #field int dwMonitoredHandsetHookSwitchModes
    #field int dwMonitoredSpeakerHookSwitchModes
    #field int dwMonitoredHeadsetHookSwitchModes
    #field GUID PermanentPhoneGuid
#endstruct

stdim st, PHONECAPS        ; NSTRUCT 変数を確保
st->dwTotalSize = 100
mes "dwTotalSize=" + st->dwTotalSize