⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessenum.cpp

📁 查看文件可被那些用户使用,然后列出清单。进行查询。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	SendMessage( hTree, LVM_GETITEMTEXT, Item, (LPARAM) &lvi );
	_bstr_t	Text( tmp );
	return Text;
}


//----------------------------------------------------------------------
//  
// MainDialog
//
// Main interface for editing output
//
//----------------------------------------------------------------------
LRESULT CALLBACK MainDialog( HWND hDlg, UINT message, UINT wParam, LONG lParam ) 
{
	static CResizer		resizer;
	int					idx;
	OPENFILENAME		open;
	static TCHAR		exportPath[ MAX_PATH ];
	TCHAR			*	p;
	bool				ok;
	DWORD				style;
	static bool			Starting = true;
	static HCURSOR		hCursor;

	switch ( message ) {

		case WM_INITDIALOG:
			// set anchor points
			resizer.OnInitDialog( hDlg );
			resizer.SetHorz( GetDlgItem(hDlg,IDC_REFRESH),		ANCHOR_LEFT );
			resizer.SetHorz( GetDlgItem(hDlg,IDC_EXPORT),		ANCHOR_LEFT );
			resizer.SetVert( GetDlgItem(hDlg,IDC_LIST),			ANCHOR_BOTH );
			resizer.SetHorz( GetDlgItem(hDlg,IDC_PATH),			ANCHOR_BOTH );
			resizer.SetHorz( GetDlgItem(hDlg,IDC_DESCRIPTION),	ANCHOR_LEFT );
			resizer.SetHorz( GetDlgItem(hDlg,IDC_STATUS),		ANCHOR_BOTH );
	
			// clear status text
			SetWindowText( GetDlgItem(hDlg,IDC_STATUS),	_T("") );
	
			// Set cursor for window
			hCursor = LoadCursor( NULL, IDC_ARROW );
			SetClassLong( hDlg, GCL_HCURSOR, (LONG)hCursor );
			SetCursor( hCursor );

			// Create listview columns
			InitListViewColumns( GetDlgItem(hDlg,IDC_LIST), Columns, sizeof Columns/sizeof Columns[0] - 1 );
			style = GetWindowLong( GetDlgItem(hDlg,IDC_LIST), GWL_STYLE );
			style |= LVS_SHOWSELALWAYS;
			SetWindowLong( GetDlgItem(hDlg,IDC_LIST), GWL_STYLE, style );
			ListView_SetExtendedListViewStyleEx( GetDlgItem(hDlg,IDC_LIST), LVS_EX_LABELTIP, LVS_EX_LABELTIP );

#if 0
			if ( ! IsDomainAdmin() )  {
				MessageBox( hDlg, _T("Information may be incomplete because you are not a domain administrator"), APPNAME, MB_OK|MB_ICONWARNING );
			}
#endif

			{
				TCHAR Path[ MAX_PATH ] = _T("");
				GetEnvironmentVariable( _T("SYSTEMROOT"), Path, MAX_PATH );
				SetDlgItemText( hDlg, IDC_PATH, Path );
			}

			return TRUE;

		case WM_SETCURSOR:
			switch ( LOWORD(lParam) )  {
				case HTTOP:
				case HTBOTTOM:
				case HTLEFT:
				case HTRIGHT:
				case HTTOPLEFT:
				case HTTOPRIGHT:
				case HTBOTTOMLEFT:
				case HTBOTTOMRIGHT:
					break;
				default:
					SetCursor( hCursor ); 
					return true;
			}
			break;

		case WM_APP_ENUM_COMPLETE:
			EnableWindow( GetDlgItem( hDlg, IDC_REFRESH ), true );
			EnableWindow( GetDlgItem( hDlg, IDC_PATH    ), true );
			EnableWindow( GetDlgItem( hDlg, IDC_BROWSE_FILE  ), true );
			EnableWindow( GetDlgItem( hDlg, IDC_BROWSE_REG  ), true );
			EnableWindow( GetDlgItem( hDlg, IDCANCEL    ), false );
			EnableWindow( GetDlgItem( hDlg, IDC_EXPORT  ), true );
			hCursor = LoadCursor( NULL, IDC_ARROW );
			SetClassLong( hDlg, GCL_HCURSOR, (LONG)hCursor );
			SetCursor( hCursor );
			if ( g.Abort )  {
				SendMessage( g.Abort, WM_CLOSE, 0, 0 ); 
//				MessageBox( hDlg, _T("Scan cancelled by user"), APPNAME, MB_OK|MB_ICONINFORMATION );
			}
			break;

		case WM_NOTIFY:
			if ( LOWORD(wParam) == IDC_LIST )  {
				NMLISTVIEW	* nm = (NMLISTVIEW *) lParam;
				switch( nm->hdr.code )  {
					case LVN_COLUMNCLICK:
						// sort column
						SortListView( nm->hdr.hwndFrom, nm->iSubItem, Columns );
						break;
					case NM_DBLCLK:
						// double click item, so display device properties
						idx = ListView_GetSelectionMark( GetDlgItem(hDlg,IDC_LIST) );
						if ( idx >= 0 )  {
							TCHAR	path[ MAX_UNCPATH ];
							ListView_GetItemText( GetDlgItem(hDlg,IDC_LIST), idx, 0, path, MAX_UNCPATH );
							ShellExecute( NULL, _T("explore"), path, NULL, NULL, SW_SHOWNORMAL );
						}
						break;
					case NM_RCLICK:
						// Create pop-up menu
						idx = ListView_GetSelectionMark( GetDlgItem(hDlg,IDC_LIST) );
						if ( idx >= 0 )  {
							TCHAR	path[ MAX_UNCPATH ];
							ListView_GetItemText( GetDlgItem(hDlg,IDC_LIST), idx, 0, path, MAX_UNCPATH );
							idx = _tcsnicmp( path, _T("HK"), 2 ) ? MF_ENABLED : MF_GRAYED;
						} else {
							idx = MF_ENABLED;
						}
						{
							HMENU hMenu		= LoadMenu( g.hInst, _T("POPUP") );
							HMENU hSubMenu	= GetSubMenu( hMenu, 0 );
							POINT	pt;
							GetCursorPos( &pt );
							EnableMenuItem( hSubMenu, IDC_PROPERTIES, MF_BYCOMMAND|idx );
							TrackPopupMenu( hSubMenu, 
											TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
											pt.x, pt.y, 0, hDlg, NULL); 
 						    DestroyMenu( hMenu ); 
						}
						break;
				}
			}
			break;

		case WM_COMMAND:
			// Normal notifications
			switch ( LOWORD(wParam) ) {

				case IDC_QUIT:
					// quit
					SendMessage( hDlg, WM_CLOSE, 0, 0 );
					break;

				case IDCANCEL:
					// is an enumeration in progress?
					if ( ! IsWindowEnabled( GetDlgItem( hDlg, IDC_REFRESH ) ) )  {
						// have we already cancelled it?
						if ( g.Abort == NULL )  {
							g.Abort = CreateDialog( g.hInst, _T("ABORT"), hDlg, AbortDialog );
						}
					}
					break;

				case IDC_ABOUT:
					DialogBox( g.hInst, _T("ABOUT"), hDlg, AboutDialog );
					break;

				case IDC_FILEOPTIONS:
					DialogBox( g.hInst, _T("FILEPERM"), hDlg, FilePermDialog );
					break;
				
				case IDC_HELPCONTENTS:
					DialogBox( g.hInst, _T("HELP"), hDlg, HelpDialog );
					break;
				
				case IDOK:
					// convert to IDC_REFRESH
					return SendMessage( hDlg, WM_COMMAND, MAKEWPARAM(IDC_REFRESH,HIWORD(wParam)), lParam );

				case IDC_BROWSE_FILE:
					{
						BROWSEINFO	bi	= { 0 };
						bi.hwndOwner	= hDlg;
						bi.ulFlags		= BIF_NONEWFOLDERBUTTON | BIF_RETURNONLYFSDIRS ; 
						bi.lpszTitle	= _T("Select the folder to enumerate:");
						ITEMIDLIST * pidl = SHBrowseForFolder( &bi );
						TCHAR		Path[ MAX_UNCPATH ];
						if ( pidl  &&  SHGetPathFromIDList( pidl, Path ) )  {
							SetDlgItemText( hDlg, IDC_PATH, Path );
							LPMALLOC pMalloc = NULL;
							SHGetMalloc( &pMalloc );
							pMalloc->Free( pidl );
						}
					}
					break;

				case IDC_BROWSE_REG:
					{
						_bstr_t	Path;
						if ( DialogBoxParam( g.hInst, _T("REGBROWSE"), hDlg, BrowseRegDialog, (LPARAM)&Path ) )
							SetDlgItemText( hDlg, IDC_PATH, Path );
					}
					break;

				case IDC_REFRESH:
					if ( IsWindowEnabled( GetDlgItem( hDlg, IDC_REFRESH ) ) )  {
						// Create a list of all file permissions
						EnableWindow( GetDlgItem( hDlg, IDC_REFRESH ), false );
						EnableWindow( GetDlgItem( hDlg, IDC_PATH    ), false );
						EnableWindow( GetDlgItem( hDlg, IDC_BROWSE_FILE  ), false );
						EnableWindow( GetDlgItem( hDlg, IDC_BROWSE_REG   ), false );
						EnableWindow( GetDlgItem( hDlg, IDCANCEL    ), true );
						EnableWindow( GetDlgItem( hDlg, IDC_EXPORT  ), false );
						hCursor = LoadCursor( NULL, IDC_APPSTARTING );
						SetClassLong( hDlg, GCL_HCURSOR, (LONG)hCursor );
						SetCursor( hCursor );

						delete g.ShareList;
						g.ShareList = NULL;
						g.Abort = NULL;
						ListView_DeleteAllItems( GetDlgItem(hDlg,IDC_LIST) );

						g.Exclude = (TCHAR *)NULL;
			
						// get path to enumerate 
						TCHAR Path[ MAX_PATH ];
						GetDlgItemText( hDlg, IDC_PATH, Path, MAX_PATH );

						// if it is on a network then get name of system it is on
						TCHAR	NetworkPath[ MAX_PATH ] = _T("\0\0\0");
						if ( Path[0] == '\\' && Path[1] == '\\' ) {
							_tcscpy( NetworkPath, Path );
						} else if ( Path[1] == ':' )  {
							// convert drive to unc path, if share
							TCHAR	DevicePath[ 3 ] = { Path[0], ':', 0 };
							DWORD	nb = MAX_PATH;
							WNetGetConnection( DevicePath, NetworkPath, &nb );
						}
						if ( NetworkPath[0] )  {
							// get file server name
							TCHAR * ptr = _tcschr( NetworkPath+2, '\\' );
							if ( ptr )
								*ptr = 0;
							else
								NetworkPath[0] = 0;
						}

						CEnumeration * root = NULL;
						if ( _tcsnicmp( Path, _T("HK"), 2 ) == 0 )  {
							// traverse registry
							root = new CRegEnumeration( Path, true );
						} else {
							// traverse directory
							root = new CFileEnumeration( Path, true );
						}
						if ( root == NULL )  {
							MessageBox( hDlg, _T("Path not found"), APPNAME, MB_OK|MB_ICONWARNING );
							break;
						}
						CTraversal * e = new CTraversal( GetDlgItem(hDlg,IDC_LIST), 
														NetworkPath[0] ? NetworkPath+2 : _T(""), 
														root );
						e->Start();
						// delete root;

						// Add path to list of paths in combo box
						idx = SendMessage( GetDlgItem(hDlg,IDC_PATH), CB_FINDSTRINGEXACT, -1, (LPARAM) Path );
						if ( idx != CB_ERR )
							SendMessage( GetDlgItem(hDlg,IDC_PATH), CB_DELETESTRING, idx, 0 );
						SendMessage( GetDlgItem(hDlg,IDC_PATH), CB_INSERTSTRING, 0, (LPARAM) Path );
					}
					break;

				case IDC_EXCLUDE:
					idx = ListView_GetSelectionMark( GetDlgItem(hDlg,IDC_LIST) );
					if ( idx >= 0 )  {
						// make sure enumeration thread has finished with last exclude:
						while ( !!g.Exclude  &&  !IsWindowEnabled( GetDlgItem( hDlg, IDC_REFRESH ) ) )  {
							Sleep( 100 );
						}
						HWND	hList = GetDlgItem(hDlg,IDC_LIST);
						_bstr_t	Path = GetTreeItemText( hList, idx, 0 );
						// copy path to where enumeration thread can see it:
						g.Exclude = Path;
						// remove any items with this path
						LVFINDINFO	find;
						find.flags	= LVFI_STRING | LVFI_PARTIAL;
						find.psz	= Path;
						idx = -1;
						for (;;)  {
							idx = ListView_FindItem( hList, idx, &find );
							if ( idx < 0 )
								break;
							ListView_DeleteItem( hList, idx );
							--idx;
						}
					}
					break;

				case IDC_PROPERTIES:
					idx = ListView_GetSelectionMark( GetDlgItem(hDlg,IDC_LIST) );
					if ( idx >= 0 )  {
						HWND	hList = GetDlgItem(hDlg,IDC_LIST);
						TCHAR	Path[ MAX_UNCPATH ];
						ListView_GetItemText( hList, idx, 0, Path, MAX_UNCPATH );
						ShowFileProperties( hDlg, Path );
					}
					break;

				case IDC_EXPLORE:
					idx = ListView_GetSelectionMark( GetDlgItem(hDlg,IDC_LIST) );
					if ( idx >= 0 )  {
						HWND	hList = GetDlgItem(hDlg,IDC_LIST);
						TCHAR	Path[ MAX_UNCPATH ];
						ListView_GetItemText( hList, idx, 0, Path, MAX_UNCPATH );
						ExploreFile( hDlg, Path );
					}
					break;

				case IDC_EXPORT:
					// get export file name
					memset( &open, 0, sizeof open );
					open.lStructSize = sizeof open;
					open.hwndOwner = hDlg;
					open.lpstrFilter = TEXT("Unicode Text (*.txt)\0*.txt\0");
					open.lpstrFile = exportPath;
					open.nMaxFile = sizeof exportPath / sizeof(TCHAR);
					open.Flags = OFN_HIDEREADONLY;
					open.lpstrTitle = TEXT("Save as");
					if ( ! GetSaveFileName( &open ) )
						break;
					p = _tcschr( exportPath, 0 );
					p -= 4;
					if ( p < exportPath  ||  _tcsicmp( p, TEXT(".txt") ) != 0 )
						_tcscat( exportPath, TEXT(".txt") );
					DeleteFile( exportPath );
					ok = ExportFile( GetDlgItem(hDlg,IDC_LIST), exportPath );
					if ( ! ok )
						MessageBox( hDlg, TEXT("Error exporting settings"), APPNAME, MB_OK|MB_ICONSTOP );
					break;

				case IDC_COMPARE:
					CreateDialogParam( g.hInst, _T("COMPARE"), hDlg, CompareDialog, (LPARAM)g.ShareList );
					break;
			}
			break;

		case WM_GETMINMAXINFO:
			resizer.OnGetMinMaxInfo( wParam, lParam );
			return 0;

		case WM_SIZE:
			resizer.OnSize( wParam, lParam );
			UpdateWindow( hDlg );
			return 0;

		case WM_NCHITTEST:
			return resizer.OnNcHitTest( wParam, lParam );

		case WM_PAINT:
			resizer.OnPaint( wParam, lParam );
			break;

		case WM_CLOSE:
			SendMessage( hDlg, WM_COMMAND, IDCANCEL, 0 );
			SaveListViewColumns( GetDlgItem(hDlg,IDC_LIST));
			PostQuitMessage( 0 );
			break;
	}

	return DefWindowProc( hDlg, message, wParam, lParam );
}



//----------------------------------------------------------------------
//  
// WinMain
//
// Initialize and start application
//
//----------------------------------------------------------------------
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow )
{
#if 0
	PrintAll();
	return 0;
#endif

	// initialize things
	InitCommonControls();
	CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );

	g.hInst = hInstance;

	// register window class
	WNDCLASSEX	wndclass = { 0 };
	wndclass.cbSize			= sizeof wndclass;
	wndclass.style          = CS_HREDRAW | CS_VREDRAW;
 	wndclass.lpfnWndProc    = MainDialog;
	wndclass.hInstance      = hInstance;
	wndclass.cbWndExtra		= DLGWINDOWEXTRA;
	wndclass.hIcon          = LoadIcon( hInstance, TEXT("APPICON") );
	wndclass.hIconSm		= LoadIcon( hInstance, TEXT("APPICON") );
	wndclass.hCursor        = LoadCursor( NULL, IDC_ARROW );
	wndclass.hbrBackground  = (HBRUSH) (COLOR_BTNFACE+1);
	wndclass.lpszClassName  = TEXT("ShareEnumClass");
	if ( RegisterClassEx( &wndclass ) == 0 )
		GetLastError();

	g.hMainDlg = CreateDialog( hInstance, TEXT("MAIN"), NULL, (DLGPROC)MainDialog );
	if ( g.hMainDlg == NULL )  {
		GetLastError();
		return 1;
	}

	// make top window
	//SetWindowPos( hMainDlg, HWND_TOP, 1, 1, 0, 0, SWP_NOSIZE );

	// Make the window visible 
	ShowWindow( g.hMainDlg, nCmdShow );
	// Paint window
	UpdateWindow( g.hMainDlg ); 

	// Keyboard accelerators
	HACCEL hAccel = LoadAccelerators( hInstance, TEXT("ACCELERATORS") );

	// Message loop
	MSG msg;
	while ( GetMessage( &msg, NULL, 0, 0 )) {

		if ( TranslateAccelerator( g.hMainDlg, hAccel, &msg ) )
			continue;
		if ( IsDialogMessage( g.hMainDlg, &msg ) )
			continue;

		// process message
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -