問題タブ [pythoncom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - pyw ファイルを使用した Windows の起動で cmd が閉じない
私は、コンピューターのバックグラウンドで実行される小さなスクリプトに取り組んでいます。私はすでにスクリプトを動作させており、何時間ものグーグル検索とハンティングで答えが見つからなかった1つのことを除いて、すべてが機能しています。
ファイルの拡張子は .pyw で、コマンド プロンプトから実行すると、次のようになります。
cmd ウィンドウは続行し、通常の .py ファイルの場合のようにアイドル状態で起動することなく、別のプロンプトが表示されます。
ファイルをダブルクリックすると、cmd ウィンドウが問題なく開閉します。これは私にとって完璧です。
ただし、小さなバッチ ファイルを作成しようとしました。
そして、それをWindowsのスタートアップフォルダーに貼り付けました。ただし、コンピューターを再起動して動作するかどうかを確認すると、cmd ウィンドウは開きましたが、閉じませんでした。理由がわかりません。File.pyw をスタートアップ フォルダーに直接貼り付けたり、次のようにバッチ ファイルに終了コマンドを入れようとするなど、考えられるすべてのことを試しました。
しかし、おそらくご想像のとおり、それは失敗しました。コマンドをコードに直接入れてみたので、最後の直前に次の行がありました
しかし、これが機能しないことに気付いた後、私はそれを取り出しました。(重要な詳細: コードの最後の行は、プログラムが閉じるまでループするように設定されています。そのため、ファイルが終了する前にコンソールを閉じることができるように、pyw 拡張子を使用しようとしています)
次に、バッチ ファイルを 1 行だけに短縮しました。
それでもうまくいきません。バッチ ファイルを実行すると、コマンドが入力された状態で cmd ウィンドウが開きますが、コマンド ウィンドウを閉じずに、通常の .py ファイルのように実行されます。
コマンドを .batch ファイルから実行するとコンソールが閉じないのに、コマンド プロンプトから直接実行するとコンソールが閉じる理由を誰かが教えてくれますか?
更新:
このスクリプトは、「+」をすばやく 2 回押したときに、タスク、特に Google Chrome を閉じるためのクイック キーボード ショートカットを追加することを目的としています。これが私の完全なコードです(個人情報を除いたもの)
これは、pycharmまたはcmdから実行している場合はすべて完全に機能しますが、 C:\Users(my name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup に配置してから試してくださいアウト、何も起こりません。Windowsがファイルを実行し、何かが起こる前に終了するためだと思いますが、よくわかりません。起動時に実行し、シャットダウンするまでキー入力を取得するソリューションが本当に必要です。
python - スレッド化されたタイマーを使用する場合の OpenOPC での Python COM の問題
別のスレッドで OPC タグを読み取ろうとすると問題が発生します。現在 Windows を使用しており、DCOM モードを使用して Matrikon OPC Simuator に接続しています。以下のコードは正常に動作します
ただし、threading.Timer を使用してループ内でタグを読み取ろうとすると、
次のエラーが表示されます
OPCError: AddGroup: CoInitialize が呼び出されていません。
これは、異なるスレッド間でCOMオブジェクトを共有することと関係があると感じています(マルチスレッドでwin32comを使用)しかし、正しく動作させることはできません。どんな助けでも大歓迎です、ありがとう
python - Python COM サーバーを呼び出す C++ COM クライアント
Python 2.7 で (pythoncom を使用して) COM サーバーを作成し、C++ コードから呼び出したいのですが、方法がわかりません。
Python COM サーバー:
import pythoncom
class PyCOMTest:
_public_methods_ = ['getNextNum']
_reg_progid_ = "<some progid>"
_reg_clsid_ = "{<some hash string>}"
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
numbb = 0
def __init__(self):
self.num = 0
def getNextNum(self):
print "method called"
PyCOMTest.numbb = PyCOMTest.numbb + 1
return PyCOMTest.numbb
if __name__ == '__main__':
print "Registering COM server..."
import win32com.server.register
win32com.server.register.UseCommandLine(PyCOMTest)
Python で記述されたクライアントと VBScript で記述された別のクライアントを使用して、COM サーバーを呼び出すことができます。
C++ では、IUnknown を拡張して CoCreateInstance と QueryInterface を呼び出すインターフェイスが必要であることはわかっていますが、COM サーバーは完全に Python である必要があります。
何か案は?
python - pythoncom.pumpmessages() が機能しなくなるのはなぜですか?
そのため、キーストロークをログに記録するプログラムを作成していますが、プログラムのボックスをクリックするまでうまく機能します。ブラウザのコルタナのようにクリックして入力を開始すると、いくつかのストロークが記録されてから完全に停止しました。エラーも発生しなかったため、デバッグ方法がわかりません。
エラーがスローされないため、何が問題なのかわかりません。
python - Tkinter は pyHook で奇数を撤回します
ボタンを押すと非表示にする必要がある Tkinter GUI アプリケーションがあります。アプリケーションにフォーカスがあるとは想定できないため、キーロガー スタイルの pyHook を実装しました。ただし、pyHook によって起動された関数から draw() を呼び出すたびに、ウィンドウがハングし、強制的に閉じる必要があります。
テストするために、GUI 自体の中にボタンを追加して、まったく同じ関数を呼び出したところ、問題なく動作しました。どうしたの?「hiding」は両方とも出力されるため、実際にはwithdraw()呼び出し自体にかかっていることがわかります。
以下は、私が何を意味するかを示すための最小限の完全な検証可能な例です。
python - pyHook を使用した Tkinter テキスト エントリで GUI ウィンドウがハングする
テキストを入力する必要がある Tkinter GUI アプリケーションがあります。アプリケーションにフォーカスがあるとは想定できないため、キーロガー スタイルの pyHook を実装しました。
GUI ウィンドウにフォーカスがない場合、テキスト入力は問題なく機能し、StringVar は正しく更新されます。GUI ウィンドウにフォーカスがあるときにテキストを入力しようとすると、すべてがクラッシュします。
つまり、プログラムの起動後にコンソール ウィンドウなどをクリックすると、テキスト入力が機能します。すぐにテキストを入力しようとすると (GUI がフォーカスされた状態で開始されます)、または任意の時点でウィンドウに再度フォーカスしてテキストを入力すると、クラッシュします。
どうしたの?
以下は、私が何を意味するかを示すための最小限の完全な検証可能な例です。
python - サードパーティの COM を使用して DispatchWithEvents からイベントを返す
私のコードは、Events の print ステートメントから必要なものを出力します。しかし、クラスがインスタンス化される方法のために、データを返す方法がわかりません。さらに、print ステートメントは pythoncom.PumpWaitingMessages() が含まれている場合にのみ機能しますが、印刷されたデータなどは返しません。
出力されたものを戻り値として使用して、他の関数からアクセスできるようにしたいと考えています。
(さらに悪化した場合は、stdout をキャプチャすることもできます (これは最後の手段です)。)
コード:
出力: