1

私はまたであるOpenFileDialog1つのシングルを持っています。ダイアログが開いたときに、すべてのインターネットショートカットも一覧表示されるのはなぜだろうか(たとえば、フォルダーへのショートカットは取得できますが、*。URLファイルは取得できません)。FilterDefaultExt

ユーザーに表示されるリストにネットで含めるためにオンにできるマジックスイッチはありますか?

現在、ユーザーがファイルを選択したことを検出した場合に設定して、FileOkイベントハンドラーで条件を処理する必要があります(100%の時間も機能しておらず、一部のショートカットはまだフィルターを通過しているようです)。ただし、そもそもリストにそれらを含めない方がよいでしょう。e.Canceltrue*.URLFileOk

4

2 に答える 2

2

迷惑。FileOkイベントのハンドラーを実装することでそれらを攻撃できるため、ユーザーは次のいずれかを選択できません。

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {
  string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);
  if (String.Compare(ext, ".url", true) == 0) e.Cancel = true;
}
于 2009-12-12T19:39:49.257 に答える
2

Windowsの[ファイルを開く]の一般的なダイアログに、フォルダとともにインターネットショートカットが表示されるのは正しいです。この動作が存在する理由はわかりませんが、存在します。これは、Win32(メモ帳で確認してください)およびWinFormsアプリで発生します。

これを回避する方法はありますが、警告:ハッキーです!FileDialogクラスからカスタムファイルダイアログクラスを派生させると、FileDialogの操作のあらゆる側面をカスタマイズするために使用できるいくつかの保護されたイベントにアクセスできます。

Dino Espositoは、2003年11月にMSDN Magazineの記事を書き、この手法がどのように機能するかを示しています。この記事はMSDNサイトにはありませんが、ウェイバックマシンのアーカイブ(http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/en-us/magazine )で入手できます。 /cc300434.aspx

おそらく、ファイルダイアログのWndProcをフックまたはサブクラス化し、ファイルリストコントロールを手動で調べ、ショートカットであるエントリを識別し、Windowsメッセージをファイルリストコントロールに送信してそれらのアイテムを削除する必要があります。次に、そのリストの更新(ディレクトリの変更など)を監視し、フィルタリング操作を繰り返す必要があります。

これは大きなハックになりますが、それは可能です。

これが大変な作業であるか、ハッキングが多すぎる場合は、FileOkイベントを使用して、FileOkイベントCancel=trueのCancelEventHandlerから戻ることにより、ユーザーがショートカットを選択できないようにすることをお勧めします。

于 2009-12-12T20:00:39.383 に答える