とりあえず、サンプルと説明をちょこっと。
#uselib "psapi.dll"
#func GetDeviceDriverBaseName "GetDeviceDriverBaseNameA" int,var,int
#func GetDeviceDriverFileName "GetDeviceDriverFileNameA" int,var,int
#func EnumDeviceDrivers "EnumDeviceDrivers" var,int,var
font "MSゴシック",12
/* C++言語
LPVOID Address[ 1024 ]; ← アドレス格納用の数値配列だから、dim
TCHAR szFileName[ 1024 ]; ← ファイル名格納用だから、sdim で 1024 バイト確保
TCHAR szBaseName[ 1024 ]; ← ベース名格納用だから、sdim で 1024 バイト確保
DWORD dwSize; ← EnumDeviceDrivers が列挙した個のバイト数を入れる為の数値変数
DWORD dwMax; ← 上記のバイト数を個数に変換の変数(1個 4バイトだから、 4 / 1)
DWORD dwNow; ← ループカウンタ用の変数。HSPでは、標準で cnt が使えるのでHSPではいらない。
// デバイスドライバのロードアドレスを取得
EnumDeviceDrivers( Address, sizeof(Address), &dwSize );
// 取得した数を求める
dwMax = (dwSize / sizeof(LPVOID));
// デバイスドライバの一覧表示
for ( dwNow = 0 ; dwNow < dwMax ; dwNow++ ){
GetDeviceDriverBaseName( Address[dwNow], szBaseName, sizeof(szBaseName) );
GetDeviceDriverFileName( Address[dwNow], szFileName, sizeof(szFileName) );
printf( "%3d: %-30s %s\n", (dwNow + 1), szBaseName, szFileName );
}
return 0;
}
*/
//以下 HSPに変換したソース
dim Address,1024
sdim szFileName,1024
sdim szBaseName,1024
dwSize = 0
dwMax = 0
EnumDeviceDrivers Address,length(Address)*4,dwSize // 第二引数は、アドレス配列に格納できるサイズ INT配列 * 1024 なので 1024 * 4
dwMax = dwSize / 4 // HSPのINT は、4バイトなので、 dwSize / 4
repeat dwMax
GetDeviceDriverBaseName Address(cnt),szBaseName,1024 // 第三引数は、上記 sdim で確保したバイト数
GetDeviceDriverFileName Address(cnt),szFileName,1024 // 〃
mes ""+strf("%3d: %-30s %s",cnt + 1,szBaseName,szFileName)
loop
こんな感じでマイクロソフトのMSDN ってサイトの説明を見ながらやれば、OK
検索などで、「HSP DWORD」とか入れて検索すると、HSPではどんなのか調べることができるからがんばってね。