From 0e96a84263f90e69af33f1a03e6ee77e8f21c3fd Mon Sep 17 00:00:00 2001 From: Robert Dickenson Date: Mon, 22 Jul 2002 21:12:26 +0000 Subject: [PATCH] Whatever it is I changed, it's now backed up before I go to bed. svn path=/trunk/; revision=3292 --- rosapps/regedit/childwnd.c | 4 +- rosapps/regedit/listview.c | 3 +- rosapps/regedit/regedit.rc | 2 - rosapps/regedit/trace.c | 4 +- rosapps/regedit/treeview.c | 2 +- rosapps/regedt32/listview.c | 3 +- rosapps/winfile/Makefile | 1 + rosapps/winfile/dialogs.c | 18 ++--- rosapps/winfile/framewnd.c | 18 +++-- rosapps/winfile/listview.c | 4 +- rosapps/winfile/main.c | 116 +++++++++------------------ rosapps/winfile/main.h | 1 + rosapps/winfile/network.c | 154 +++++++++++++++++++++++++++++++++--- rosapps/winfile/network.h | 5 +- rosapps/winfile/worker.c | 5 ++ 15 files changed, 223 insertions(+), 117 deletions(-) diff --git a/rosapps/regedit/childwnd.c b/rosapps/regedit/childwnd.c index 213b5e9d8d4..0b76429e2f1 100644 --- a/rosapps/regedit/childwnd.c +++ b/rosapps/regedit/childwnd.c @@ -255,12 +255,12 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa TCHAR keyPath[1000]; int keyPathLen = 0; keyPath[0] = _T('\0'); - hKey = FindRegRoot(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)); + hKey = FindRegRoot(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)/sizeof(TCHAR)); RefreshListView(pChildWnd->hListWnd, hKey, keyPath); keyPathLen = 0; keyPath[0] = _T('\0'); - MakeFullRegPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)); + MakeFullRegPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)/sizeof(TCHAR)); SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)keyPath); } break; diff --git a/rosapps/regedit/listview.c b/rosapps/regedit/listview.c index b33ccac4fb8..bf5c104aff8 100644 --- a/rosapps/regedit/listview.c +++ b/rosapps/regedit/listview.c @@ -69,7 +69,6 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB item.cchTextMax = _tcslen(item.pszText); if (item.cchTextMax == 0) item.pszText = LPSTR_TEXTCALLBACK; - item.cchTextMax = 0; item.iImage = 0; item.lParam = (LPARAM)dwValType; // item.lParam = (LPARAM)ValBuf; @@ -135,7 +134,7 @@ static void CreateListColumns(HWND hWndListView) lvC.iSubItem = index; lvC.cx = default_column_widths[index]; lvC.fmt = column_alignment[index]; - LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, sizeof(szText)); + LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, sizeof(szText)/sizeof(TCHAR)); if (ListView_InsertColumn(hWndListView, index, &lvC) == -1) { // TODO: handle failure condition... break; diff --git a/rosapps/regedit/regedit.rc b/rosapps/regedit/regedit.rc index bcf6f588fa4..2df3c5fec77 100644 --- a/rosapps/regedit/regedit.rc +++ b/rosapps/regedit/regedit.rc @@ -1,8 +1,6 @@ #include #include -//Microsoft Developer Studio generated resource script. -// #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS diff --git a/rosapps/regedit/trace.c b/rosapps/regedit/trace.c index 894408dd5af..9f686bd200a 100644 --- a/rosapps/regedit/trace.c +++ b/rosapps/regedit/trace.c @@ -51,9 +51,9 @@ void Trace(TCHAR* lpszFormat, ...) // nBuf = vsprintf(szBuffer, lpszFormat, args); // nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args); #ifdef _UNICODE - nBuf = _vsnwprintf(szBuffer, sizeof(szBuffer), lpszFormat, args); + nBuf = _vsnwprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), lpszFormat, args); #else - nBuf = _vsnprintf(szBuffer, sizeof(szBuffer), lpszFormat, args); + nBuf = _vsnprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), lpszFormat, args); #endif OutputDebugString(szBuffer); // was there an error? was the expanded string too long? diff --git a/rosapps/regedit/treeview.c b/rosapps/regedit/treeview.c index 82a0d50bb78..91da9d3abd7 100644 --- a/rosapps/regedit/treeview.c +++ b/rosapps/regedit/treeview.c @@ -194,7 +194,7 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv) // check if this is either the root or a subkey item... if ((HKEY)pnmtv->itemNew.lParam == NULL) { keyPath[0] = _T('\0'); - hKey = FindRegRoot(hwndTV, pnmtv->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)); + hKey = FindRegRoot(hwndTV, pnmtv->itemNew.hItem, keyPath, &keyPathLen, sizeof(keyPath)/sizeof(TCHAR)); } else { hKey = (HKEY)pnmtv->itemNew.lParam; keyPath[0] = _T('\0'); diff --git a/rosapps/regedt32/listview.c b/rosapps/regedt32/listview.c index 3e3bec8434f..47d64bff236 100644 --- a/rosapps/regedt32/listview.c +++ b/rosapps/regedt32/listview.c @@ -65,7 +65,6 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB item.stateMask = 0; item.pszText = Name; item.cchTextMax = _tcslen(item.pszText); - item.cchTextMax = 0; item.iImage = 0; item.lParam = (LPARAM)dwValType; // item.lParam = (LPARAM)ValBuf; @@ -90,7 +89,7 @@ static void CreateListColumns(HWND hWndListView) lvC.iSubItem = index; lvC.cx = default_column_widths[index]; lvC.fmt = column_alignment[index]; - LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, sizeof(szText)); + LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, sizeof(szText)/sizeof(TCHAR)); if (ListView_InsertColumn(hWndListView, index, &lvC) == -1) { // TODO: handle failure condition... break; diff --git a/rosapps/winfile/Makefile b/rosapps/winfile/Makefile index b6cc00df214..f7e0c231bd5 100644 --- a/rosapps/winfile/Makefile +++ b/rosapps/winfile/Makefile @@ -33,6 +33,7 @@ OBJS = about.o \ childwnd.o \ debug.o \ dialogs.o \ + drivebar.o \ draw.o \ entries.o \ framewnd.o \ diff --git a/rosapps/winfile/dialogs.c b/rosapps/winfile/dialogs.c index 7f89a87aaea..1796a542fce 100644 --- a/rosapps/winfile/dialogs.c +++ b/rosapps/winfile/dialogs.c @@ -230,8 +230,8 @@ BOOL CALLBACK MoveFileWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa LPVOID lpData = NULL; // parameter for callback DWORD dwFlags = MOVEFILE_COPY_ALLOWED; // move options - GetDlgItemText(hDlg, IDC_FILE_MOVE_FROM, buffer_from, sizeof(buffer_from)); - GetDlgItemText(hDlg, IDC_FILE_MOVE_TO, buffer_to, sizeof(buffer_to)); + GetDlgItemText(hDlg, IDC_FILE_MOVE_FROM, buffer_from, sizeof(buffer_from)/sizeof(TCHAR)); + GetDlgItemText(hDlg, IDC_FILE_MOVE_TO, buffer_to, sizeof(buffer_to)/sizeof(TCHAR)); /* BOOL MoveFileWithProgress( LPCTSTR lpExistingFileName, // file name @@ -440,7 +440,7 @@ BOOL CALLBACK PropertiesDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM l entry = ((struct PropertiesDialog*)lParam)->pEntry; ASSERT(entry); - GetWindowText(hDlg, text, sizeof(text)); + GetWindowText(hDlg, text, sizeof(text)/sizeof(TCHAR)); wsprintf(buffer, text, dlg->pEntry->data.cFileName); SetWindowText(hDlg, buffer); SetDlgItemText(hDlg, IDC_STATIC_PROP_FILENAME, dlg->pEntry->data.cFileName); @@ -461,8 +461,8 @@ BOOL CALLBACK PropertiesDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM l //entry->bhfi.ftCreationTime wsprintf(buffer, _T("%u"), entry->bhfi.nFileSizeLow); if (GetNumberFormat(LOCALE_USER_DEFAULT, 0, buffer, &numFmt, - buffer + sizeof(buffer)/2, sizeof(buffer)/2)) { - SetDlgItemText(hDlg, IDC_STATIC_PROP_SIZE, buffer + sizeof(buffer)/2); + buffer + MAX_PATH/2, MAX_PATH/2)) { + SetDlgItemText(hDlg, IDC_STATIC_PROP_SIZE, buffer + MAX_PATH/2); } else { SetDlgItemText(hDlg, IDC_STATIC_PROP_SIZE, buffer); } @@ -472,7 +472,7 @@ BOOL CALLBACK PropertiesDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM l SetDlgItemText(hDlg, IDC_STATIC_PROP_LASTCHANGE, _T("Date?")); if (FileTimeToLocalFileTime(&entry->bhfi.ftLastWriteTime, &LocalFileTime)) { if (FileTimeToSystemTime(&LocalFileTime, &SystemTime)) { - if (GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &SystemTime, NULL, buffer, sizeof(buffer))) { + if (GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &SystemTime, NULL, buffer, sizeof(buffer)/sizeof(TCHAR))) { // SetDlgItemText(hDlg, IDC_STATIC_PROP_LASTCHANGE, buffer); } } @@ -482,7 +482,7 @@ BOOL CALLBACK PropertiesDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM l if (FileTimeToLocalFileTime(&entry->bhfi.ftLastWriteTime, &LocalFileTime)) { if (FileTimeToSystemTime(&LocalFileTime, &SystemTime)) { - if (GetTimeFormat(LOCALE_USER_DEFAULT, 0, &SystemTime, NULL, buffer + offset, sizeof(buffer) - offset)) { + if (GetTimeFormat(LOCALE_USER_DEFAULT, 0, &SystemTime, NULL, buffer + offset, sizeof(buffer)/sizeof(TCHAR) - offset)) { SetDlgItemText(hDlg, IDC_STATIC_PROP_LASTCHANGE, buffer); } } @@ -503,8 +503,8 @@ BOOL CALLBACK PropertiesDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM l if (id == IDOK) { // LPVOID lpData = NULL; // parameter for callback // DWORD dwFlags = MOVEFILE_COPY_ALLOWED; // move options -// GetDlgItemText(hDlg, , buffer, sizeof(buffer)); -// GetDlgItemText(hDlg, , buffer, sizeof(buffer)); +// GetDlgItemText(hDlg, , buffer, sizeof(buffer)/sizeof(TCHAR)); +// GetDlgItemText(hDlg, , buffer, sizeof(buffer)/sizeof(TCHAR)); EndDialog(hDlg, id); } else if (id == IDCANCEL) { EndDialog(hDlg, id); diff --git a/rosapps/winfile/framewnd.c b/rosapps/winfile/framewnd.c index 47dc719a719..943ee025cdf 100644 --- a/rosapps/winfile/framewnd.c +++ b/rosapps/winfile/framewnd.c @@ -614,10 +614,10 @@ static LPTBBUTTON lpSaveButtons; // the other 12 buttons in tbButtonNew. if (lpTbNotify->iItem < 5) { lpTbNotify->tbButton = tbButtonNew[lpTbNotify->iItem]; -// LoadString(hInst, 4000+lpTbNotify->iItem, szBuffer, sizeof(szBuffer)); - LoadString(hInst, lpTbNotify->iItem, szBuffer, sizeof(szBuffer)); +// LoadString(hInst, 4000+lpTbNotify->iItem, szBuffer, sizeof(szBuffer)/sizeof(TCHAR)); + LoadString(hInst, lpTbNotify->iItem, szBuffer, sizeof(szBuffer)/sizeof(TCHAR)); lstrcpy (lpTbNotify->pszText, szBuffer); - lpTbNotify->cchText = sizeof (szBuffer); + lpTbNotify->cchText = sizeof(szBuffer)/sizeof(TCHAR); return TRUE; } else { return 0; @@ -648,9 +648,9 @@ typedef struct _TBBUTTON { // the other 12 buttons in tbButtonNew. if (lpTbNotify->iItem < 12) { lpTbNotify->tbButton = tbButtonNew[lpTbNotify->iItem]; - LoadString(hInst, lpTbNotify->iItem + 32769, szBuffer, sizeof(szBuffer)); - lstrcpy (lpTbNotify->pszText, szBuffer); - lpTbNotify->cchText = sizeof (szBuffer); + LoadString(hInst, lpTbNotify->iItem + 32769, szBuffer, sizeof(szBuffer)/sizeof(TCHAR)); + lstrcpy(lpTbNotify->pszText, szBuffer); + lpTbNotify->cchText = sizeof(szBuffer)/sizeof(TCHAR); return TRUE; } else { return 0; @@ -723,9 +723,10 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa hWnd, (HMENU)0, hInst, &ccs); } CheckShellAvailable(); - CheckNetworkAvailable(); + CreateNetworkMonitorThread(hWnd); CreateMonitorThread(hWnd); CreateChildWindow(-1); + SetTimer(hWnd, 1, 5000, NULL); break; case WM_NOTIFY: @@ -763,6 +764,7 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa case WM_TIMER: SignalMonitorEvent(); + SignalNetworkMonitorEvent(); break; case WM_SIZE: @@ -779,7 +781,9 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa break; case WM_DESTROY: WinHelp(hWnd, _T("winfile"), HELP_QUIT, 0); + KillTimer(hWnd, 1); DestryMonitorThread(); + DestryNetworkMonitorThread(); PostQuitMessage(0); break; case WM_QUERYENDSESSION: diff --git a/rosapps/winfile/listview.c b/rosapps/winfile/listview.c index df2fd409271..330f4ebeca3 100644 --- a/rosapps/winfile/listview.c +++ b/rosapps/winfile/listview.c @@ -67,8 +67,8 @@ static void AddEntryToList(HWND hwndLV, int idx, Entry* entry) item.state = 0; item.stateMask = 0; // item.pszText = entry->data.cFileName; - item.pszText = LPSTR_TEXTCALLBACK; // item.cchTextMax = strlen(entry->data.cFileName); + item.pszText = LPSTR_TEXTCALLBACK; item.cchTextMax = 0; item.iImage = 0; // item.iImage = I_IMAGECALLBACK; @@ -114,7 +114,7 @@ static void CreateListColumns(HWND hWndListView) lvC.iSubItem = index; lvC.cx = default_column_widths[index]; lvC.fmt = column_alignment[index]; - LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, sizeof(szText)); + LoadString(hInst, IDS_LIST_COLUMN_FIRST + index, szText, sizeof(szText)/sizeof(TCHAR)); if (ListView_InsertColumn(hWndListView, index, &lvC) == -1) { // TODO: handle failure condition... break; diff --git a/rosapps/winfile/main.c b/rosapps/winfile/main.c index 9cc771a086b..64ef332e76c 100644 --- a/rosapps/winfile/main.c +++ b/rosapps/winfile/main.c @@ -38,6 +38,7 @@ #include "settings.h" #include "framewnd.h" #include "childwnd.h" +#include "drivebar.h" //////////////////////////////////////////////////////////////////////////////// @@ -64,6 +65,8 @@ HWND hStatusBar; HWND hToolBar; HWND hDriveBar; HFONT hFont; +HWND hDriveCombo; + TCHAR num_sep; SIZE spaceSize; @@ -161,46 +164,10 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) if (InitCommonControlsEx(&icc)) { // TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}; TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}; - int btn = 1; - PTSTR p; - - Globals.hDriveBar = CreateToolbarEx(Globals.hMainWnd, - WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_FLAT|TBSTYLE_LIST|TBSTYLE_WRAPABLE, -// WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST|TBSTYLE_TRANSPARENT|TBSTYLE_WRAPABLE, - IDW_DRIVEBAR, 2, hInstance, IDB_DRIVEBAR, - &drivebarBtn, 1/*iNumButtons*/, - 25/*dxButton*/, 16/*dyButton*/, - 0/*dxBitmap*/, 0/*dyBitmap*/, sizeof(TBBUTTON)); -// 16/*dxButton*/, 13/*dyButton*/, -// 16/*dxBitmap*/, 13/*dyBitmap*/, sizeof(TBBUTTON)); - CheckMenuItem(Globals.hMenuOptions, ID_OPTIONS_DRIVEBAR, MF_BYCOMMAND|MF_CHECKED); - GetLogicalDriveStrings(BUFFER_LEN, Globals.drives); - drivebarBtn.fsStyle = TBSTYLE_BUTTON; -#ifndef _NO_EXTENSIONS - // register windows drive root strings - SendMessage(Globals.hDriveBar, TB_ADDSTRING, 0, (LPARAM)Globals.drives); -#endif - drivebarBtn.idCommand = ID_DRIVE_FIRST; - for (p = Globals.drives; *p;) { -#ifdef _NO_EXTENSIONS - // insert drive letter - TCHAR b[3] = { tolower(*p) }; - SendMessage(Globals.hDriveBar, TB_ADDSTRING, 0, (LPARAM)b); -#endif - switch(GetDriveType(p)) { - case DRIVE_REMOVABLE: drivebarBtn.iBitmap = 1; break; - case DRIVE_CDROM: drivebarBtn.iBitmap = 3; break; - case DRIVE_REMOTE: drivebarBtn.iBitmap = 4; break; - case DRIVE_RAMDISK: drivebarBtn.iBitmap = 5; break; - default:/*DRIVE_FIXED*/ drivebarBtn.iBitmap = 2; - } - SendMessage(Globals.hDriveBar, TB_INSERTBUTTON, btn++, (LPARAM)&drivebarBtn); - drivebarBtn.idCommand++; - drivebarBtn.iString++; - while(*p++); - } - { +// int btn = 1; +// PTSTR p; + { #define DRIVEBOX_WIDTH 200 #define DRIVEBOX_HEIGHT 8 @@ -288,34 +255,43 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) CheckMenuItem(Globals.hMenuOptions, ID_OPTIONS_TOOLBAR, MF_BYCOMMAND|MF_CHECKED); { -// Create the edit control. Notice that hWndParent, parent of -// the toolbar, is used as the parent of the edit control. - -//HWND hWndEdit = CreateWindowEx(0L, WC_COMBOBOXEX, NULL, WS_CHILD | WS_BORDER | WS_VISIBLE -HWND hWndEdit = CreateWindowEx(0L, "ComboBox", NULL, WS_CHILD | WS_BORDER | WS_VISIBLE - | CBS_DROPDOWN | ES_LEFT | ES_AUTOVSCROLL | ES_MULTILINE, - 10, 0, DRIVEBOX_WIDTH, DRIVEBOX_HEIGHT, Globals.hMainWnd, (HMENU)IDW_DRIVEBOX, hInstance, 0); - -// Set the toolbar window as the parent of the edit control -// window. You must set the toolbar as the parent of the edit -// control for it to appear embedded in the toolbar. -SetParent (hWndEdit, Globals.hToolBar); + // Create the edit control. Notice that the parent of + // the toolbar, is used as the parent of the edit control. + //hWndEdit = CreateWindowEx(0L, WC_COMBOBOXEX, NULL, WS_CHILD | WS_BORDER | WS_VISIBLE + Globals.hDriveCombo = CreateWindowEx(0L, "ComboBox", NULL, WS_CHILD | WS_BORDER | WS_VISIBLE + | CBS_DROPDOWNLIST | ES_LEFT | ES_AUTOVSCROLL | ES_MULTILINE, + 10, 0, DRIVEBOX_WIDTH, DRIVEBOX_HEIGHT, Globals.hMainWnd, (HMENU)IDW_DRIVEBOX, hInstance, 0); + // Set the toolbar window as the parent of the edit control + // window. You must set the toolbar as the parent of the edit + // control for it to appear embedded in the toolbar. + SetParent (Globals.hDriveCombo, Globals.hToolBar); } - - - } + + // Create the drive bar + Globals.hDriveBar = CreateToolbarEx(Globals.hMainWnd, + WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_FLAT|TBSTYLE_LIST|TBSTYLE_WRAPABLE, +// WS_CHILD|WS_VISIBLE|CCS_NOMOVEY|TBSTYLE_LIST|TBSTYLE_TRANSPARENT|TBSTYLE_WRAPABLE, + IDW_DRIVEBAR, 2, hInstance, IDB_DRIVEBAR, + &drivebarBtn, 1/*iNumButtons*/, + 25/*dxButton*/, 16/*dyButton*/, + 0/*dxBitmap*/, 0/*dyBitmap*/, sizeof(TBBUTTON)); +// 16/*dxButton*/, 13/*dyButton*/, +// 16/*dxBitmap*/, 13/*dyBitmap*/, sizeof(TBBUTTON)); + CheckMenuItem(Globals.hMenuOptions, ID_OPTIONS_DRIVEBAR, MF_BYCOMMAND|MF_CHECKED); + ConfigureDriveBar(Globals.hDriveBar); + + // Create the status bar + Globals.hStatusBar = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS, + _T(""), Globals.hMainWnd, IDW_STATUS_WINDOW); + if (!Globals.hStatusBar) + return FALSE; + CheckMenuItem(Globals.hMenuOptions, ID_OPTIONS_STATUSBAR, MF_BYCOMMAND|MF_CHECKED); + + // Create the status bar panes + SetupStatusBar(FALSE); } - // Create the status bar - Globals.hStatusBar = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS, - _T(""), Globals.hMainWnd, IDW_STATUS_WINDOW); - if (!Globals.hStatusBar) - return FALSE; - CheckMenuItem(Globals.hMenuOptions, ID_OPTIONS_STATUSBAR, MF_BYCOMMAND|MF_CHECKED); - - // Create the status bar panes - SetupStatusBar(FALSE); #if 0 //Globals.hstatusbar = CreateStatusWindow(WS_CHILD|WS_VISIBLE, 0, Globals.Globals.hMainWnd, IDW_STATUSBAR); //CheckMenuItem(Globals.Globals.hMenuOptions, ID_OPTIONS_STATUSBAR, MF_BYCOMMAND|MF_CHECKED); @@ -466,17 +442,3 @@ int APIENTRY WinMain(HINSTANCE hInstance, ExitInstance(); return msg.wParam; } - -void _GetFreeSpaceEx(void) -{ - BOOL fResult; - TCHAR szDrive[MAX_PATH]; - ULARGE_INTEGER i64FreeBytesToCaller; - ULARGE_INTEGER i64TotalBytes; - ULARGE_INTEGER i64FreeBytes; - - fResult = GetDiskFreeSpaceEx(szDrive, - (PULARGE_INTEGER)&i64FreeBytesToCaller, - (PULARGE_INTEGER)&i64TotalBytes, - (PULARGE_INTEGER)&i64FreeBytes); -} diff --git a/rosapps/winfile/main.h b/rosapps/winfile/main.h index 004bb9b6a02..dfa4608d2e8 100644 --- a/rosapps/winfile/main.h +++ b/rosapps/winfile/main.h @@ -128,6 +128,7 @@ typedef struct HWND hToolBar; HWND hDriveBar; HFONT hFont; + HWND hDriveCombo; TCHAR num_sep; SIZE spaceSize; diff --git a/rosapps/winfile/network.c b/rosapps/winfile/network.c index be56faa9fe8..7cdfbce1e48 100644 --- a/rosapps/winfile/network.c +++ b/rosapps/winfile/network.c @@ -37,11 +37,15 @@ #include "main.h" #include "network.h" +#include "trace.h" + //////////////////////////////////////////////////////////////////////////////// // Global Variables: // +static HANDLE hNetworkMonitorThreadEvent = NULL; // When this event becomes signaled then we run the monitor thread + static HMODULE hMPR; static BOOL bNetAvailable = FALSE; @@ -61,7 +65,12 @@ static WNetDisconnectDialog1_Ptr pWNetDisconnectDialog1; static WNetEnumResourceA_Ptr pWNetEnumResource; static WNetOpenEnumA_Ptr pWNetOpenEnum; -BOOL CheckNetworkAvailable(void) + +//////////////////////////////////////////////////////////////////////////////// +// Local module support methods +// + +static BOOL CheckNetworkAvailable(void) { hMPR = LoadLibrary(_T("MPR.DLL")); @@ -80,7 +89,7 @@ BOOL CheckNetworkAvailable(void) } -LRESULT CALLBACK EnumNetConnectionsProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +static LRESULT CALLBACK EnumNetConnectionsProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return 0; } @@ -143,30 +152,68 @@ DWORD MapNetworkDrives(HWND hWnd, BOOL connect) } //////////////////////////////////// -void NetErrorHandler(HWND hwnd, DWORD dwResult, LPTSTR str) +static void NetErrorHandler(HWND hwnd, DWORD dwResult, LPTSTR str) { + TRACE(_T("NetErrorHandler(0x%08X) %s\n"), dwResult, str); } -void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal) +static void DisplayStruct(HDC hdc, LPNETRESOURCE lpnrLocal) { + LPTSTR str = NULL; + TRACE(_T("DisplayStruct(%p)"), lpnrLocal); + + switch (lpnrLocal->dwScope) { + case RESOURCE_CONNECTED: str = _T("Enumerate currently connected resources. The dwUsage member cannot be specified."); break; + case RESOURCE_GLOBALNET: str = _T("Enumerate all resources on the network. The dwUsage member is specified."); break; + case RESOURCE_REMEMBERED: str = _T("Enumerate remembered (persistent) connections. The dwUsage member cannot be specified."); break; + default: str = _T("Unknown Scope."); break; + } + TRACE(_T(" %s\n"), str); + + switch (lpnrLocal->dwType) { + case RESOURCETYPE_ANY: str = _T("All resources."); break; + case RESOURCETYPE_DISK: str = _T("Disk resources."); break; + case RESOURCETYPE_PRINT: str = _T("Print resources."); break; + default: str = _T("Unknown Type."); break; + } + TRACE(_T(" %s\n"), str); + + switch (lpnrLocal->dwDisplayType) { + case RESOURCEDISPLAYTYPE_DOMAIN: str = _T("The object should be displayed as a domain."); break; + case RESOURCEDISPLAYTYPE_SERVER: str = _T("The object should be displayed as a server."); break; + case RESOURCEDISPLAYTYPE_SHARE: str = _T("The object should be displayed as a share."); break; + case RESOURCEDISPLAYTYPE_GENERIC: str = _T("The method used to display the object does not matter."); break; + default: str = _T("Unknown DisplayType."); break; + } + TRACE(_T(" %s\n"), str); + +// switch (lpnrLocal->dwUsage ) { +// case RESOURCEUSAGE_CONNECTABLE: str = _T("The resource is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection."); break; +// case RESOURCEUSAGE_CONTAINER: str = _T("The resource is a container resource; the name pointed to by the lpRemoteName member can be passed to the WNetOpenEnum function to enumerate the resources in the container."); break; +// default: str = _T("Unknown Usage."); break; +// } + TRACE(_T("\tLocalName: %s\tRemoteName: %s"), lpnrLocal->lpLocalName, lpnrLocal->lpRemoteName); + TRACE(_T("\tComment: %s\tProvider: %s\n"), lpnrLocal->lpComment, lpnrLocal->lpProvider); } //////////////////////////////////// -BOOL WINAPI EnumerateFunc(HWND hwnd, HDC hdc, LPNETRESOURCE lpnr) +static BOOL WINAPI EnumerateFunc(HWND hwnd, HDC hdc, LPNETRESOURCE lpnr) { - DWORD dwResult, dwResultEnum; + DWORD dwResult; + DWORD dwResultEnum; HANDLE hEnum; - DWORD cbBuffer = 16384; // 16K is a good size - DWORD cEntries = -1; // enumerate all possible entries - LPNETRESOURCE lpnrLocal; // pointer to enumerated structures + DWORD cbBuffer = 16384; // 16K is a good size + DWORD cEntries = -1; // enumerate all possible entries + LPNETRESOURCE lpnrLocal; // pointer to enumerated structures DWORD i; if (!bNetAvailable) return FALSE; // Call the WNetOpenEnum function to begin the enumeration. dwResult = pWNetOpenEnum(RESOURCE_GLOBALNET, // all network resources - RESOURCETYPE_ANY, // all resources +// RESOURCETYPE_ANY, // all resources + RESOURCETYPE_DISK, // disk resources only, exlude printers 0, // enumerate all resources lpnr, // NULL first time the function is called &hEnum); // handle to the resource @@ -200,6 +247,7 @@ BOOL WINAPI EnumerateFunc(HWND hwnd, HDC hdc, LPNETRESOURCE lpnr) if (RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER)) if (!EnumerateFunc(hwnd, hdc, &lpnrLocal[i])) { //TextOut(hdc, 10, 10, _T("EnumerateFunc returned FALSE."), 29); + TRACE(_T("EnumerateFunc returned FALSE.\n")); } } } @@ -242,4 +290,90 @@ DWORD WNetAddConnection( ); +DWORD WNetOpenEnum( + DWORD dwScope, // scope of enumeration + DWORD dwType, // resource types to list + DWORD dwUsage, // resource usage to list + LPNETRESOURCE lpNetResource, // resource structure + LPHANDLE lphEnum // enumeration handle buffer +); */ + +//////////////////////////////////////////////////////////////////////////////// + +void NetworkMonitorThreadProc(void *lpParameter) +{ +// ULONG OldProcessorUsage = 0; +// ULONG OldProcessCount = 0; + HWND hWnd = (HWND)lpParameter; + + // Create the event + hNetworkMonitorThreadEvent = CreateEvent(NULL, TRUE, TRUE, "Winfile Network Monitor Event"); + + // If we couldn't create the event then exit the thread + if (!hNetworkMonitorThreadEvent) + return; + + while (1) { + DWORD dwWaitVal; + + // Wait on the event + dwWaitVal = WaitForSingleObject(hNetworkMonitorThreadEvent, INFINITE); + + // If the wait failed then the event object must have been + // closed and the task manager is exiting so exit this thread + if (dwWaitVal == WAIT_FAILED) { + // CloseHandle(hNetworkMonitorThreadEvent); // Should we close the event object handle or not ??? + // hNetworkMonitorThreadEvent = NULL; // if we do then check what happens when main thread tries to delete it also.... + return; + } + + if (dwWaitVal == WAIT_OBJECT_0) { + // Reset our event + ResetEvent(hNetworkMonitorThreadEvent); + + + if ( EnumerateFunc(hWnd, NULL, NULL) ) { + + } + +#if 0 + TCHAR text[260]; + if ((ULONG)SendMessage(hProcessPageListCtrl, LVM_GETITEMCOUNT, 0, 0) != PerfDataGetProcessCount()) + SendMessage(hProcessPageListCtrl, LVM_SETITEMCOUNT, PerfDataGetProcessCount(), /*LVSICF_NOINVALIDATEALL|*/LVSICF_NOSCROLL); + if (IsWindowVisible(hProcessPage)) + InvalidateRect(hProcessPageListCtrl, NULL, FALSE); + if (OldProcessorUsage != PerfDataGetProcessorUsage()) { + OldProcessorUsage = PerfDataGetProcessorUsage(); + wsprintf(text, _T("CPU Usage: %3d%%"), OldProcessorUsage); + SendMessage(hStatusWnd, SB_SETTEXT, 1, (LPARAM)text); + } + if (OldProcessCount != PerfDataGetProcessCount()) { + OldProcessCount = PerfDataGetProcessCount(); + wsprintf(text, _T("Processes: %d"), OldProcessCount); + SendMessage(hStatusWnd, SB_SETTEXT, 0, (LPARAM)text); + } +#endif + } + } +} + +BOOL CreateNetworkMonitorThread(HWND hWnd) +{ + CheckNetworkAvailable(); + _beginthread(NetworkMonitorThreadProc, 0, hWnd); + return TRUE; +} + +void SignalNetworkMonitorEvent(void) +{ + SetEvent(hNetworkMonitorThreadEvent); +} + +BOOL DestryNetworkMonitorThread(void) +{ + CloseHandle(hNetworkMonitorThreadEvent); + hNetworkMonitorThreadEvent = NULL; + return TRUE; +} + diff --git a/rosapps/winfile/network.h b/rosapps/winfile/network.h index b4e48eb4954..c796b3a7d5c 100644 --- a/rosapps/winfile/network.h +++ b/rosapps/winfile/network.h @@ -28,7 +28,10 @@ extern "C" { #endif -BOOL CheckNetworkAvailable(void); +BOOL CreateNetworkMonitorThread(HWND hWnd); +void SignalNetworkMonitorEvent(void); +BOOL DestryNetworkMonitorThread(void); + DWORD MapNetworkDrives(HWND hWnd, BOOL connect); diff --git a/rosapps/winfile/worker.c b/rosapps/winfile/worker.c index 848ae94ed8e..c98fc128023 100644 --- a/rosapps/winfile/worker.c +++ b/rosapps/winfile/worker.c @@ -41,6 +41,7 @@ #include "main.h" #include "worker.h" +#include "drivebar.h" //////////////////////////////////////////////////////////////////////////////// @@ -114,6 +115,10 @@ void MonitorThreadProc(void *lpParameter) if (dwWaitVal == WAIT_OBJECT_0) { // Reset our event ResetEvent(hMonitorThreadEvent); + + + ConfigureDriveBar(Globals.hDriveBar); + #if 0 TCHAR text[260]; if ((ULONG)SendMessage(hProcessPageListCtrl, LVM_GETITEMCOUNT, 0, 0) != PerfDataGetProcessCount())