問題タブ [getmodulefilename]
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.
c# - ウィンドウ ハンドル (hWnd) しかない場合に GetModuleFileName() を実行するにはどうすればよいですか?
C# 2.0 アプリケーションの外部にあるウィンドウの実行可能ファイルの名前を取得しようとしています。私のアプリは現在、「user32.dll」から GetForegroundWindow() 呼び出しを使用してウィンドウ ハンドル (hWnd) を取得しています。
掘り下げた結果、(PSAPI の) GetModuleFileNameEx() 関数を使用して名前を取得したいと思いますが、GetModuleFileNameEx() にはウィンドウではなくプロセスへのハンドルが必要です。
ウィンドウ ハンドルからプロセス ハンドルを取得することは可能ですか? (最初にウィンドウのスレッド ハンドルを取得する必要がありますか?)
私がやろうとしていることをより明確にするために、最初の文を編集しました。
アップデート!これが私のために働いていることがわかったC#コードです。唯一の注意点は、ドライブ文字が「?」であるファイル/パスを返す場合があることです。実際のドライブ文字 (「C」など) の代わりに。-- 理由はまだわかりません。
windows - GetModuleFileName の完全なバッファ サイズを計算するにはどうすればよいですか?
はGetModuleFileName()
バッファとバッファのサイズを入力として受け取ります。ただし、その戻り値は、コピーされた文字数と、サイズが十分でない場合 ( ERROR_INSUFFICIENT_BUFFER
) しかわかりません。
のファイル名全体を保持するために実際に必要なバッファー サイズを決定するにはどうすればよいですGetModuleFileName()
か?
ほとんどの人が使用MAX_PATH
していますが、パスがそれを超える可能性があることを覚えています(デフォルトの定義では260)...
(バッファのサイズとしてゼロを使用するトリックは、この API では機能しません - 以前に試しました)
scheme - チキンスキームはPerlの$0に相当しますか?
どうすればChickenSchemeでスクリプト名を確実に取得できますか?
-ssはスクリプト名を使い果たしているようです。そのため、ドットスラッシュを使用してスクリプトを実行しない限り、スクリプト名は表示されません。
scriptedmain.scm:
痕跡:
clojure - Clojure には Python の if __name__=="__main__" に相当するものがありますか?
重複の可能性: Python のイディオム「if name == ' main
'」に相当する clojure は何ですか?
を使用-main
しますが、解釈モードではなく、コンパイル モードでのみ実行されます。
を使用しますが、それはスクリプトの(if (.isAbsolute (java.io.File. *file*)) (main *command-line-args*))
実行中に実行されます。(load)
c++ - GetModuleFileNameA が奇妙な結果を返す
を使用して別のプロセスにロードされたモジュールの名前を取得しようとしていますGetModuleFileNameA
。
dbgHelp を使用してシンボルをロードし、そのモジュール ベース アドレスを取得しましたが、2 つの奇妙なことが起こります
。1.GetModuleFileNameA
システム エラー コード 5 が返されることがあります。アクセスが拒否されました。
2. 間違ったモジュール名を返します。モジュールAにあることがわかっている関数の場合、モジュールBの名前を取得します... :/
誰か助けてくれませんか?
ありがとう:)
c++ - GetModuleFileName ウイルス対策の誤検出 ??? 現在のプロセス PATH を取得する
こんにちは、現在のプロセスからパスを取得しようとしています...これが私の最初のコードです:
しかし、私がそれを実行しようとしているとき、Avira antivir はそれを次のように検出します: TR/Dropper.Gen :D 理由がわかりません:D ここに別のコードがあります:
そのバージョンでは TR/Dropper.Gen の問題は修正されていますが... WinMain () を使用したくないので、argv[0] はありません。パスを取得する別の方法または関数を知っている人はいますか? ウイルス対策との競合なし?
c++ - dll内からdllの親exeを見つける方法は?
どのプロセスがロードしたかに基づいて、dllでいくつかのことを行う必要があります。したがって、Windowsプログラミングに比較的慣れていないため、現在のdllをロードしたexeを見つける方法を理解するのに助けが必要です。これまでのところ、exeファイル名をハードコーディングしてきましたが、これは最もばかげたことです:D
1)GetModuleFileName()
関数の使用を提案した人がいます。しかし、これは私のアプリをクラッシュさせるようです (私はモジュールハンドルとして 0 を使用しました)。私は何も派手なことをしていません。次の構文を使用しました
GetModuleFileName(0,&fileName,MAX_PATH)
編集:ここから、dll 名のみを返すため、この呼び出しで .exe 名を取得できないことがわかりました:(
2)DllMainでこれを行うのは良い考えですか?? DllMain が複雑なことを行う場所ではないことはわかっています。ローダーロック関連の問題も理解しています。必要なのは、親プロセスの名前を見つけることだけです。
お時間をいただきありがとうございます。
追加: 親プロセス ID を取得した後、GetProcessImageFileName を使用しようとしました。アクセス違反エラーが発生します。デバッグしようとしたとき、openProcess 呼び出しが結果の引数 (イメージ ファイル パス -LPTSTR) を不適切なポインタとして残していることに気付きました。
エラー コード 87-INVALID PARAMETER は、GetProcessImageFileName 呼び出しによって返されます。
しかし、現在のプロセス ID は有効な ID です。
ここにコードがあります
私は何を間違っていますか??
ありがとう
重要な編集:
アイドル プロセスで openprocessを使用しようとしていることがわかりました。(つまり) 親プロセスを同期しているので、親プロセスがアイドル状態で待機している可能性があることを忘れていました。そのため、OpenProcess を使用してアイドル状態のプロセスを開くことができないという悪いニュースを受け取りました。アイドルプロセスのオブジェクトを調べるには、他にどのようにすればよいですか?? (スナップショットで見つけられなかったので、アイドル状態であることは確かです。enumerateprocess を使用してその ID を特定する必要がありました。ただし、スナップショットからの通常のプロセス列挙を使用して、最初に親プロセス ID を見つけます)
winapi - getmodulefilename は何をブロックする可能性がありますか?
マルチスレッドアプリケーションがあります。ワーカー スレッドの 1 つは、ログ記録のために GetModuleFilename を呼び出します。GetModuleFilename を呼び出す前にワーカー スレッドがロックを保持し、永久にブロックするデッドロックが発生しました。
このロック内から GetModuleFilename 呼び出しを削除することはできますし、削除しましたが、デッドロックがどのように発生するかについてはまだ非常に関心があります。
オンラインで読書をする: http://blogs.msdn.com/b/oldnewthing/archive/2004/01/28/63880.aspx
GetModuleFilename がローダーロックを取得するようです。これは、デッドロックのかなり良い候補のように思えました。
ただし、通常、ローダーロック内のスレッドは、上記のリンクのように dllmain を除いて、独自のコードを実行していません。
dll_thread_attach または detach は、ローダーロックと、作成または破棄される別のワーカースレッドで呼び出される可能性がありますが、これが使用しているロックを取得しようとする方法はわかりません。
また、メイン スレッドが GetModuleFilename スレッドが保持しているロックを取得しようとし、3 番目のスレッドがローダーロックを保持し、sendmessage などをメイン スレッドでブロックしている可能性もあります。ここでも、これが発生する状況は見つかりませんでした。
私が疑わしい他のスレッドの 1 つは、com オブジェクトを使用するスレッドです。スレッドは最初に coinitialize を呼び出すため、シングル スレッド アパートメントにする必要があります。ここでローダーロックと相互作用する可能性はありますか?
とにかく、このデッドロックが発生する正確な方法を特定できていません。だから私はいくつかのアイデア、またはローダーロックが取得されている他のケースに関する詳細情報、およびブロックされる可能性のあるローダーロック内でコードが実行される他のシナリオがあるかどうかを期待しています。
ありがとう。
c++ - 同じ値の2つのTCHARを比較するとfalseになります
アプリケーションパスを確認しようとしていますが、指定されたパスでない場合は移動してください。コードはしっかりしているように感じますが、正しく機能しません。
ファイルが新しいパスにある場合でも、結果はpCheck!=xPathになります。
「新しい場所」メッセージボックスが表示されません。最初の2つのメッセージボックスが表示されるとき、パスは同じです...
c - Windows で C 言語を使用して実行可能ファイルのディレクトリへの AppPath を取得する方法 (MinGW gcc を使用)
私の実行可能ファイルはこの場所にあります-> D:\Examples\C_Pro\newApp.exe また、その「C_Pro」フォルダーにはいくつかのファイルが含まれています ( file1.txt、file2.txt、file44.exe、newApp.c )
私のnewApp.cファイルには、このように同じフォルダにある「file44.exe」ファイルを実行するShellExecute関数が含まれています-> ShellExecute(NULL,"open","D:\Examples\C_Pro\file44.exe",NULL ,NULL,1)
このようにして、すべてが正常に動作します..
私はVBのAppPathのようなものについて話している
しかし、別の PC でこの newApp.exe を実行したい場合は、""D:\Examples\C_Pro\" を、別の PC の "newApp.exe" ファイルを含むパスに置き換えたい (C のように) :\ソフトウェア\ )
GetModuleFileName 関数を使用してパスを取得しますが、新しいディレクトリの PathRemoveFileSpec 関数が機能しない時点でのみ必要な newApp.exe 部分が含まれています。
また、GetModuleFileName のリターン パスも --> D:\Examples\C_Pro\newApp.exe のようになりますが、ShellEcxecute に何らかのパスを入力すると、このように二重の shalse (スペース シーケンス) が必要になります --> D:\Examples\C_Pro\
どうすればこの問題を解決できますか。
実際のコード スニペットはこれです...
しかし、私はこのようにしたいです。(これはダミー関数です。ここでの「some_Funtion」は説明用のダミー関数を意味します。