1

仕事でいくつかのタスクを自動化したいと考えています。それらの 1 つは、パワー ポイント ファイルを結合して PDF に変換することです。私は少し初心者なので (Magus Heitland の Beginning Python を読み終えたばかりです)、具体的に何を求めているのか完全にはわかりません。

Windows では、複数のファイルを選択して右クリックし、Adobe PDF として結合を選択できます。変換したいファイルの「グループ化」を理解しました(ディレクトリをトラバースし、名前に基づいてリスト内にファイルをネストします)が、次のステップ(右クリック/結合コマンド)。

グーグルで調べると、win32api、pywinauto、ctypes などにたどり着きました。しかし、彼らが何をしているのかを読んでいると、私の初心者は、必要なツールが何であるかを知ることができません。

誰かがいくつかの良いリソースやヒントを提案できますか?

4

3 に答える 3

3

この質問に対する簡単な答えはありません。Windows では、コンテキスト メニュー エントリは、Windows エクスプローラーに登録されている COM コンポーネントであるシェル拡張の一種であるコンテキスト メニュー シェル拡張によって作成されます。ファイルのグループで任意のコンテキスト メニュー エントリを呼び出すには、次の操作を実行する必要があります。

  1. ファイルを含むシェル フォルダーのIShellFolderインターフェイスを取得します。
  2. IShellFolder::GetUIObjectOfを使用して、そのシェル フォルダーのコンテキスト メニュー ハンドラー オブジェクトを取得します。riid選択したファイルのリストと=で満たされた ITEMIDLIST を渡しますIContextMenu
  3. IContextMenu::InvokeCommandを呼び出して、ファイルのグループに対して目的のコマンドを実行します。

ctypesこれはすべて Python で (またはを介し​​て) 実装できますがwin32com、COM を直接サポートする言語 (C++ など) から始めて、動作するようになったら Python に変換するか、別のアプローチを使用する方がよいと思います。


編集実行環境を完全に制御できる場合は、ユーザー入力 (キーボードとマウス) をシミュレートするのに十分な場合があります。Python で行う方がはるかに簡単です。SendInputというシステム関数が 1 つだけ必要です。ctypes クイック グーグルで、 here経由で SendInput を使用する例が明らかになりました。

于 2010-12-22T10:48:01.753 に答える
1

シンプルなソリューションを探しているだけの場合は、変換するファイルのコマンド ライン引数を使用して Python スクリプトを呼び出す「送信先...」の右クリック ショートカットをカスタマイズできます。

送信先ショートカットを追加するには、Windows 7 または 32 ビット以前のバージョンを使用しているかどうかによって異なります。カスタムの送信先... ショートカットを追加する手順は、こちらにあります。すべてのファイルを 1 つのフォルダーに送信し、Python スクリプトを呼び出すか、選択したファイルをコマンド ライン引数として呼び出すことができます。

Send To Toysは 64 ビットで動作します。Send To Toys を使用すると、右クリックしたときに Python スクリプトとすべてのシェル エスケープ ファイル名をクリップボードに配置し、作成したコマンドをシェルに貼り付けることができます。構築に数秒しかかからないため、私はこの方法をよく使用します。

レジストリを微調整して、選択したファイルをターゲットとしてシェル コマンド (Python スクリプト) を呼び出すことにより、右クリック ショートカットを追加することもできます。手動でレジストリを微調整するか、RightClick Extenderなどを使用できます。

もう少し作業を進めると、カスタムのContextMenu クラス フォームを作成し、フォームに .NET 言語で応答できます。これには、C# または Ironpython が含まれます。

本当に Pro のような実装が必要な場合は、 Image Resizerの新しいオープン ソース バージョンのソース コードを変更できます。コンテキスト メニュー ハンドラの C++ ソースはこちらです。しかし、これらの最後の 2 つの提案は、必要以上に手間がかかるように思えます...

于 2010-12-22T14:07:05.913 に答える
1

をクリックしたときに実行される同等のコマンド ラインを正確に調べたい場合Combine、それが だったとしましょうc:\program files\adobe\combiner ...。この文字列を (ファイルのリストを として...) 作成し、実行します。subprocessモジュールの Popenがそれを行います。

import subprocess
cmd = [r"c:\program files\adobe\combiner"]
cmd.extend(file_list)
p = subprocess.Popen(cmd)

ただし、そのリンクを確認してください。Popen は多くの引数を取ります。これは最も単純な形式です。引数リストにする必要があるかどうかはわかりませんが、私が見た例にはあります。

于 2010-12-22T07:58:13.373 に答える