Win32 API 日本語リファレンス
ホームNetworking.WinSock › NL_NETWORK_CONNECTIVITY_HINT

NL_NETWORK_CONNECTIVITY_HINT

構造体
サイズx64: 12 バイト / x86: 12 バイト

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

フィールド

フィールドサイズx64x86説明
ConnectivityLevelNL_NETWORK_CONNECTIVITY_LEVEL_HINT4+0+0ネットワーク接続レベルのヒント(インターネット到達可否等)である。
ConnectivityCostNL_NETWORK_CONNECTIVITY_COST_HINT4+4+4ネットワークのコストヒント(従量制等)を示す値である。
ApproachingDataLimitBOOLEAN1+8+8データ通信量の上限に近づいているかを示す真偽値である。
OverDataLimitBOOLEAN1+9+9データ通信量の上限を超過しているかを示す真偽値である。
RoamingBOOLEAN1+10+10ローミング中かどうかを示す真偽値である。

各言語での定義

#include <windows.h>

// NL_NETWORK_CONNECTIVITY_HINT  (x64 12 / x86 12 バイト)
typedef struct NL_NETWORK_CONNECTIVITY_HINT {
    NL_NETWORK_CONNECTIVITY_LEVEL_HINT ConnectivityLevel;
    NL_NETWORK_CONNECTIVITY_COST_HINT ConnectivityCost;
    BOOLEAN ApproachingDataLimit;
    BOOLEAN OverDataLimit;
    BOOLEAN Roaming;
} NL_NETWORK_CONNECTIVITY_HINT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NL_NETWORK_CONNECTIVITY_HINT
{
    public int ConnectivityLevel;
    public int ConnectivityCost;
    [MarshalAs(UnmanagedType.U1)] public bool ApproachingDataLimit;
    [MarshalAs(UnmanagedType.U1)] public bool OverDataLimit;
    [MarshalAs(UnmanagedType.U1)] public bool Roaming;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NL_NETWORK_CONNECTIVITY_HINT
    Public ConnectivityLevel As Integer
    Public ConnectivityCost As Integer
    <MarshalAs(UnmanagedType.U1)> Public ApproachingDataLimit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public OverDataLimit As Boolean
    <MarshalAs(UnmanagedType.U1)> Public Roaming As Boolean
End Structure
import ctypes
from ctypes import wintypes

class NL_NETWORK_CONNECTIVITY_HINT(ctypes.Structure):
    _fields_ = [
        ("ConnectivityLevel", ctypes.c_int),
        ("ConnectivityCost", ctypes.c_int),
        ("ApproachingDataLimit", ctypes.c_byte),
        ("OverDataLimit", ctypes.c_byte),
        ("Roaming", ctypes.c_byte),
    ]
#[repr(C)]
pub struct NL_NETWORK_CONNECTIVITY_HINT {
    pub ConnectivityLevel: i32,
    pub ConnectivityCost: i32,
    pub ApproachingDataLimit: u8,
    pub OverDataLimit: u8,
    pub Roaming: u8,
}
import "golang.org/x/sys/windows"

type NL_NETWORK_CONNECTIVITY_HINT struct {
	ConnectivityLevel int32
	ConnectivityCost int32
	ApproachingDataLimit byte
	OverDataLimit byte
	Roaming byte
}
type
  NL_NETWORK_CONNECTIVITY_HINT = record
    ConnectivityLevel: Integer;
    ConnectivityCost: Integer;
    ApproachingDataLimit: ByteBool;
    OverDataLimit: ByteBool;
    Roaming: ByteBool;
  end;
const NL_NETWORK_CONNECTIVITY_HINT = extern struct {
    ConnectivityLevel: i32,
    ConnectivityCost: i32,
    ApproachingDataLimit: u8,
    OverDataLimit: u8,
    Roaming: u8,
};
type
  NL_NETWORK_CONNECTIVITY_HINT {.bycopy.} = object
    ConnectivityLevel: int32
    ConnectivityCost: int32
    ApproachingDataLimit: uint8
    OverDataLimit: uint8
    Roaming: uint8
struct NL_NETWORK_CONNECTIVITY_HINT
{
    int ConnectivityLevel;
    int ConnectivityCost;
    ubyte ApproachingDataLimit;
    ubyte OverDataLimit;
    ubyte Roaming;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NL_NETWORK_CONNECTIVITY_HINT サイズ: 12 バイト(x64)
dim st, 3    ; 4byte整数×3(構造体サイズ 12 / 4 切り上げ)
; ConnectivityLevel : NL_NETWORK_CONNECTIVITY_LEVEL_HINT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ConnectivityCost : NL_NETWORK_CONNECTIVITY_COST_HINT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ApproachingDataLimit : BOOLEAN (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; OverDataLimit : BOOLEAN (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; Roaming : BOOLEAN (+10, 1byte)  poke st,10,値  /  値 = peek(st,10)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global NL_NETWORK_CONNECTIVITY_HINT
    #field int ConnectivityLevel
    #field int ConnectivityCost
    #field bool1 ApproachingDataLimit
    #field bool1 OverDataLimit
    #field bool1 Roaming
#endstruct

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