生産がす: 日記ちゃんバグの問題を無事解決。
いままでの方法でパスの取得がうまくいかなかったら新しい方法でパスを取得する。
Obtaining a File Name From a File Handle (Windows)
を参考にした。
GetLogicalDriveStrings()で
{"A:\",0,"C:\",0,0}
といったNULLで区切られたドライブ名一覧を得られる。
QueryDosDevice()は
A:や
C:といったドライブ名から
\Device\Floppy0や
\Device\HarddiskVolume1といったデバイス名を取得できる。
GetLogicalDriveStrings()で得たドライブ名から'\'を削った文字列を、
つまり
C:\を
C:にして、
QueryDosDevice()に渡してデバイス名を得られる。
GetProcessImageFileName()を使うと
\Device\HarddiskVolume1\sumishiro\(省略)\test.exe
といった文字列を取得できる。
ので、さっき取得したデバイス名をGetProcessImageFileName()で得た文字列と比較して
一致するようなら元のドライブ名で置換すれば
C:\sumishiro\(省略)\test.exeといった文字に変換できる。
という流れ。
\Device\HarddiskVolume1\sumishiro\(省略)\test.exeの
\Device\HarddiskVolume1の部分を
C:に置換する。
std::stringが使えるのならもっと手軽にできそう。
実行ファイルがでかくなるから使わなかったが。
0 件のコメント:
コメントを投稿