問題タブ [windows-shell]
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++ - IContextMenu3 HandleMenuMsg2 が呼び出されることはありません
IContextMenu3
およびを拡張するシェル拡張を実装しようとしています。セクションHBMMENU_CALLBACK メソッドIShellExtInit
で説明されている方法を使用してメニュー項目を挿入していますが、私のプロジェクトではメソッドまたはが呼び出されません。HandleMenuMsg2
HandleMenuMsg
電話を受けるために必要なものを誰か説明してもらえHandleMenuMsg2
ますか?
私のATLオブジェクトは次のように実装されています:
そして、nanoANT ページで説明されているようなメニュー項目を挿入しています。
これらすべてで、エクスプローラーのコンテキストメニューにメニューエントリが表示されますが、画像は表示されず、メソッドHandleMenuMsg
とメソッドの両方HandleMenuMsg2
が呼び出されることはなく、テストしているシステムは WinXP です (Vista では を使用しているため、すべて問題ありませんhbmpItem
)。
初期化が不足していますか?誰か私を説明できますか?
ありがとう
c# - 動的に作成されたショートカットのドラッグアンドドロップ
特定の引数と初期ディレクトリを使用して他のプログラムを起動するためのショートカットを作成するC#アプリケーションがあります。ユーザーがWindowsフォームからショートカットをドラッグして、デスクトップやスタートメニューなどの関連する場所にドロップできるようにしたいと思いますが、それを処理する方法がよくわかりません。正しい方向?
このようなPInvokeとIShellLinkを使用したサンプルをいくつか見たことがあります。または、ここのようにSOに関する回答を読んだことがあります。これは、ショートカットを作成して.lnkファイルに保存するのに役立ちます。ユーザーがドラッグ操作を開始するとき、たとえば信号を処理することによって、呼び出しでデータを渡す必要があると思います。それは私が得た限りでは、ターゲットがドロップを受け入れることを期待しているタイプとショートカットをシリアル化する方法を正確に知る必要があると思いますが、その部分に関する情報は見つかりませんでした。DoDragDrop()
MouseDown
おそらく別のオプションは、ドロップの場所を取得し、それをアプリケーションから管理することですが、それを行う方法については少しわかりません。
フレームワークのバージョンは現在3.5であり、私はWindowsプラットフォームのみを検討しています。
よろしくお願いします!
更新/解決策:
上記のShellLinkコードを使用して一時的なショートカットファイルを作成DataObject
し、次の例のように、ドラッグアンドドロップに使用しました。
PInvokeコード(ここには表示されていません)を考慮すると非常に複雑ですが、ターゲット名を使用してこの一時ファイルを作成する必要があります。誰かが知っているなら...えーと、ショートカット、それは大歓迎です!おそらく、John Knoellerがリンクを提供したコードを移植することによって(ありがとう!)。
vba - VBA zip ファイル エラー
以下のようなコードを使用して、いくつかのファイルを zip フォルダーに追加しています。
ほとんどの場合、これで問題なく動作しますが、時々エラーが発生します。
「(圧縮 (zip 形式) フォルダー エラー) 出力ファイルを作成できません」. このエラーは、VBA コードの外部で非同期的に発生するため、トラップして是正措置を取ることはできません。
ブレーク モードに入り、次のステップに戻る場合:
その後、ファイルは正しく追加されます。
この問題の原因となっている圧縮フォルダーまたはソース ファイルに何らかのロックがあると推測していますが、これを確認する方法がわかりません。追加されるファイルは Microsoft Access 2007 から作成された pdf ファイルであり、完全修飾パスを使用しており、コードは次のように実行され、zip ファイルごとに最大 10 個の pdf が作成されることに注意してください。
郵便番号を作成
このループを実行します。
これを修正するか、出力ファイルを作成できませんエラーをトラップする方法はありますか? ありがとう
c# - C#経由で「フォルダ内表示」/「ターゲット検索」を再現する方法
Chrome を使用している場合、ファイルをダウンロードすると、オプション (フォルダに表示) を選択できます。これにより、ファイルが含まれているディレクトリが開き、ファイルが強調表示されます。同様に、ショートカットのプロパティを表示すると、同じ機能の [ターゲットを検索] ボタンを選択できます。Shell Functions の MSDN エントリの適切な部分を調べるだけでなく、多数の検索を試みましたが、役に立ちませんでした。単純な API 呼び出し、またはその一連の呼び出しだと思いますが、見つかりません。
c# - シェル メニュー項目区切り
私の質問はここで繰り返されるものかもしれませんが、グーグルで調べた後でもまだ解決策がありません。
ファイルのシェル コンテキスト メニュー項目を追加しました。つまり、エクスプローラー内でファイルを右クリックすると、メニューにカスタム メニュー項目が表示されます。
利用した -
HKLM\Software\Classes*\shell\myappname HKLM\Software\Classes*\shell\myappname\command
しかし、私ができないのは、そのコンテキスト メニュー内に区切り記号を追加することです。
Windows アプリケーションの作成に C# 2005 を使用しています。
誰かが私の問題を解決するのを手伝ってくれませんか。
貴重な時間を共有していただきありがとうございます。
c# - .NET から Windows エクスプローラーの [開く] メニュー リストにプログラムでアクセスする
Windows エクスプローラーでファイルを右クリックすると、[プログラムから開く] メニュー項目に、クリックしたファイルのファイル タイプに基づいて、使用可能なアプリケーションのリストが表示されます。
例として次の図を参照してください。
(ソース: magerquark.de )
ここで、C# .NET 2.0 アプリケーション内から、特定のファイル拡張子/タイプ (「png」など) のアプリケーションのリストをプログラムで読み取ることができるようにしたいと考えています。
例えば
質問:
このリストを取得することは可能ですか?
windows - 「送信先」および「プログラムから開く」コンテキストメニューを表示するにはどうすればよいですか?
少し前に、Delphiで特定のファイルのWindowsコンテキスト(右クリック)メニューをポップアップする方法について質問しました。ただし、すべてが(ほぼ)正常に機能している場合でも、同じファイル名でエクスプローラーを右クリックしても、[送信先...]および[プログラムから開く...]サブメニューには項目がありません。正常に動作します。(たとえば、「送信先...」には「デスクトップ(ショットカットの作成)」、「メール受信者」などがあります)。
これらのメニューを表示するにはどうすればよいですか?
batch-file - テキストを Windows コンソール アプリの標準入力に送信する
一部のシェル コマンドを自動化するために .bat ファイルを書き込もうとしています。ほとんどのコマンドは簡単で、直接バッチ ファイルに入れることができますが、コマンド ライン パラメーターを取得する代わりに、「標準入力」を使用して必要なオプションを入力する必要があるコマンドが 1 つあります。それが何を意味するのか正確にはわかりません。誰かがこれを行う方法を教えてもらえますか? 入力したいテキストは、ディレクトリ内のファイルの 1 つの内容です: "options.txt" バッチ ファイル "$(additionaloptions)" 内の変数と連結します。
わかる?
c# - Windows エクスプローラーのコンテキスト メニュー項目をプログラムで実行する
項目を右クリックしたときにエクスプローラーが表示するコンテキスト メニュー項目に到達するための一貫した確実な方法はありますか? メニューを表示したくありません。バックグラウンドでアイテムを解析し、プログラムで実行したいだけです。
IShellFolder、IContextMenu、およびその他の COM インターフェイスのさまざまな組み合わせを試しましたが、一貫して機能するものが見つかりません。
Windows エクスプローラーのコンテキスト メニュー項目をプログラムで実行する方法は?
c++ - よく知られているすべての仮想フォルダー GUID は何ですか?
GUID が関連付けられている仮想フォルダーがいくつかあるようです (コントロール パネル、デスクトップ) -
::{00021400-0000-0000-c000-000000000046} // デスクトップ
これらのブレーズはどこで定義されていますか? それらはいつ使用されますか?
私が欲しいのは、あいまいさのない仮想フォルダーを表す文字列を持つ方法です。
たとえば、デスクトップ用の PIDL を作成すると、表示名は "C:\Users\Steve\Desktop" として返されます。
現時点ではそうですが、実際には正しいフォルダではありません。エクスプローラーでそのフォルダーに移動できます。デスクトップ全体ではなく、デスクトップ上のファイルの一部が含まれています。
私が欲しいのは、その場所を常に仮想デスクトップフォルダー (いくつかのものだけでなく、すべてのコンテンツを含むフォルダー) に移動する文字列としてエンコードする方法です。
そのようなGUIDの決定的なリストを知っている人はいますか? または、特定の PIDL を PIDL に変換するにはどうすればよいですか?
SHGetDisplayName(pidl, SHGDN_*) を試しました - デスクトップ pidl のすべてのバージョンで、短い「デスクトップ」または「C:\Users\Steve\Desktop」のいずれかが返されます。(もちろん、'steve' アカウントでログインしています)。
アイデア/コメント/ポインタ?
編集:したがって、以下の回答を使用して、既知のフォルダー GUId のリストを取得できるようです。しかし、PIDL -> 既知のフォルダー GUID からプログラムで変換する方法を知っている人はいますか? ParseDisplayName("::{guid}") で PIDL を取得できると思いますが、GUID を取得する方法はありますか?
EDIT2: プログラムで GUID にアクセスする方法がまだ見つかりません。ただし、私の目的のために、最初にオブジェクトを作成するために使用する CSIDL_xxx を記録し、それを書き出して後で復元し、CSIDL を介して PIDL を作成します。これにより、正しい ID が保持されます (つまり、 「C:\Users\\Desktop」に劣化するのではなく、実際に仮想デスクトップを指す PIDL を生成します。
私にとっての秘訣は、常に CSIDL->PIDL を使用し、その間に文字列を使用しないことです。CSIDL->PIDL->string->PIDL = 非仮想パスへの縮退。
助けてくれてありがとう - そして、誰かがこの件についてもっと見つけて投稿してくれるかどうかを探し続けます。私は興味があります! ;)