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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.