2

ShellExecuteEx を使用して、特定のディレクトリ内のファイルのグループをコピーまたはカットすることは可能ですか? Windows の機能は 1 つのファイルに対しては正常に機能しますが、この件に関するヒント (ファイル リストを含む) はどこにも見つかりません。

シェル項目固有のアクションを実行した後に Windows シェル関数の取り消し/やり直しが必要なため、代替方法 (xcopy など) は期待していません。

Microsoft msdn ライブラリにはまったく記載されていません。「lpfile」パラメーターに、PChar("Drive:\file1.fileExt","Drive:\file1.fileExt") やその他の一般的なリスト形式などの項目のリストを入力しようとしましたが、何もできませんでした実行すると、shellExecuteEx は 33 未満の値を返します。

'select' や 'addtoselection' などの動詞はありますか? フラグ SEE_MASK_IDLIST を追加する必要があります。この場合、ShellExecuteEx 動詞が実行されるファイル リストを定義できる ITEMIDLIST 構造ですか?

4

2 に答える 2

1

はい、可能ですが、Windows API に組み込み関数がある場合、外部コマンドを実行するのはなぜですか? コピー/切り取り操作については、SHFileOperation()を使用することをお勧めします。Microsoft はその目的のためのコード例を提供しています。

または、CopyFileEx()を使用してファイルをコピーし、MoveFile()を使用してファイルを移動することもできます。SHFileOperation()よりも高速です。

于 2010-10-17T01:43:52.087 に答える
0

確かに、SHFileOperationは(shellexexuteexと比較して)非常に簡単に使用できますが、この関数の動作は少し異なります。アプリケーションでコピーや切り取りなどのSHFileOperationを実行する場合、Windowsエクスプローラーに直接戻ると、「貼り付け」コンテキストメニュー項目は使用できません。シェルはwhellexecuteexとは別の方法で動作しているようです。ShellExecuteExをアプリケーションで実行し、単一のファイルを使用すると、エクスプローラーは「貼り付け」項目を直接有効にします。

とにかく、WinApi / ShellApiはそれについてあまり明確ではありません。要約すると、ファイルをコピーする方法はたくさんあるからです。

ただし、どのような点でも、undo / redoシェルコンテキストアイテムの動作は、エクスプローラープロセスと似ています。--ShellExecuteExは、元に戻す/やり直し機能を有効にしますが、単一のファイルでのみ動作します(または文書化されていません)-SHFileOperationは、ファイルリストで機能します(あなたが言ったように、#0で区切られ、終了リストは二重の#0です。 SHellコンテキストメニューは、ShellExecuteExほど操作に深くリンクされていないようです。-クリップボード:ファイルリストも許可されますが、すべての動作は許可されません(コピーのみ、貼り付けではありません)。 、ShellApiが少し同じであると指定している場合でも、クリップボードではありません...他では使用されていない特別な構造を使用しています...

統合:それはまったく明確ではありません。Windows APIは、ファイルを操作するための少なくとも3つの方法を提供しますが、ファイルリストについて話す場合、それは論理的ではなく、悪夢ですらあります。Microsoftの3人の男を除いて誰も使用しない古い構造体に対処する必要があります。シェル機能に取り組んでいます...(またはそうではありません)。

于 2010-10-22T00:15:19.777 に答える