VB6 NetUserGetLocalGroupsでユーザ名に漢字を指定するとグループ名がとれない

解決


m  2006-05-23 19:14:27  No: 95474

VB6です。

NetUserGetLocalGroups API を使用して権限があるかを確認しているのですが、漢字のユーザでログインしている場合にグループ名がとれません。
漢字の場合に取得する方法はないのでしょうか?よろしくお願いします。


K.J.K.  2006-05-23 20:04:40  No: 95475

まずUnicodeを意識したAPI関数の呼び出し方になっているのか、を
チェックしてみては。


  2006-05-23 20:12:04  No: 95476

このように行っています。

' サーバー名を設定(空文字の場合はローカルコンピュータ)
    strServerName = StrConv("", vbUnicode)

' ユーザー名
strUserName = StrConv(argUserName, vbUnicode)

' ローカルグループのリストを取得する
lngWin32apiResultCode = NetUserGetLocalGroups(strServerName, _
                                                      strUserName, _
                                                      0, _
                                                      LG_INCLUDE_INDIRECT, _
                                                      lngBufPtr, _
                                                      MAX_PREFERRED_LENGTH, _
                                                      lngEntriesRead, _
                                                      lngTotalEntries)

>まずUnicodeを意識したAPI関数の呼び出し方になっているのか


Blue  2006-05-23 20:21:43  No: 95477

> NetUserGetLocalGroups
のDeclare宣言はどうなっていますか?
まさか、引数にString型の変数を取るようになっていませんよね?
(Unicodeを意識したAPI関数の呼び出し方とはまさにこのこと)

一、二番目の引数は ByValのLong型で宣言し、
呼び出すときは、 StrPtr関数を使い渡します。

ちなみに
> StrConv("", vbUnicode)
> StrConv(argUserName, vbUnicode)
は変換対象が、Unicode(VBで設定した文字列)である場合無意味です。


  2006-05-23 20:33:31  No: 95478

>のDeclare宣言はどうなっていますか?
>まさか、引数にString型の変数を取るようになっていませんよね?
>(Unicodeを意識したAPI関数の呼び出し方とはまさにこのこと)

>一、二番目の引数は ByValのLong型で宣言し、
>呼び出すときは、 StrPtr関数を使い渡します。

まさにこれでした。ありがとう御座いました。


Blue  2006-05-23 20:35:53  No: 95479

> は変換対象が、Unicode(VBで設定した文字列)である場合無意味です。
これは間違っていますね。
無意味ではなく、文字列の並び(文字コードの並び?)をShift_JISだと思って、Unicodeに変換するんですかね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加