VB6でTempフォルダをGetTempPath関数で取得するとショートファイル名でパスが返るので、
取得したショートファイル名をGetLongPathName関数でロングファイル名にしようと
しているのですが上手く出来ません。
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetLongPathName Lib "kernel32" Alias _
"GetLongPathNameA" (lpszShortPath As String, lpszLongPath As String, _
cchBuffer As Long) As Long
Dim nName As String
Dim Ret As Long
Dim Buf As String
nName = String$(260, vbNullChar)
Ret = GetTempPath(Len(nName), nName)
nName = Left$(nName, InStr(nName, vbNullChar) - 1)
Buf = String$(260, vbNullChar)
Ret = GetLongPathName(nName, Buf, 260)
Buf = Left$(Buf, InStr(Buf, vbNullChar) - 1)
Tempフォルダはショートファイル名(C:\DOCUME~1\Owner\LOCALS~1\Temp\)は
取得されますがGetLongPathName関数でロングファイル名が
返りません、戻り値は0が返ってしまいます。
コードが間違えているのか、元々取得出来ないのか分かりませんが
ご存知の方教えて下さいますようお願い致します。
尚、可能ならばFindFirstFile関数でロングファイル名を取得するのではでなくて
GetLongPathNameで取得したいと思っています。
No.1ベストアンサー
- 回答日時:
(回答)
Declare文の定義が間違っています。GetTempPathでは、
Byvalがついているのに、GetLongPathName ではついていないですよね。
この場合は、すべてByvalが必要です。
なお、GetLongPathName は、Win98以降で使用可能です。
Win95では、使用できないので注意してください。
(アドバイス)
1.Declare文の定義の仕方
WindowsAPIのDeclare文の定義方法は、MSDN(ヘルプ)
に記載されていますので、WindowsAPIを使うなら理解して
おいたほうがいいです。
Visual Basic ドキュメント
+ Visual Basic の使用方法
+ コンポーネント ツール ガイド
+ DLL および Windows API へのアクセス
+ DLL プロシージャの宣言
2.Netでサンプルをゲット
API名がわかっていれば、以下のキーワードで検索
してみればサンプルが見つかるのでは
「GetLongPathName VB」
キーワードに、最初はVB を入れて検索、見つからないときは
VBをはずすと検索する効率がいいと思います。
3.APIのエラーの調べ方
WindowsAPIでエラーの場合は、Err.LastDllErrorに
エラーコードが入っているので、Cのヘッダーファイルで
調べるか、WindowsAPIのFormatMessage関数で調べられます。
ご回答ありがとうございました。
関数の宣言部分を修正すると正常に動作しました
関数の宣言部分はネットから貼り付けただけで
確認していなかったです。
初歩的な確認ミス、すみませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
VB.NETで DataRow()を利用して...
-
VBA:小数点以下の数字を取得で...
-
like演算子内に変数って使えな...
-
データ数をカウントしたいのですが
-
アクセスしてきたコンピュータ...
-
Spreadの選択行の取得について
-
利用者側のMACアドレスを取得し...
-
ListViewで複数選択された項目...
-
VB .netにて現在時刻+1時間後...
-
getParameter と getAttribut...
-
VBA リストボックス内の値を複...
-
.NETで現在時刻を常に動作させ...
-
UWSCでhtmlソースの文字列を取...
-
リクエストからArrayListのデー...
-
エクセルVBAで複数選択できるよ...
-
URLパラメータの取得方法を教え...
-
DataGridView 複数選択で行番...
-
JavaScriptにおいてコンピュー...
-
count(*)で取得した値をJAVAの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
count(*)で取得した値をJAVAの...
-
データ数をカウントしたいのですが
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
Flexgridで選択行の列の値を取...
-
エクセルVBAで複数選択できるよ...
-
JavaScriptでWindowsログオンID...
-
利用者側のMACアドレスを取得し...
-
郵便番号検索APIにてget Elemen...
-
COMポート 名前を取得する方法
-
コンボボックス表示文字列を取...
-
VBA Shapesの座標からセル位置...
-
Spreadの選択行の取得について
-
VBScriptで数値にコンマを付け...
-
C言語におけるコンピュータ名・...
-
Excel VBA でログインしてい...
おすすめ情報