main.cpp
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 11k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /*----------------------------------------------------------------------------
  2. / Title;
  3. /   main.cpp
  4. /
  5. / Authors;
  6. /   David De Vorchik (daviddv)
  7. /
  8. / Notes;
  9. /   Browse the DS
  10. /----------------------------------------------------------------------------*/
  11. #include "windows.h"
  12. #include "windowsx.h"
  13. #include "commctrl.h"
  14. #include "resource.h"
  15. #include "shlobj.h"
  16. #include "shlwapi.h"
  17. //
  18. // Private headers from the shell/dsui projects
  19. //
  20. #include "comctrlp.h"
  21. #include "shellapi.h"
  22. #include "shsemip.h"
  23. #include "shlwapip.h"
  24. #include "common.h"
  25. #pragma hdrstop
  26. #define INITGUID
  27. #include "dsshell.h"
  28. /*-----------------------------------------------------------------------------
  29. / Globals and stuff
  30. /----------------------------------------------------------------------------*/
  31. #define INI_FILENAME      TEXT("browse.ini")
  32. HINSTANCE g_hInstance = NULL;
  33. BOOL CALLBACK Browse_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
  34. void Browse_OnInitDialog(HWND hDlg, LPTSTR pDefaultScope);
  35. void Browse_OnBrowse(HWND hDlg);
  36. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
  37. #define WRITE_STRING(tag, value)    
  38.             WritePrivateProfileString(TEXT("Browse"), tag, value, INI_FILENAME);
  39.             
  40. #define WRITE_INT(tag, value)   
  41.             WritePrivateProfileStruct(TEXT("Browse"), tag, &value, SIZEOF(value), INI_FILENAME)
  42. #define READ_STRING(tag, value)    
  43.             GetPrivateProfileString(TEXT("Browse"), tag, TEXT(""), value, ARRAYSIZE(value), INI_FILENAME);
  44. #define READ_INT(tag, value)    
  45.             GetPrivateProfileStruct(TEXT("Browse"), tag, &value, SIZEOF(value), INI_FILENAME)
  46. #define CHECK_BUTTON(hDlg, idc, state)  
  47.             CheckDlgButton(hDlg, idc,  state ? BST_CHECKED:BST_UNCHECKED)
  48.                 
  49. /*-----------------------------------------------------------------------------
  50. / Browse_DlgProc
  51. / -------------
  52. /   Handle dialog messages for this window.
  53. /
  54. / In:
  55. /   hDlg -> dialog to be initialized
  56. /
  57. / Out:
  58. /   -
  59. /----------------------------------------------------------------------------*/
  60. BOOL CALLBACK Browse_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  61. {
  62.     BOOL fResult = FALSE;
  63.     switch ( uMsg )
  64.     {
  65.         case WM_INITDIALOG:
  66.             Browse_OnInitDialog(hDlg, (LPTSTR)lParam);
  67.             break;
  68.         case WM_COMMAND:
  69.         {
  70.             switch ( LOWORD(wParam) )
  71.             {
  72.                 case IDOK:
  73.                 case IDCANCEL:
  74.                     EndDialog(hDlg, LOWORD(wParam));
  75.                     break;
  76.                 case IDC_BROWSE:
  77.                     Browse_OnBrowse(hDlg);
  78.                     break;
  79.                 case IDC_DEFAULTSCOPE:
  80.                 {
  81.                     EnableWindow(GetDlgItem(hDlg, IDC_SCOPE), 
  82.                                     IsDlgButtonChecked(hDlg, IDC_DEFAULTSCOPE)== BST_CHECKED);
  83.                     break;
  84.                 }
  85.                 case IDC_EXPANDONOPEN:
  86.                 {
  87.                     EnableWindow(GetDlgItem(hDlg, IDC_EXPANDTO), 
  88.                                     IsDlgButtonChecked(hDlg, IDC_EXPANDONOPEN)== BST_CHECKED);
  89.                     break;
  90.                 }
  91.                 
  92.                 case IDC_RETURNFORMAT:
  93.                 {
  94.                     EnableWindow(GetDlgItem(hDlg, IDC_RETURNAS), 
  95.                                     IsDlgButtonChecked(hDlg, IDC_RETURNFORMAT)== BST_CHECKED);
  96.                     break;
  97.                 }
  98.                 case IDC_CREDENTIALS:
  99.                 {
  100.                     EnableWindow(GetDlgItem(hDlg, IDC_USERNAME), IsDlgButtonChecked(hDlg, IDC_CREDENTIALS)== BST_CHECKED);
  101.                     EnableWindow(GetDlgItem(hDlg, IDC_PASSWORD), IsDlgButtonChecked(hDlg, IDC_CREDENTIALS)== BST_CHECKED);
  102.                     break;
  103.                 }
  104.                 default:
  105.                     break;
  106.             }
  107.         }
  108.     }
  109.     return fResult;
  110. }
  111. /*-----------------------------------------------------------------------------
  112. / Browse_OnInitDialog
  113. / ------------------
  114. /   Initialize the dialog (the result viewer).
  115. /
  116. / In:
  117. /   hDlg -> dialog to be initialized
  118. /   pDefaultScope -> default scope to use when browsing
  119. /
  120. / Out:
  121. /   -
  122. /----------------------------------------------------------------------------*/
  123. void Browse_OnInitDialog(HWND hDlg, LPTSTR pDefaultScope)
  124. {
  125.     TCHAR szBuffer[MAX_PATH];
  126.     BOOL fNoButtons = FALSE;
  127.     BOOL fNoLines = FALSE;
  128.     BOOL fNoLinesAtRoot = FALSE;
  129.     BOOL fNoRoot = FALSE;
  130.     BOOL fIncludeHidden = FALSE;
  131.     BOOL fExpandOnOpen = FALSE;
  132.     BOOL fEntireDS = FALSE;
  133.     BOOL fReturnFormat = FALSE;
  134.     BOOL fCredentials = FALSE;
  135.     READ_STRING(TEXT("DefaultScope"), szBuffer);
  136.     SetDlgItemText(hDlg, IDC_SCOPE, szBuffer);
  137.     CHECK_BUTTON(hDlg, IDC_DEFAULTSCOPE, lstrlen(szBuffer) != 0);        
  138.     
  139.     READ_STRING(TEXT("ExpandTo"), szBuffer);
  140.     SetDlgItemText(hDlg, IDC_EXPANDTO, szBuffer);
  141.     CHECK_BUTTON(hDlg, IDC_EXPANDTO, lstrlen(szBuffer) != 0);        
  142.     READ_INT(TEXT("ExpandOnOpen"), fExpandOnOpen);
  143.     READ_INT(TEXT("NoButtons"), fNoButtons);
  144.     READ_INT(TEXT("NoLines"), fNoLines);
  145.     READ_INT(TEXT("NoLinesAtRoot"), fNoLinesAtRoot);
  146.     READ_INT(TEXT("IncludeHidden"), fIncludeHidden);
  147.     READ_INT(TEXT("EntireDS"), fEntireDS);
  148.     READ_INT(TEXT("ReturnFormat"), fReturnFormat);
  149.     READ_INT(TEXT("Credentials"), fCredentials);
  150.     CHECK_BUTTON(hDlg, IDC_EXPANDONOPEN, fExpandOnOpen);
  151.     CHECK_BUTTON(hDlg, IDC_NOBUTTONS, fNoButtons);
  152.     CHECK_BUTTON(hDlg, IDC_NOLINES, fNoLines);
  153.     CHECK_BUTTON(hDlg, IDC_NOLINESATROOT, fNoLinesAtRoot);
  154.     CHECK_BUTTON(hDlg, IDC_INCLUDEHIDDEN, fIncludeHidden);
  155.     CHECK_BUTTON(hDlg, IDC_ENTIREDS, fEntireDS);
  156.     CHECK_BUTTON(hDlg, IDC_RETURNFORMAT, fReturnFormat);
  157.     CHECK_BUTTON(hDlg, IDC_CREDENTIALS, fCredentials);
  158.     EnableWindow(GetDlgItem(hDlg, IDC_EXPANDTO), IsDlgButtonChecked(hDlg, IDC_EXPANDONOPEN)== BST_CHECKED);
  159.     EnableWindow(GetDlgItem(hDlg, IDC_SCOPE), IsDlgButtonChecked(hDlg, IDC_DEFAULTSCOPE)== BST_CHECKED);
  160.     EnableWindow(GetDlgItem(hDlg, IDC_RETURNAS), IsDlgButtonChecked(hDlg, IDC_RETURNFORMAT)== BST_CHECKED);
  161.     EnableWindow(GetDlgItem(hDlg, IDC_USERNAME), IsDlgButtonChecked(hDlg, IDC_CREDENTIALS)== BST_CHECKED);
  162.     EnableWindow(GetDlgItem(hDlg, IDC_PASSWORD), IsDlgButtonChecked(hDlg, IDC_CREDENTIALS)== BST_CHECKED);
  163. }
  164. /*-----------------------------------------------------------------------------
  165. / Browse_OnBrowse
  166. / ----------------
  167. /   Browse the DS using the DsBrowseForContainer API
  168. /
  169. / In:
  170. /   hDlg -> parent of find dialog
  171. /
  172. / Out:
  173. /   -
  174. /----------------------------------------------------------------------------*/
  175. void Browse_OnBrowse(HWND hDlg)
  176. {
  177.     HRESULT hr;
  178.     TCHAR szRoot[MAX_PATH] = TEXT("");
  179.     TCHAR szBuffer[MAX_PATH] = TEXT("");
  180.     WCHAR szUserName[MAX_PATH] = TEXT("");
  181.     WCHAR szPassword[MAX_PATH] = TEXT("");
  182.     DSBROWSEINFO dsbi = { 0 };
  183.     UINT idResult;
  184.     BOOL fNoButtons = FALSE;
  185.     BOOL fNoLines = FALSE;
  186.     BOOL fNoLinesAtRoot = FALSE;
  187.     BOOL fNoRoot = FALSE;
  188.     BOOL fIncludeHidden = FALSE;
  189.     BOOL fExpandOnOpen = FALSE;
  190.     BOOL fEntireDS = FALSE;
  191.     BOOL fReturnFormat = FALSE;
  192.     BOOL fCredentials = FALSE;
  193.     // initialize the structure (its already NULL)
  194.     dsbi.cbStruct = SIZEOF(dsbi);
  195.     dsbi.hwndOwner = hDlg;
  196.     dsbi.pszTitle = TEXT("Select a location to start the query from");
  197.     dsbi.pszRoot = NULL;
  198.     dsbi.pszPath = szBuffer;
  199.     dsbi.cchPath = ARRAYSIZE(szBuffer);
  200.     dsbi.dwFlags = 0;
  201.     dsbi.pfnCallback = NULL;
  202.     dsbi.lParam = (LPARAM)0;
  203.     // read the parameters from the dialog
  204.     GetDlgItemText(hDlg, IDC_SCOPE, szRoot, ARRAYSIZE(szRoot));
  205.     WRITE_STRING(TEXT("DefaultScope"), szRoot);
  206.     GetDlgItemText(hDlg, IDC_EXPANDTO, szBuffer, ARRAYSIZE(szBuffer));
  207.     WRITE_STRING(TEXT("ExpandTo"), szBuffer);
  208.     fNoButtons = IsDlgButtonChecked(hDlg, IDC_NOBUTTONS) == BST_CHECKED;
  209.     fNoLines = IsDlgButtonChecked(hDlg, IDC_NOLINES) == BST_CHECKED;
  210.     fNoRoot = IsDlgButtonChecked(hDlg, IDC_NOROOT) == BST_CHECKED;
  211.     fNoLinesAtRoot = IsDlgButtonChecked(hDlg, IDC_NOLINESATROOT) == BST_CHECKED;
  212.     fIncludeHidden = IsDlgButtonChecked(hDlg, IDC_INCLUDEHIDDEN) == BST_CHECKED;
  213.     fEntireDS = IsDlgButtonChecked(hDlg, IDC_ENTIREDS) == BST_CHECKED;
  214.     fExpandOnOpen = IsDlgButtonChecked(hDlg, IDC_EXPANDONOPEN) == BST_CHECKED;
  215.     fReturnFormat = IsDlgButtonChecked(hDlg, IDC_RETURNFORMAT) == BST_CHECKED;
  216.     fCredentials = IsDlgButtonChecked(hDlg, IDC_CREDENTIALS) == BST_CHECKED;
  217.     
  218.     WRITE_INT(TEXT("ExpandOnOpen"), fExpandOnOpen);
  219.     WRITE_INT(TEXT("NoButtons"), fNoButtons);
  220.     WRITE_INT(TEXT("NoLines"), fNoLines);
  221.     WRITE_INT(TEXT("NoLinesAtRoot"), fNoLinesAtRoot);
  222.     WRITE_INT(TEXT("IncludeHidden"), fIncludeHidden);
  223.     WRITE_INT(TEXT("EntireDS"), fEntireDS);
  224.     WRITE_INT(TEXT("ReturnFormat"), fReturnFormat);
  225.     WRITE_INT(TEXT("Credentials"), fCredentials);
  226.               
  227.     // browse using the flags etc set above
  228.     if ( IsDlgButtonChecked(hDlg, IDC_DEFAULTSCOPE) == BST_CHECKED )
  229.         dsbi.pszRoot = szRoot;
  230.     if ( fNoButtons )
  231.         dsbi.dwFlags |= DSBI_NOBUTTONS;
  232.     if ( fNoLines )
  233.         dsbi.dwFlags |= DSBI_NOLINES;
  234.     if ( fNoLinesAtRoot )
  235.         dsbi.dwFlags |= DSBI_NOLINESATROOT;
  236.     if ( fIncludeHidden )
  237.         dsbi.dwFlags |= DSBI_INCLUDEHIDDEN;
  238.     if ( fEntireDS )
  239.         dsbi.dwFlags |= DSBI_ENTIREDIRECTORY;
  240.     if ( fExpandOnOpen && lstrlen(szBuffer) )
  241.         dsbi.dwFlags |= DSBI_EXPANDONOPEN;
  242.     if ( fReturnFormat )
  243.         dsbi.dwFlags |= DSBI_RETURN_FORMAT;
  244.     if ( fCredentials )
  245.     {
  246.         GetDlgItemText(hDlg, IDC_USERNAME, szUserName, ARRAYSIZE(szUserName));
  247.         GetDlgItemText(hDlg, IDC_PASSWORD, szPassword, ARRAYSIZE(szPassword));
  248.         dsbi.dwFlags |= DSBI_HASCREDENTIALS;
  249.         dsbi.pUserName = szUserName;
  250.         dsbi.pPassword = szPassword;
  251.     }
  252.         
  253.     idResult = DsBrowseForContainer(&dsbi);
  254.     if ( idResult != IDOK )
  255.         wsprintf(szBuffer, TEXT("Result code was %08x"), idResult);
  256.     SetDlgItemText(hDlg, IDC_RESULT, szBuffer);
  257. }
  258. /*-----------------------------------------------------------------------------
  259. / Main function for the app - handle initalisation etc.
  260. /----------------------------------------------------------------------------*/
  261. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  262. {
  263.     TCHAR szBuffer[MAX_PATH];
  264.     LPTSTR pDefaultScope = NULL;
  265.     g_hInstance = hInstance;
  266.     InitCommonControls();
  267.     CoInitialize(NULL);    
  268.     if ( lpCmdLine && *lpCmdLine )
  269.     {
  270.         MultiByteToWideChar(CP_ACP, 0, lpCmdLine, -1, szBuffer, ARRAYSIZE(szBuffer));
  271.         pDefaultScope = szBuffer;
  272.     }
  273.     DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_BROWSE), NULL, Browse_DlgProc, (LPARAM)pDefaultScope);
  274.     CoUninitialize();
  275.     return 0;
  276. }