HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0207
YuukiEnumDisplayDevices関数の使い方7解決


Yuuki

リンク

2017/2/7(Tue) 21:47:17|NO.78176

HSPでEnumDisplayDevices関数の使い方を教えてください。



この記事に返信する


Cheesehamburg7273

リンク

2017/2/8(Wed) 22:16:49|NO.78194




Yuuki

リンク

2017/2/9(Thu) 18:10:51|NO.78212

すみませんが、スクリプトを載せてもらえないでしょうか?



Sado

リンク

2017/2/10(Fri) 17:27:52|NO.78216

僕も気になってやってみたのですが、何も代入されず苦戦しています……お力になれず申し訳ありません。
引数にあてる値やポインタの間違いだと思うのですが、そこから先はサッパリでして。
このスレッドは勉強になります。

#uselib "user32.dll" ;user32.asよりコピペ #define global EnumDisplayDevices EnumDisplayDevicesA #func global EnumDisplayDevicesA "EnumDisplayDevicesA" sptr,sptr,sptr,sptr /* EnumDisplayDevices関数 https://msdn.microsoft.com/ja-jp/library/cc428500.aspx?f=255&MSPPError=-2147217396 Type DISPLAY_DEVICE cbSize As Long '構造体のサイズ DeviceName As String * 32 'デバイス名 DeviceString As String * 128 'デバイス名の文字列 StateFlags As Long '常に(0) DeviceID As String * 128 'デバイスID DeviceKey As String * 128 'デバイスキー End Type http://tokovalue.jp/Structure.htm#DISPLAY_DEVICE%E6%A7%8B%E9%80%A0%E4%BD%93より引用 */ //以下テスト------ ThisDisplayNum = 0 sdim DISPLAY_DEVICE,,6 EnumDisplayDevices 0,ThisDisplayNum,DISPLAY_DEVICE,0 repeat 6 mes DISPLAY_DEVICE.cnt loop stop



あり

リンク

2017/2/10(Fri) 22:06:56|NO.78218

APIを扱うのは久方ぶりなので間違ってるかもしれませんが

#uselib "user32.dll" ;user32.asよりコピペ #define global EnumDisplayDevices EnumDisplayDevicesA #func global EnumDisplayDevicesA "EnumDisplayDevicesA" sptr,sptr,sptr,sptr /* EnumDisplayDevices関数 https://msdn.microsoft.com/ja-jp/library/cc428500.aspx?f=255&MSPPError=-2147217396 Type DISPLAY_DEVICE cbSize As Long '構造体のサイズ DeviceName As String * 32 'デバイス名 DeviceString As String * 128 'デバイス名の文字列 StateFlags As Long '常に(0) DeviceID As String * 128 'デバイスID DeviceKey As String * 128 'デバイスキー End Type http://tokovalue.jp/Structure.htm#DISPLAY_DEVICE%E6%A7%8B%E9%80%A0%E4%BD%93より引用 */ //以下テスト------ notesel DeviceData repeat ThisDisplayNum = cnt sdim DISPLAY_DEVICE, 424 ;(4+32+128+4+128+128)=424byte lpoke DISPLAY_DEVICE, 0, 424 ;構造体のサイズを指定しておく EnumDisplayDevices 0,ThisDisplayNum,varptr(DISPLAY_DEVICE),0 ;構造体のポインタはvarptrで渡す if stat = 0 :break noteadd "DevNum= " + cnt sdim DeviceName, 32 memcpy DeviceName, DISPLAY_DEVICE, 32, 0, 4 ;構造体から情報を取り出す noteadd "DeviceName= "+DeviceName sdim DeviceString, 128 memcpy DeviceString, DISPLAY_DEVICE, 128, 0, 36 noteadd "DeviceString= " + DeviceString sdim DeviceID, 128 memcpy DeviceID, DISPLAY_DEVICE, 128, 0, 168 noteadd "DeviceID= " + DeviceID sdim DeviceKey, 128 memcpy DeviceKey, DISPLAY_DEVICE, 128, 0, 296 noteadd "DeviceKey= " + DeviceKey noteadd "\n" loop mesbox DeviceData, 640, 480, 4




osakana

リンク

2017/2/10(Fri) 22:57:33|NO.78219

少し見通し良く書くと、
dupptr がちょっと難しいかもしれませんが
こんな感じでしょうか。

#uselib "user32.dll" #func EnumDisplayDevices "EnumDisplayDevicesA" sptr,sptr,sptr,sptr // 変数の準備 dim dd, 106 ; DISPLAY_DEVICE 構造体と見なし配列作成(424÷4=106) dd = 424 ; 初めの4バイトに構造体のサイズを格納する pdd = varptr(dd) ; 何回も使うのでポインタを保持しとく // 変数のポインタでクローンを作成 dupptr DeviceName , pdd + 4 , 32 , vartype("str") dupptr DeviceString , pdd + 36 , 128 , vartype("str") dupptr StateFlags , pdd + 164 , 4 , vartype("int") dupptr DeviceID , pdd + 168 , 128 , vartype("str") dupptr DeviceKey , pdd + 296 , 128 , vartype("str") repeat EnumDisplayDevices 0, cnt, pdd, 0 if stat = 0 :break ; 無ければ 0 が stat に入る mes "DeviceName " + DeviceName mes "DeviceString " + DeviceString mes "StateFlags " + StateFlags ; 「常に(0)」のはずが値が変化してるのは何故だろう mes "DeviceID " + DeviceID mes "DeviceKey " + DeviceKey mes "--------------------" num ++ ; 列挙数 loop title "全 " + num + " 個" ; タイトルに個数表示



Yuuki

リンク

2017/2/11(Sat) 09:46:16|NO.78220

ありがとうございます



Yuuki

リンク

2017/2/11(Sat) 09:46:39|NO.78221

解決チェック



ONION software Copyright 1997-2023(c) All rights reserved.