トップページ > プログラム > 2017年02月19日 > hFztBwNz

書き込み順位&時間帯一覧

11 位/263 ID中時間01234567891011121314151617181920212223Total
書き込み数00000000100000001800000010



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net

書き込みレス一覧

【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
82 :デフォルトの名無しさん[]:2017/02/19(日) 08:24:54.20 ID:hFztBwNz
以前紹介のあったレジストリーの読み取れルーチン
'http://makoto-watanabe.main.jp/freebasic/tipsRegistry.html
'名称変更して ReadRegistry() → RegistryRead02()となっている。
2016.09にレジストリーエディタを使って、レジストリーのダンプリストを作成。
その中から、「Mozilla/」「User Agent」「UserAgent」を検索して見つかったレジストリーパスを読み取っている。
'[HKEY_CURRENT_USER\(何かの文字\)Software\Microsoft\Windows\CurrentVersion\Internet Settings]
と'サブキーを取得して、その後に同じディレクトリーを付け足してUserAgentの内容を読み取る場合が多い。
しかも、一部内容は消えている。何で消えたかなどは不明。
レジストリーのOpen/Closeは成功しているが
RegEnumKeyEx(hKey, IQQ, StrPtr(Moji), @Nagasa, 0, 0, 0, @File)
の実行で、エラー234が発生している。
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
84 :デフォルトの名無しさん[]:2017/02/19(日) 16:57:53.28 ID:hFztBwNz
http://madia.world.coocan.jp/vb/API/RegEnumKeyEx.htm
を見本に、サブキー取得ルーチンを作っていた。
>>82の
egEnumKeyEx(hKey, IQQ, StrPtr(Moji), @Nagasa, 0, 0, 0, @File)の実行で、エラー234が発生している。
の原因がやっとわかった。
Nagasa = Len(Moji)
では、常に Nagasa = 0となる。
Const MojiLen As Long = 1024
Dim SubKeysNameBuffZString As ZString * MojiLen 'サブキー名が格納されるバッファ
と定義して
Nagasa = MojiLen
とする必要があった。
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
85 :デフォルトの名無しさん[]:2017/02/19(日) 17:03:39.05 ID:hFztBwNz
多分動くと思うけど、ライブ化のための整理前の状態でup
Public Function RegistrySubKeyList(RootKey as HKEY, TopSubKeyString As String, SubKeyNameString() As String, Ierror As Long) As Wata
'Subキーの名を列挙します
'http://madia.world.coocan.jp/vb/API/RegEnumKeyEx.htm

Dim hKey As HANDLE
Dim SubKeyZString As ZString * 1024
Dim SubKeyZStringPtr As LPCSTR
SubKeyZStringPtr = @SubKeyZString
Dim Jerror As Long

RegistrySubKeyList = 0

'RootKey = HKEY_LOCAL_MACHINE '(保守用)
'TopSubKeyString = "BCD00000000\Objects": '(保守用) 前後の「\」なし
'TopSubKeyString = "SYSTEM\CurrentControlSet\Services\xmlprov\Parameters\SchemaGroups\User"
'TopSubKeyString = "SYSTEM\CurrentControlSet"
'RootKey = HKEY_CURRENT_USER
'TopSubKeyString = "Software\Microsoft\Windows\CurrentVersion\Internet Settings"
If (TopSubKeyString = "") Then
'Ret = 234(バッファサイズの不足) 発生
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
86 :デフォルトの名無しさん[]:2017/02/19(日) 17:04:26.69 ID:hFztBwNz
ElseIf (Left$(TopSubKeyString, 1) = "\") Then
'Ret = 161(指定されたパスは無効です) 発生
Else
'Fun RegQueryInfoKey() 用変数
'Dim As DWORD ClassBuffSize 'クラス文字列バッファのサイズ (MS指示: 0を指定する)
Dim as DWORD SubKeysSU 'サブキーの数
Dim as DWORD SubKeysMaxLen 'サブキー名の最長の長さ
Dim as DWORD ClassMaxLen 'クラス文字列の最長の長さ
Dim as DWORD KeyNameSU 'レジストリエントリの数
Dim as DWORD KeyNameMaxLen 'レジストリエントリ名の最長の長さ
Dim as DWORD KeyValMaxLen 'レジストリエントリのデータの最長の長さ
Dim as DWORD SecurityLen 'セキュリティ記述子の長さ
Dim LastWriteTime As FILETIME '最後の書き込み時刻

SubKeyZString = TopSubKeyString
Dim SubKeyNameStringTSU as Long, SubKeyNameStringSU As Long
SubKeyNameStringTSU = 100
SubKeyNameStringSU = 0
Redim SubKeyNameString(SubKeyNameStringTSU)


Const MojiLen As Long = 1024
Dim IQQ as DWORD 'サブキーのインデックス番号
Dim SubKeysNameBuffZString As ZString * MojiLen 'サブキー名が格納されるバッファ
Dim SubKeysNameBuffSize As DWORD = MojiLen 'サブキー名バッファのサイズ
'Dim ClassBuff As ZString * MojiLen 'クラス文字列バッファ MS指定 0
'Dim ClassBuffSize as DWORD 'クラス文字列バッファのサイズ MS指定 0
Dim FileWriteTime As FILETIME '最終更新時刻
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
87 :デフォルトの名無しさん[]:2017/02/19(日) 17:09:40.55 ID:hFztBwNz
また引っかかった。。続きはそのうち
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
88 :デフォルトの名無しさん[]:2017/02/19(日) 17:11:40.75 ID:hFztBwNz
’以下の実行文が引っ掛かったみたい。全角にしてみた。
'バッファを確保する
  SubKeysNameBuffZString = ””: ’String(MojiLen, Chr(0))
  SubKeysNameBuffSize = MojiLen: ’Len(SubKeysNameBuffZString)

'キーをオープンしてハンドルを得る
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
89 :デフォルトの名無しさん[]:2017/02/19(日) 17:13:36.21 ID:hFztBwNz
Ierror = RegOpenKeyEx(RootKey, @SubKeyZString, 0, KEY_ALL_ACCESS, @hKey)


If (Ierror = ERROR_SUCCESS) Then
'MessageBox(TakaHWND,"Hello Open 成功","Messagebox caption",MB_ICONINFORMATION)
Jerror = RegQueryInfoKey(hKey, 0, 0, 0, @SubKeysSU, @SubKeysMaxLen, @ClassMaxLen, @KeyNameSU, @KeyNameMaxLen, @KeyValMaxLen, @SecurityLen, @LastWriteTime)
If (Jerror = ERROR_SUCCESS) Then

'MessageBox(TakaHWND,"Hello Info 成功","Messagebox caption",MB_ICONINFORMATION)

'MessageBox(TakaHWND,"Hello SubKeysSU:"+Str$(SubKeysSU)+"SubKeys最大長さ"+Str$(SubKeysMaxLen)+")","Messagebox caption",MB_ICONINFORMATION)
'MessageBox(TakaHWND,"Hello 保存キー数"+str$(KeyNameSU) +"キー名最大長さ"+ Str$(KeyNameMaxLen) +"キー値最大長さ"+ Str$(KeyValMaxLen) +")","Messagebox caption",MB_ICONINFORMATION)
for IQQ = 0 To SubKeysSU -1
'サブキーを取得
SubKeysNameBuffSize = MojiLen
' 1 2 3 4 5 6 7 8
Jerror = RegEnumKeyEx(hKey, IQQ, @SubKeysNameBuffZString, @SubKeysNameBuffSize, 0, 0, 0, @FileWriteTime)

If (Jerror = ERROR_SUCCESS) Then
'MessageBox(TakaHWND,"Hello RegEnumKeyEx 成功("+SubKeysNameBuffZString+") Loop :"+Str$(IQQ),"Messagebox caption",MB_ICONINFORMATION)
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
90 :デフォルトの名無しさん[]:2017/02/19(日) 17:15:52.10 ID:hFztBwNz
>>89 本文が長すぎるというので、コメント行('declare function RegEnumValuなんたら)を消した。
以下の6行は、全角化している
          IF (SubKeyNameStringSU >= SubKeyNameStringTSU) then
            SubKeyNameStringTSU = SubKeyNameStringTSU + 20
            redim preserve SubKeyNameString(SubKeyNameStringTSU)
          End If
          SubKeyNameStringSU = SubKeyNameStringSU + 1
          SubKeyNameString(SubKeyNameStringSU) = SubKeysNameBuffZString
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
91 :デフォルトの名無しさん[]:2017/02/19(日) 17:16:40.54 ID:hFztBwNz
Else
'Jerror = 234(バッファサイズの不足) 発生
'MessageBox(TakaHWND,"Hello RegEnumKeyEx Err:"+Str$(Jerror )+"("+SubKeysNameBuffZString+")","Messagebox caption",MB_ICONINFORMATION)
'MessageBox(TakaHWND,"Hello RegEnumKeyEx Err:"+Str$(Jerror )+"("+Str$(Len(SubKeysNameBuffZString))+"," +Str$(SubKeysNameBuffSize)+")","Messagebox caption",MB_ICONINFORMATION)

End If
'初期化する
SubKeysNameBuffZString = ""
SubKeysNameBuffSize = MojiLen: 'Len(SubKeysNameBuffZString)

Next IQQ
Else
'MessageBox(TakaHWND,"Hello RegQueryInfoKey Error."+Str$(Jerror),"Messagebox caption",MB_ICONINFORMATION)
End If
'ハンドルを解放
RegCloseKey(hKey)
Else
'MessageBox(TakaHWND,"Hello RegOpenKeyEx Error."+Str$(Ierror),"Messagebox caption",MB_ICONINFORMATION)
End If
End If
End Function
【QBASIC互換!?】FreeBasic【GPL】 2 [無断転載禁止]©2ch.net
92 :デフォルトの名無しさん[]:2017/02/19(日) 17:28:43.40 ID:hFztBwNz
こんなところ。使いたい人は適当に使って。

内容の読み書き、サブキー名とキー名の取得、
の4ルーチンがあれば、中身を読み取って何とかできると思われる。

>>82のUserAgentのように
途中がちょっと違って、前後が同じパスのレジストリーのデータを読む場合のように、
サブキーを取得して、(値が保存されていることを前提に)適当に読み取るというルーチンを作成できれば
ユーザー名全員の取得が可能となる。

Htmlファイル作成ルーチンの、<META>タグに著者名を指定する場合がある
このときに、著者名を誰で登録するか、の選択をするときぐらいしか使わない。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。