WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Hyper-V をプログラムでどうにかしてみる その12 (サムネイルイメージの取得)

Hyper-Vマネージャーでは現在の仮想マシンの状態をサムネルイメージで確認することができます。
20102512030524

このサムネイルイメージをプログラム的に取得することができます。 

Dim
objConnectionOptions As New ConnectionOptions()
objConnectionOptions.Impersonation = ImpersonationLevel.Impersonate
objConnectionOptions.EnablePrivileges = True
objConnectionOptions.Username = strAccount
objConnectionOptions.Password = strPassword
Dim objManagementScope As New ManagementScope("\\" + strServer + "\root\virtualization", objConnectionOptions)
objManagementScope.Connect()

Dim objComputerSystem As ManagementObject = Nothing
For Each objManagementObject As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'")).Get
    objComputerSystem = objManagementObject
Next

Dim objVirtualSystemsettingData As ManagementObject = Nothing
For Each objManagementObject As ManagementObject In objComputerSystem.GetRelated("Msvm_VirtualSystemsettingData")
    objVirtualSystemsettingData = objManagementObject
Next

Dim x As Integer = 640
Dim y As Integer = 480
For Each objVirtualSystemManagementService As ManagementObject In New ManagementObjectSearcher(objManagementScope, New ObjectQuery("SELECT * FROM Msvm_VirtualSystemManagementService")).Get
    Dim objParams As ManagementBaseObject = objVirtualSystemManagementService.GetMethodParameters("GetVirtualSystemThumbnailImage")
    objParams("WidthPixels") = x
    objParams("HeightPixels") = y
    objParams("TargetSystem") = objVirtualSystemsettingData.Path.Path
    Dim objManagementBaseObject As ManagementBaseObject = objVirtualSystemManagementService.InvokeMethod("GetVirtualSystemThumbnailImage", objParams, Nothing)
    Call ErrorCheck(objManagementBaseObject, objManagementScope)
    Dim bytData() As Byte = objManagementBaseObject("ImageData")

    Using objBitmap As New Bitmap(x, y, PixelFormat.Format16bppRgb565)
        Dim objRectangle As New Rectangle(0, 0, x, y)
        Dim objBitmapData As BitmapData = objBitmap.LockBits(objRectangle, ImageLockMode.WriteOnly, PixelFormat.Format16bppRgb565)
        System.Runtime.InteropServices.Marshal.Copy(bytData, 0, objBitmapData.Scan0, x * y * 2)
        objBitmap.UnlockBits(objBitmapData)
        objBitmap.Save(strVMName & ".jpg")
    End Using
Next

640×480の大きさのイメージをjpeg形式で保存しています。
これを、一定間隔で実行することで仮想マシンの状態をイメージで確認できるようになります。

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/137-ab9e2dd0
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。