C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: EnumMonitorsの呼出し2回目


(過去ログ 98 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■58519 / inTopicNo.1)  EnumMonitorsの呼出し2回目
  
□投稿者/ KM (1回)-(2011/04/12(Tue) 11:51:09)

分類:[VB.NET/VB2005 以降] 

2011/04/12(Tue) 12:01:24 編集(投稿者)
2011/04/12(Tue) 12:01:18 編集(投稿者)

VB2010でEnumMonitorsの2回目の呼出で、
引数に構造体のポインタを指定するのですが、
その方法がわからないので教えてください。

まずこのように宣言しています。
Private Declare Function EnumMonitors Lib "winspool.drv" Alias "EnumMonitorsA" ( _
ByVal pName As String, _
ByVal Level As Integer, _
ByRef pMonitors As Integer, _
ByVal cbBuf As Integer, _
ByRef pcbNeeded As Integer, _
ByRef pcReturned As Integer) As Integer

1回目の呼出しはこのようにしてpcbNeededにバッファサイズは取得できました。
Call EnumMonitors(Nothing, 1, Nothing, Nothing, pcbNeeded, pcReturned)

2回目の呼出しではpMonitorsの部分にMONITOR_INFO_1構造体配列のポインタを渡さなければならないのですが、
どのようにして渡せば良いのか良いのか教えてください。
引用返信 編集キー/
■58531 / inTopicNo.2)  Re[1]: EnumMonitorsの呼出し2回目
□投稿者/ KM (2回)-(2011/04/12(Tue) 14:32:44)
2回目の呼出しはこのようにすると値の取得ができることがわかりました。
Dim pPrinterInfo As IntPtr = Marshal.AllocHGlobal(pcbNeeded)
Call EnumMonitors(Nothing, 1, pPrinterInfo, pcbNeeded, pcbNeeded, pcReturned)

ただ、pPrinterInfoからMONITOR_INFO_1構造体配列にはどうすればいいのかはまだわかりません。

引用返信 編集キー/
■58533 / inTopicNo.3)  Re[2]: EnumMonitorsの呼出し2回目
□投稿者/ shu (621回)-(2011/04/12(Tue) 15:36:52)
No58531 (KM さん) に返信
> 2回目の呼出しはこのようにすると値の取得ができることがわかりました。
> Dim pPrinterInfo As IntPtr = Marshal.AllocHGlobal(pcbNeeded)
> Call EnumMonitors(Nothing, 1, pPrinterInfo, pcbNeeded, pcbNeeded, pcReturned)
>
> ただ、pPrinterInfoからMONITOR_INFO_1構造体配列にはどうすればいいのかはまだわかりません。
>
MONITOR_INFO_1構造体は文字列1つだけなので、
Marshal.Overloads Public Shared Sub Copy(
ByVal source As IntPtr, _
ByVal destination() As Byte, _
ByVal startIndex As Integer, _
ByVal length As Integer _
)
でbyte配列に一括でコピーして
null(&h0)でデータを区切って各々をEncodingで文字列にすればよいかと思います。(予想ですが)

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -