問題タブ [shell32]
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# - Check if a User is renaming a file in File Explorer at the Moment C#
I'm programming a C# program which listens for Space pressed in the File Explorer. When space is pressed I create a WPF window which shows the selected File in a WPF Window.
The only problem is, that this file Preview is also called when someone is editing the filename and presses space for a whitespace in the filename.
Is there a way to detect if a user is renaming a file at the moment?
Additional Information:
I know that i could listen for F2, but there's also the way to start renaming a file by clicking two times with the left mouse button or by right clicking the file and selecting rename. So this would be no good solution.
Technical Information (if needed):
I use GetForegroundWindow to check if the Window in the foreground is a explorer window. Then i use Hooks to listen for the pressed Keys in the explorer process in foreground.
To get the selected Item i use SHDocVw and Shell32
vb.net - vbでファイルを解凍する
ファイルを解凍しようとすると例外が発生します
try を削除すると、次のように表示されます。
追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
output.CopyHere(input.Items, 4)をoutput.CopyHere(input.Items, 148)に設定しようとしましたが、同じエラーが返されます。
(148 は zip 内のアイテムの数です)
vb.net - Shell32 抽出はプログレスバーで動作しますか?
プログレスバーに進行状況を表示しながら、プログラムで .zip ファイルを抽出し、そのコンテンツをフォルダーに配信しようとしています。プログレスバーが機能しない場合は、「Unzipper」が別のフォームに切り替えることができれば幸いです。抽出のために現在取得しているコードは次のとおりです。
私が得る助けをありがとう:)
c# - Web アプリケーションをホストした後、Shell32 での解凍が機能しない
以下のコードを使用してファイルを解凍しています。ローカルマシンで完全に動作します。しかし、このコードをサーバーでホストすると、ファイルを完全に解凍しますが、そこで何かを完了するのを待ちます。なぜそれが待っているのかわからない。
c# - ShellExecuteEx 関数は Windows 10 で別の方法で動作しますか?
ファイルの情報プロパティを開こうとしています。以前のバージョンの Windows では、プロパティ ウィンドウが表示され、コード内の次の関数に制御が渡されましたが、Windows 10 では、マウス クリックでファイル プロパティを閉じるまで、関数呼び出しが停止します。
Windows の新しいバージョンでは何が変更されたのでしょうか。
私のコードは以下の通りです:
winapi - IProgressDialog の質問: メッセージ ポンプが必要なように見えるので、そのマルチスレッドを誤解していますか? 終了する前に別のダイアログを開かないようにすることはできますか?
PROGDLG_MODAL モードで IProgressDialog を使用しようとしていますが、2 つの問題が発生しています。
まず、MSDN から収集したものと<shlobj.h>
IProgressDialog を説明するヘッダー ファイルのブロック コメントから、作業中のスレッドから直接それを使用し、IProgressDialog は別のスレッドから UI を実行することになっています。あれは、
応答性の高い進行状況ダイアログを起動して実行するには十分です。
ただし、実際には、メッセージを送り込む必要がありますわかりましたので、メッセージをポンプする必要がありますが、MSDN の言うことにはまだ混乱しています: IProgressDialog のどのメソッドをワーカー スレッドから実行できますか? これを知っていれば、コードを適切に再構築できます。do_more_work()
。そうしないと、ループが終了するまで進行状況ダイアログが表示されません。「オブジェクトはバックグラウンドスレッドで更新を処理します」と言うとき、MSDNを誤解していますか?
ただし、さらに深刻な問題はStopProgressDialog()
、ウィンドウがすぐに取り壊されないことです。実際、どちらもありませRelease()
ん。モーダルでない状況では、進行状況ダイアログが画面にしばらく残っているように見えます。この特定の問題は以前に対処されています。私はそれに行きます。ただし、今回は進行状況ダイアログを UI モーダル ダイアログとして使用しています。MessageBox()
IProgressDialog を解放した直後になどの別のダイアログ ボックス関数を呼び出すと、同じオーナー ウィンドウを持つ 2 つのモーダル ダイアログが表示されます。まだ実行されています。
非モーダルのケースは、 を呼び出した後に進行状況ダイアログを非表示にするだけでStopProgressDialog()
、他の人によって解決されました。これはウィンドウを非表示にしますが、モダリティについては何もしません。リンクされた質問の最後にある質問者の仮説に基づいて、私もWM_NULL
s afterを投稿して送信してみましたStopProgressDialog()
。それもうまくいきませんでした。
最後に、WinEvents フックをセットアップして、ウィンドウが破棄されるのを待ち、破棄されたときにイベント オブジェクトを起動しようとしました。これは機能します。これMessageBox()
は、進行状況ダイアログが破棄されるまで発生しません。ただし、これは完全には機能しません。メイン ウィンドウがすぐに再びアクティブになることMessageBox()
はなく、メイン ウィンドウのタスクバー アイコンをクリックするまでバックグラウンドに表示されることさえありません。
(それでも、LPARAM を WinEvents フックに渡すことができないため、異なるスレッド間で複数の IProgressDialogs を処理したい場合は、監視するウィンドウ ハンドル (および関連するイベント オブジェクト) のグローバル リストが必要になります。幸いなことに、私の目的ではこれは必要ありません.さらに、上記のすべては、CLSID_ProgressDialog も IOleWindow であるという前提の下にあり、それが変更された場合は...)
この WinEvents の方法で何か問題がありますか? 私はMsgWaitForMultipleObjectsEx()
正しく呼び出していないと思いますが、IProgressDialog がモダリティを適切に実装していないことが判明した場合、私は運が悪いと思います:S
以下のサンプル プログラムは、上記のすべてを実行します。Windows 7 64 ビット (64 ビットとしてビルド) 上の Visual Studio 2013 でテストしました。
更新ええ、さらに調べてみると、メッセージボックスを表示せずに進行状況ダイアログを停止すると、所有者ウィンドウにもフォーカスが戻らないようです! 進行状況ダイアログが単にモダリティを正しく処理していないと推測しています。PROGDLG_MODAL
フラグを削除すると、すべて正常に動作します。まあ:/モダリティを偽造するか、別のものに切り替える必要があります。
進行状況ダイアログ自体の上にメッセージ ボックスを表示することになり、Windows の将来のバージョンで IOleWindow が削除されないことを願っています。もっと良い方法がない限り?または、モダリティを手動で実行し、 の呼び出し後に進行状況ダイアログをモードレスのままにしておくのがStopProgressDialog()
十分でない限り (エラーは最初に報告された後にのみ報告さStopProgressDialog()
れます)、もう一度...