PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
8816 99/10/19 11:15:58 RE(10):解決!!SHFileOperation API の正しい使い方 By さい
8577 99/10/06 14:08:36 RE(9):SHFileOperation API の正しい使い方 By Taka
8576 99/10/06 16:32:50 RE(8):SHFileOperation API の正しい使い方 By Taka
8517 99/10/05 10:13:54 RE(7):PB6.5: ディレクトリを削除したい By さい
8515 99/10/04 19:19:26 RE(6):PB6.5: ディレクトリを削除したい By Taka
8509 99/10/04 15:30:56 RE(5):PB6.5: ディレクトリを削除したい By さい
8508 99/10/04 15:22:31 RE(4):PB6.5: ディレクトリを削除したい By kin
8471 99/10/01 11:17:20 RE(3):PB6.5: ディレクトリを削除したい By Taka
8467 99/10/01 09:37:16 RE(2):PB6.5: ディレクトリを削除したい By kin
8459 99/09/30 18:05:45 RE(1):PB6.5: ディレクトリを削除したい By Taka
8445 99/09/30 13:32:39 PB6.5: ディレクトリを削除したい By さい

カテゴリ:スクリプトの記述
日付:1999年10月06日 16:32 発信者:Taka
題名:RE(8):SHFileOperation API の正しい使い方

さいさん、こんにちは。
気になったので、とことん調べてみました。(^^;

まず、これまでの構造体を以下のように定義しなおします。
str_SHFILEOPSTRUCT {
whnd ulong,
wFunc ulong,
pFrom ulong, //やっぱりアドレスを与えたほうがいいらしい(string型でOKというのは嘘でした m(_ _)m)
pTo ulong, //同上
fFlags uint, // FILEOP_FLAGS型 → WORD → short int → 16ビット
fAnyOperationsAborted ulong,
hNameMappings ulong,
lpszProgressTitle ulong
}

pForm, pTo には、処理したいパス名を与えますが、終端は 0x00を2個つけなければならないようです。
これは、複数パス名を処理する時に \"C:\\aaaaa[null]C:\\bbbbb[null]C:\\ccccc[null][null]\" のように
与えることで、APIに正しく認識してもらうためです。
(GetLogicalDriveStringsというAPIと逆の要領です)
※実際に複数パスを処理するには、Flagsに FOF_MULTIDESTFILESビットを立てる必要があります。
 (pToに対してのみ。pFromはこのフラグなしでもnull区切りで複数指定可。)

この「ダブルNULLで終わる文字列変数」のポインタを与える方法は以下の通りです。

外部関数宣言:
function ulong lstrcat( ref blob buf, string add ) library \"kernel32.dll\" alias for \"lstrcatA\"
※第1引数がblobになっている点に注意

スクリプト:
string ls_from, ls_to
blob{1000} lb_from, lb_to //とりあえず1000バイト確保
ls_from = \"c:\\aaa\\bbb\\ccc\" //処理したいディレクトリ
ls_to = \"c:\\aaa\\bbb\\xxx\"
lb_from = blob(ls_from) //blobに変換(固定長で1000バイトあるので、後ろは全部0x00が埋まる)
lb_to = blob(ls_to)

str_SHFILEOPSTRUCT  fop

fop.pFrom = lstrcat( lb_from, \"\" ) //blob変数のアドレス
fop.pto = lstrcat( lb_to, \"\" )

rtn = SHFileOperation( fop )

この要領で、いままで変な動きをしていた点を解消できました。v(^o^

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS (記載なし)
DBMS (記載なし)
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.