Click here to Skip to main content
Licence CPOL
First Posted 3 Feb 2009
Views 18,394
Downloads 182
Bookmarked 30 times

Remote Control of Microsoft FileDialog Class (OpenFileDialog)

By avramik | 23 Nov 2009
Remote control of Microsoft FileDialog class (OpenFileDialog)

1

2

3
1 vote, 50.0%
4
1 vote, 50.0%
5
4.50/5 - 2 votes
μ 4.50, σa 1.24 [?]

Introduction

If you frequently use a standard File Open Dialog in your program with a big collection of files, you very quickly start missing some default parameters that use them to open with details and order by date.

Background

At this point, if you don't want to rewrite the File Dialog in Visual Studio (2005, 2008) you start searching for an easy solution to this problem. The good examples for such solutions that I found are:

But I did not find how to order by date, or size !!!!!!

So, here is my small solution for this problem.

Using the Code

For this, I found how to remote control columns. The class that contains a column list is a "ListViewRemote".

To call this class, you need to know the Handler that is inside the FileOpenDialog. Here is a small code that you can enter in any form that helps you find the handle.

/// <summary> 
/// this part of code, i took from FileDialogExtender.aspx 
/// </summary> 
/// <param name="m"></param> 
protected override void WndProc(ref Message m)
{
  base.WndProc(ref m);
  if (m.Msg == 289) //Notify of message loop 
  {
    uint dialogHandle = (uint)m.LParam; //handle of the file dialog 
    if (dialogHandle != _lastDialogHandle) //only when not already changed 
    {
      //get handle of the listview 
      IntPtr SHELLDLL_DefView = Win32.FindWindowEx
			((IntPtr)dialogHandle, 0, "SHELLDLL_DefView", "");
      //send message to SHELLDLL_DefView 
      IntPtr result = Win32.SendMessage(SHELLDLL_DefView, 
			(int)Win32.WM_COMMAND, (int)DialogView, 0);

Now when you get the handle, you can call the ListViewRemote.

      if (DialogView == DialogViewTypes.Details)
      {
        ListViewRemote lvr = new ListViewRemote(SHELLDLL_DefView);
        lvr.SetSortBy((string)sortByComboBox.SelectedItem, 
			(ColumnSort)sortToComboBox.SelectedItem);
      }
  //remember last handle 
  _lastDialogHandle = dialogHandle;
}
}
}

The main idea of the solution is to catch the Header of ListView...

base.AssignHandle(Win32.FindWindowEx
	(SHELLDLL_DefView, 0, "SysListView32", "FolderView"));

IntPtr listViewHeader = Win32.FindWindowEx(listViewHandle, 0, "SysHeader32", "");

... and use the HDITEM as remote control item (and sometimes just generate mouse click).

The code example that I have given in this article is only the first step in how to resolve the problem of the File Dialog of Visual Studio.

History

  • 2/2/2009 First version
    Currently: sort asc and desc in any column of listview and choose what type of listview we need

Wow I did it. :) It's very annoying not to find a solution for such an important thing!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

avramik



Israel Israel

Member


Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Generalproblem with vista 64 bit Pinmemberhjozi19:15 3 Feb '09  
GeneralRe: problem with vista 64 bit Pinmemberavramik16:33 4 Feb '09  
GeneralRe: problem with vista 64 bit Pinmemberhjozi20:40 4 Feb '09  
GeneralCorrect link I think... PinmemberTeashirt211:44 3 Feb '09  
AnswerRe: Correct link I think... Pinmemberavramik12:32 3 Feb '09  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120210.1 | Last Updated 23 Nov 2009
Article Copyright 2009 by avramik
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid