- ベストアンサー
SHFileOperationの戻り値
OS:Win95、VB 5.0 SP3でSHFileOperation を使用してファイルコピーを実行しているのですが上書き確認で「いいえ」を押した時やコピーの実行中ダイアログのキャンセルボタンを押した時の戻り値などご存知の方いましたら、どうか教えて下さい。 (「いいえ」ボタンやキャンセルボタンを押しても、0でしか帰ってきません。) いろんなサイトを見て回ったのですが、戻り値について詳しく書いてあるところがありませんでした。 どなたかお助け下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>上書き確認で「はい」を答えたか「いいえ」を答えたかは、判定できないのでしょうか? どうも、戻り値で判定するのは無理のようですね。 どうしても上書きさせたいのであれば、FOF_NOCONFIRMATIONを指定すれば上書き確認メッセージは出てこなくなりますけども。 あとは、実際にAPI内でコピー等が行われたファイルが何かは、hNameMappingsの内容から取得できる(FOF_WANTMAPPINGHANDLEの指定が必要)ので、 上書きされたかはこれで判断するしかなさそうです。 FDがドライブに入っていないときなんですが、当方でも試したところ、戻り値0、fAnyOperationsAbortedも0でしたので、これも判断できないようですね。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>MSDNを見ました。問題は無いように思います。 ちゃんと読みましょう(^^;;; >int SHFileOperation( LPSHFILEOPSTRUCT >lpFileOp >); >Return Value > >Returns zero if successful, or nonzero otherwise. 戻り値はBOOLではなくintです。 で、0が成功、0以外が失敗です。 また、API自体の成功失敗をあらわすだけなので、キャンセルされたかはfAnyOperationsAbortedをチェックする必要があるのです。
補足
下記のロジックでテストしていますが、上書き確認で「はい」を答えようが「いいえ」を答えようが戻り値もfAnyOperationsAbortedもゼロです。コピー中にキャンセルを押すと戻り値が117が戻ってきます。 戻り値やfAnyOperationsAbortedの値の意味が記載されているページをMSDN内に見つけられませんでした(探し方が甘いのかもしれませんが)上書き確認で「はい」を答えたか「いいえ」を答えたかは、判定できないのでしょうか? また、フロッピーが入っていないときの警告にキャンセルを答えた場合の両方の値はゼロです。ちなみに、コピーが成功した場合も両方の値はゼロです。 SH.hwnd = Me.hwnd SH.wFunc = FO_COPY SH.pFrom = "C:\My Documents\TEST.txt" SH.pTo = "A:\TEST.txt" Ret = SHFileOperation(SH) If Ret = 0 Then msgbox SH.fAnyOperationsAborted else msgbox Ret End If
- taka_tetsu
- ベストアンサー率65% (1020/1553)
本家本元のUSのMSDNを見ましょう http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/reference/functions/shfileoperation.asp SHFILEOPSTRUCTのfAnyOperationsAbortedをチェックすればわかります。 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp
補足
ご回答ありがとうございます。 MSDNを見ました。問題は無いように思います。 fAnyOperationsAbortedをチェックしたところ、こちらは正常に終了(ファイルがコピーされていることも確認しました)してもFALSEしか帰ってきません。 なぜでしょうか?
お礼
このAPIだけでは無理なようですね。 他の関数やAPIを使用して何とか実現してみます。 いろいろ、ありがとうございました。