2013年10月24日 星期四

Visual Studio筆記 :: Geting OS version by APIs

VB

方法一:
MSDN: http://msdn.microsoft.com/zh-tw/library/system.environment.osversion.aspx

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Get the operating system version.
        Dim os As OperatingSystem = Environment.OSVersion
        Dim ver As Version = os.Version

        Label1.Text = os.VersionString
        Label2.Text = ver.ToString()
        Label3.Text = My.Computer.Info.OSFullName & My.Computer.Info.OSVersion
    End Sub
End Class

----
方法二:
MSDN: http://msdn.microsoft.com/zh-tw/library/vstudio/795sy883(v=vs.100).aspx

Imports System.Runtime.InteropServices

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label4.Text = "Passing OSVersionInfo as a class"

        Dim osvi As New OSVersionInfo()
        osvi.OSVersionInfoSize = Marshal.SizeOf(osvi)

        LibWrap.GetVersionEx(osvi)

        Label5.Text = "Class size:" & osvi.OSVersionInfoSize
        Label6.Text = "OS Version:" & osvi.MajorVersion & "." & osvi.MinorVersion

        Label7.Text = "Passing OSVersionInfo2 as a struct"

        Dim osvi2 As New OSVersionInfo2()
        osvi2.OSVersionInfoSize = Marshal.SizeOf(osvi2)

        LibWrap.GetVersionEx2(osvi2)
        Label8.Text = "Struct size:" & osvi2.OSVersionInfoSize
        Label9.Text = "OS Version:" & osvi2.MajorVersion & "." & osvi2.MinorVersion
    End Sub
End Class

<StructLayout(LayoutKind.Sequential)> _
Public Class OSVersionInfo
    Public OSVersionInfoSize As Integer
    Public MajorVersion As Integer
    Public MinorVersion As Integer
    Public BuildNumber As Integer
    Public PlatformId As Integer

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> _
    Public CSDVersion As String
End Class

<StructLayout(LayoutKind.Sequential)> _
Public Structure OSVersionInfo2
    Public OSVersionInfoSize As Integer
    Public MajorVersion As Integer
    Public MinorVersion As Integer
    Public BuildNumber As Integer
    Public PlatformId As Integer

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128)> _
    Public CSDVersion As String
End Structure

Public Class LibWrap
    Declare Ansi Function GetVersionEx Lib "kernel32" Alias _
        "GetVersionExA" (<[In], Out> ByVal osvi As OSVersionInfo) As Boolean

    Declare Ansi Function GetVersionEx2 Lib "kernel32" Alias _
        "GetVersionExA" (ByRef osvi As OSVersionInfo2) As Boolean
End Class



Visual Studio筆記 :: Shutdown API sample

VC++
MSDN: http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(EXITWINDOWSEX);k(DevLang-%22C%2B%2B%22)&rd=true

Python notes: Calculate delay time by WinDBG log

用WinDBG開Event Timestamps可以產生下面格式的log: Fri Sep 21 18:43:50.946 2018 (UTC + 8:00): @#$#^$@#$^ 以下python code用來找出兩個指定log中的時間差