VOID UpdateApplicationsList(INT EnumType) { WCHAR szBuffer1[MAX_STR_LEN], szBuffer2[MAX_STR_LEN]; HICON hIcon; HIMAGELIST hImageListView; m_ListView->SendMessage(WM_SETREDRAW, FALSE, 0); if (EnumType == -1) EnumType = SelectedEnumType; if (IS_INSTALLED_ENUM(SelectedEnumType)) FreeInstalledAppList(); (VOID) ListView_DeleteAllItems(hListView); /* Create image list */ hImageListView = ImageList_Create(LISTVIEW_ICON_SIZE, LISTVIEW_ICON_SIZE, GetSystemColorDepth() | ILC_MASK, 0, 1); hIcon = (HICON) LoadImage(hInst, MAKEINTRESOURCE(IDI_MAIN), IMAGE_ICON, LISTVIEW_ICON_SIZE, LISTVIEW_ICON_SIZE, LR_CREATEDIBSECTION); ImageList_AddIcon(hImageListView, hIcon); DestroyIcon(hIcon); if (IS_INSTALLED_ENUM(EnumType)) { /* Enum installed applications and updates */ EnumInstalledApplications(EnumType, TRUE, s_EnumInstalledAppProc); EnumInstalledApplications(EnumType, FALSE, s_EnumInstalledAppProc); } else if (IS_AVAILABLE_ENUM(EnumType)) { /* Enum availabled applications */ EnumAvailableApplications(EnumType, s_EnumAvailableAppProc); } /* Set image list for ListView */ hImageListView = ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL); /* Destroy old image list */ if (hImageListView) ImageList_Destroy(hImageListView); SelectedEnumType = EnumType; LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2)); StringCbPrintfW(szBuffer1, sizeof(szBuffer1), szBuffer2, ListView_GetItemCount(hListView)); SetStatusBarText(szBuffer1); SetWelcomeText(); /* set automatic column width for program names if the list is not empty */ if (ListView_GetItemCount(hListView) > 0) ListView_SetColumnWidth(hListView, 0, LVSCW_AUTOSIZE); SendMessage(hListView, WM_SETREDRAW, TRUE, 0); }
static LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; HMENU hMenu; static BOARD board; switch( msg ) { case WM_CREATE: board.hInst = ((LPCREATESTRUCT) lParam)->hInstance; board.hWnd = hWnd; InitBoard( &board ); CreateBoard( &board ); return 0; case WM_PAINT: { HDC hMemDC; WINE_TRACE("WM_PAINT\n"); hdc = BeginPaint( hWnd, &ps ); hMemDC = CreateCompatibleDC( hdc ); DrawBoard( hdc, hMemDC, &ps, &board ); DeleteDC( hMemDC ); EndPaint( hWnd, &ps ); return 0; } case WM_MOVE: WINE_TRACE("WM_MOVE\n"); board.pos.x = (short)LOWORD(lParam); board.pos.y = (short)HIWORD(lParam); return 0; case WM_DESTROY: SaveBoard( &board ); DestroyBoard( &board ); PostQuitMessage( 0 ); return 0; case WM_TIMER: if( board.status == PLAYING ) { board.time++; RedrawWindow( hWnd, &board.timer_rect, 0, RDW_INVALIDATE | RDW_UPDATENOW ); } return 0; case WM_LBUTTONDOWN: WINE_TRACE("WM_LBUTTONDOWN\n"); if( wParam & (MK_RBUTTON | MK_SHIFT) ) msg = WM_MBUTTONDOWN; TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); SetCapture( hWnd ); return 0; case WM_LBUTTONUP: WINE_TRACE("WM_LBUTTONUP\n"); if( wParam & (MK_RBUTTON | MK_SHIFT) ) msg = WM_MBUTTONUP; TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); ReleaseCapture(); return 0; case WM_RBUTTONDOWN: WINE_TRACE("WM_RBUTTONDOWN\n"); if( wParam & MK_LBUTTON ) { board.press.x = 0; board.press.y = 0; msg = WM_MBUTTONDOWN; } TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); return 0; case WM_RBUTTONUP: WINE_TRACE("WM_RBUTTONUP\n"); if( wParam & MK_LBUTTON ) msg = WM_MBUTTONUP; TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); return 0; case WM_MBUTTONDOWN: WINE_TRACE("WM_MBUTTONDOWN\n"); TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); return 0; case WM_MBUTTONUP: WINE_TRACE("WM_MBUTTONUP\n"); TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); return 0; case WM_MOUSEMOVE: { if( ( wParam & MK_MBUTTON ) || ( ( wParam & MK_LBUTTON ) && ( wParam & MK_RBUTTON ) ) ) { msg = WM_MBUTTONDOWN; } else if( wParam & MK_LBUTTON ) { msg = WM_LBUTTONDOWN; } else { return 0; } TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg ); return 0; } case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_NEW: CreateBoard( &board ); return 0; case IDM_MARKQ: hMenu = GetMenu( hWnd ); board.IsMarkQ = !board.IsMarkQ; if( board.IsMarkQ ) CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED ); else CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED ); return 0; case IDM_BEGINNER: SetDifficulty( &board, BEGINNER ); CreateBoard( &board ); return 0; case IDM_ADVANCED: SetDifficulty( &board, ADVANCED ); CreateBoard( &board ); return 0; case IDM_EXPERT: SetDifficulty( &board, EXPERT ); CreateBoard( &board ); return 0; case IDM_CUSTOM: SetDifficulty( &board, CUSTOM ); CreateBoard( &board ); return 0; case IDM_EXIT: SendMessage( hWnd, WM_CLOSE, 0, 0); return 0; case IDM_TIMES: DialogBoxParam( board.hInst, "DLG_TIMES", hWnd, TimesDlgProc, (LPARAM) &board); return 0; case IDM_ABOUT: { WCHAR appname[256], other[256]; LoadStringW( board.hInst, IDS_APPNAME, appname, sizeof(appname)/sizeof(WCHAR) ); LoadStringW( board.hInst, IDS_ABOUT, other, sizeof(other)/sizeof(WCHAR) ); ShellAboutW( hWnd, appname, other, LoadImageA( board.hInst, "WINEMINE", IMAGE_ICON, 48, 48, LR_SHARED )); return 0; } default: WINE_TRACE("Unknown WM_COMMAND command message received\n"); break; } } return( DefWindowProc( hWnd, msg, wParam, lParam )); }
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 여기에 코드를 입력합니다. // 전역 문자열을 초기화합니다. LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadStringW(hInstance, IDC_BASICENGINE, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // 응용 프로그램 초기화를 수행합니다. if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_BASICENGINE)); MSG msg; pMain = new cMain; pMain->Setup(); DWORD dwThID; pRenderHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)StartRenderThread, NULL, NULL/*CREATE_SUSPENDED*/, &dwThID); while (isQuit) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } else { pMain->Update(); } } DWORD dwExitCode; GetExitCodeThread(pRenderHandle, &dwExitCode); ExitThread(dwExitCode); SAFE_DELETE(pMain); return (int) msg.wParam; }
static BOOL ViewTree_LoadTree(HKEY hKey, LPCWSTR pszKeyName, DWORD dwParentID) { DWORD dwIndex; WCHAR szKeyName[64], szText[MAX_PATH], *pch; DWORD Size, Value; PVIEWTREE_ENTRY pAllocated; // resize s_ViewTreeEntries Size = (s_ViewTreeEntryCount + 1) * sizeof(VIEWTREE_ENTRY); pAllocated = (PVIEWTREE_ENTRY)realloc(s_ViewTreeEntries, Size); if (pAllocated == NULL) return FALSE; // failure else s_ViewTreeEntries = pAllocated; PVIEWTREE_ENTRY pEntry = &s_ViewTreeEntries[s_ViewTreeEntryCount]; // dwID, dwParentID, szKeyName pEntry->dwID = s_ViewTreeEntryCount; pEntry->dwParentID = dwParentID; lstrcpynW(pEntry->szKeyName, pszKeyName, _countof(pEntry->szKeyName)); // Text, ResourceID pEntry->szText[0] = 0; pEntry->dwResourceID = 0; szText[0] = 0; Size = sizeof(szText); RegQueryValueExW(hKey, L"Text", NULL, NULL, LPBYTE(szText), &Size); if (szText[0] == L'@') { pch = wcsrchr(szText, L','); if (pch) { *pch = 0; dwIndex = abs(_wtoi(pch + 1)); pEntry->dwResourceID = dwIndex; } HINSTANCE hInst = LoadLibraryW(&szText[1]); LoadStringW(hInst, dwIndex, szText, _countof(szText)); FreeLibrary(hInst); } else { pEntry->dwResourceID = DWORD(-1); } lstrcpynW(pEntry->szText, szText, _countof(pEntry->szText)); // Type szText[0] = 0; RegQueryValueExW(hKey, L"Type", NULL, NULL, LPBYTE(szText), &Size); if (lstrcmpiW(szText, L"checkbox") == 0) pEntry->dwType = AETYPE_CHECKBOX; else if (lstrcmpiW(szText, L"radio") == 0) pEntry->dwType = AETYPE_RADIO; else if (lstrcmpiW(szText, L"group") == 0) pEntry->dwType = AETYPE_GROUP; else return FALSE; // failure pEntry->nIconID = -1; if (pEntry->dwType == AETYPE_GROUP) { // Bitmap (Icon) UINT nIconIndex = 0; Size = sizeof(szText); szText[0] = 0; RegQueryValueExW(hKey, L"Bitmap", NULL, NULL, LPBYTE(szText), &Size); WCHAR szExpanded[MAX_PATH]; ExpandEnvironmentStringsW(szText, szExpanded, _countof(szExpanded)); pch = wcsrchr(szExpanded, L','); if (pch) { *pch = 0; nIconIndex = abs(_wtoi(pch + 1)); } pEntry->nIconID = ViewTree_AddIcon(szExpanded, nIconIndex); } if (pEntry->dwType == AETYPE_GROUP) { pEntry->hkeyRoot = NULL; pEntry->szRegPath[0] = 0; pEntry->szValueName[0] = 0; pEntry->dwCheckedValue = 0; pEntry->bHasUncheckedValue = FALSE; pEntry->dwUncheckedValue = 0; pEntry->dwDefaultValue = 0; pEntry->hItem = NULL; pEntry->bGrayed = FALSE; pEntry->bChecked = FALSE; } else { // HKeyRoot HKEY HKeyRoot = HKEY_CURRENT_USER; Size = sizeof(HKeyRoot); RegQueryValueExW(hKey, L"HKeyRoot", NULL, NULL, LPBYTE(&HKeyRoot), &Size); pEntry->hkeyRoot = HKeyRoot; // RegPath pEntry->szRegPath[0] = 0; Size = sizeof(szText); RegQueryValueExW(hKey, L"RegPath", NULL, NULL, LPBYTE(szText), &Size); lstrcpynW(pEntry->szRegPath, szText, _countof(pEntry->szRegPath)); // ValueName pEntry->szValueName[0] = 0; Size = sizeof(szText); RegQueryValueExW(hKey, L"ValueName", NULL, NULL, LPBYTE(szText), &Size); lstrcpynW(pEntry->szValueName, szText, _countof(pEntry->szValueName)); // CheckedValue Size = sizeof(Value); Value = 0x00000001; RegQueryValueExW(hKey, L"CheckedValue", NULL, NULL, LPBYTE(&Value), &Size); pEntry->dwCheckedValue = Value; // UncheckedValue Size = sizeof(Value); Value = 0x00000000; pEntry->bHasUncheckedValue = TRUE; if (RegQueryValueExW(hKey, L"UncheckedValue", NULL, NULL, LPBYTE(&Value), &Size) != ERROR_SUCCESS) { pEntry->bHasUncheckedValue = FALSE; } pEntry->dwUncheckedValue = Value; // DefaultValue Size = sizeof(Value); Value = 0x00000001; RegQueryValueExW(hKey, L"DefaultValue", NULL, NULL, LPBYTE(&Value), &Size); pEntry->dwDefaultValue = Value; // hItem pEntry->hItem = NULL; // bGrayed, bChecked HKEY hkeyTarget; Value = pEntry->dwDefaultValue; pEntry->bGrayed = TRUE; if (RegOpenKeyExW(HKEY(pEntry->hkeyRoot), pEntry->szRegPath, 0, KEY_READ, &hkeyTarget) == ERROR_SUCCESS) { Size = sizeof(Value); if (RegQueryValueExW(hkeyTarget, pEntry->szValueName, NULL, NULL, LPBYTE(&Value), &Size) == ERROR_SUCCESS) { pEntry->bGrayed = FALSE; } RegCloseKey(hkeyTarget); } pEntry->bChecked = (Value == pEntry->dwCheckedValue); } // Grayed (ReactOS extension) Size = sizeof(Value); Value = FALSE; RegQueryValueExW(hKey, L"Grayed", NULL, NULL, LPBYTE(&Value), &Size); if (!pEntry->bGrayed) pEntry->bGrayed = Value; BOOL bIsGroup = (pEntry->dwType == AETYPE_GROUP); dwParentID = pEntry->dwID; ++s_ViewTreeEntryCount; if (!bIsGroup) return TRUE; // success // load the children dwIndex = 0; while (RegEnumKeyW(hKey, dwIndex, szKeyName, _countof(szKeyName)) == ERROR_SUCCESS) { HKEY hkeyChild; if (RegOpenKeyExW(hKey, szKeyName, 0, KEY_READ, &hkeyChild) != ERROR_SUCCESS) { ++dwIndex; continue; // failure } ViewTree_LoadTree(hkeyChild, szKeyName, dwParentID); RegCloseKey(hkeyChild); ++dwIndex; } return TRUE; // success }
BOOL OnCreate(HWND hWnd) { HMENU hMenu; HMENU hEditMenu; HMENU hViewMenu; HMENU hShutMenu; HMENU hUpdateSpeedMenu; HMENU hCPUHistoryMenu; int nActivePage; int nParts[3]; RECT rc; WCHAR szTemp[256]; WCHAR szLogOffItem[MAX_PATH]; LPWSTR lpUserName; TCITEM item; DWORD len = 0; SendMessageW(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER))); /* Initialize the Windows Common Controls DLL */ InitCommonControls(); /* Get the minimum window sizes */ GetWindowRect(hWnd, &rc); nMinimumWidth = (rc.right - rc.left); nMinimumHeight = (rc.bottom - rc.top); /* Create the status bar */ hStatusWnd = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS, L"", hWnd, STATUS_WINDOW); if(!hStatusWnd) return FALSE; /* Create the status bar panes */ nParts[0] = STATUS_SIZE1; nParts[1] = STATUS_SIZE2; nParts[2] = STATUS_SIZE3; SendMessageW(hStatusWnd, SB_SETPARTS, 3, (LPARAM) (LPINT) nParts); /* Create tab pages */ hTabWnd = GetDlgItem(hWnd, IDC_TAB); #if 1 hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hWnd, ApplicationPageWndProc); EnableDialogTheme(hApplicationPage); hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hWnd, ProcessPageWndProc); EnableDialogTheme(hProcessPage); hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hWnd, PerformancePageWndProc); EnableDialogTheme(hPerformancePage); #else hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hTabWnd, ApplicationPageWndProc); EnableDialogTheme(hApplicationPage); hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hTabWnd, ProcessPageWndProc); EnableDialogTheme(hProcessPage); hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hTabWnd, PerformancePageWndProc); EnableDialogTheme(hPerformancePage); #endif /* Insert tabs */ LoadStringW(hInst, IDS_TAB_APPS, szTemp, 256); memset(&item, 0, sizeof(TCITEM)); item.mask = TCIF_TEXT; item.pszText = szTemp; (void)TabCtrl_InsertItem(hTabWnd, 0, &item); LoadStringW(hInst, IDS_TAB_PROCESSES, szTemp, 256); memset(&item, 0, sizeof(TCITEM)); item.mask = TCIF_TEXT; item.pszText = szTemp; (void)TabCtrl_InsertItem(hTabWnd, 1, &item); LoadStringW(hInst, IDS_TAB_PERFORMANCE, szTemp, 256); memset(&item, 0, sizeof(TCITEM)); item.mask = TCIF_TEXT; item.pszText = szTemp; (void)TabCtrl_InsertItem(hTabWnd, 2, &item); /* Size everything correctly */ GetClientRect(hWnd, &rc); nOldWidth = rc.right; nOldHeight = rc.bottom; /* nOldStartX = rc.left; */ /*nOldStartY = rc.top; */ #define PAGE_OFFSET_LEFT 17 #define PAGE_OFFSET_TOP 72 #define PAGE_OFFSET_WIDTH (PAGE_OFFSET_LEFT*2) #define PAGE_OFFSET_HEIGHT (PAGE_OFFSET_TOP+32) if ((TaskManagerSettings.Left != 0) || (TaskManagerSettings.Top != 0) || (TaskManagerSettings.Right != 0) || (TaskManagerSettings.Bottom != 0)) { MoveWindow(hWnd, TaskManagerSettings.Left, TaskManagerSettings.Top, TaskManagerSettings.Right - TaskManagerSettings.Left, TaskManagerSettings.Bottom - TaskManagerSettings.Top, TRUE); #ifdef __GNUC__TEST__ MoveWindow(hApplicationPage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); MoveWindow(hProcessPage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); MoveWindow(hPerformancePage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); #endif } if (TaskManagerSettings.Maximized) ShowWindow(hWnd, SW_MAXIMIZE); /* Set the always on top style */ hMenu = GetMenu(hWnd); hEditMenu = GetSubMenu(hMenu, 1); hViewMenu = GetSubMenu(hMenu, 2); hShutMenu = GetSubMenu(hMenu, 4); hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1); hCPUHistoryMenu = GetSubMenu(hViewMenu, 7); /* Check or uncheck the always on top menu item */ if (TaskManagerSettings.AlwaysOnTop) { CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_CHECKED); SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } else { CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_UNCHECKED); SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } /* Check or uncheck the minimize on use menu item */ if (TaskManagerSettings.MinimizeOnUse) CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_UNCHECKED); /* Check or uncheck the hide when minimized menu item */ if (TaskManagerSettings.HideWhenMinimized) CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_UNCHECKED); /* Check or uncheck the show 16-bit tasks menu item */ if (TaskManagerSettings.Show16BitTasks) CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_UNCHECKED); /* Set the view mode */ CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, TaskManagerSettings.ViewMode, MF_BYCOMMAND); if (TaskManagerSettings.ShowKernelTimes) CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED); CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, TaskManagerSettings.UpdateSpeed, MF_BYCOMMAND); if (TaskManagerSettings.CPUHistory_OneGraphPerCPU) CheckMenuRadioItem(hCPUHistoryMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND); else CheckMenuRadioItem(hCPUHistoryMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND); nActivePage = TaskManagerSettings.ActiveTabPage; TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 0); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 1); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 2); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, nActivePage); /* Set the username in the "Log Off %s" item of the Shutdown menu */ /* 1- Get the menu item text and store it temporarily */ GetMenuStringW(hShutMenu, ID_SHUTDOWN_LOGOFF, szTemp, 256, MF_BYCOMMAND); /* 2- Retrieve the username length first, then allocate a buffer for it and call it again */ if (!GetUserNameW(NULL, &len) && GetLastError() == ERROR_INSUFFICIENT_BUFFER) { lpUserName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR)); if (lpUserName && GetUserNameW(lpUserName, &len)) { _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, lpUserName); szLogOffItem[sizeof(szLogOffItem)/sizeof(szLogOffItem[0]) - 1] = UNICODE_NULL; } else { _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a"); } if (lpUserName) HeapFree(GetProcessHeap(), 0, lpUserName); } else { _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a"); } /* 3- Set the menu item text to its formatted counterpart */ ModifyMenuW(hShutMenu, ID_SHUTDOWN_LOGOFF, MF_BYCOMMAND | MF_STRING, ID_SHUTDOWN_LOGOFF, szLogOffItem); /* Setup update speed */ SetUpdateSpeed(hWnd); /* * Refresh the performance data * Sample it twice so we can establish * the delta values & cpu usage */ PerfDataRefresh(); PerfDataRefresh(); RefreshApplicationPage(); RefreshProcessPage(); RefreshPerformancePage(); TrayIcon_ShellAddTrayIcon(); return TRUE; }
static BOOL OnCreate(HWND hWnd) { HMENU hMenu; HMENU hEditMenu; HMENU hViewMenu; HMENU hUpdateSpeedMenu; HMENU hCPUHistoryMenu; int nActivePage; int nParts[3]; RECT rc; TCITEMW item; static WCHAR wszApplications[255]; static WCHAR wszProcesses[255]; static WCHAR wszPerformance[255]; LoadStringW(hInst, IDS_APPLICATIONS, wszApplications, sizeof(wszApplications)/sizeof(WCHAR)); LoadStringW(hInst, IDS_PROCESSES, wszProcesses, sizeof(wszProcesses)/sizeof(WCHAR)); LoadStringW(hInst, IDS_PERFORMANCE, wszPerformance, sizeof(wszPerformance)/sizeof(WCHAR)); SendMessageW(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER))); SendMessageW(hMainWnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadImageW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED)); /* Initialize the Windows Common Controls DLL */ InitCommonControls(); /* Get the minimum window sizes */ GetWindowRect(hWnd, &rc); nMinimumWidth = (rc.right - rc.left); nMinimumHeight = (rc.bottom - rc.top); /* Create the status bar */ hStatusWnd = CreateStatusWindowW(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS, NULL, hWnd, STATUS_WINDOW); if(!hStatusWnd) return FALSE; /* Create the status bar panes */ nParts[0] = 100; nParts[1] = 210; nParts[2] = 400; SendMessageW(hStatusWnd, SB_SETPARTS, 3, (LPARAM)nParts); /* Create tab pages */ hTabWnd = GetDlgItem(hWnd, IDC_TAB); #if 1 hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hWnd, ApplicationPageWndProc); hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hWnd, ProcessPageWndProc); hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hWnd, PerformancePageWndProc); #else hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hTabWnd, ApplicationPageWndProc); hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hTabWnd, ProcessPageWndProc); hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hTabWnd, PerformancePageWndProc); #endif /* Insert tabs */ memset(&item, 0, sizeof(TCITEMW)); item.mask = TCIF_TEXT; item.pszText = wszApplications; SendMessageW(hTabWnd, TCM_INSERTITEMW, 0, (LPARAM)&item); memset(&item, 0, sizeof(TCITEMW)); item.mask = TCIF_TEXT; item.pszText = wszProcesses; SendMessageW(hTabWnd, TCM_INSERTITEMW, 1, (LPARAM)&item); memset(&item, 0, sizeof(TCITEMW)); item.mask = TCIF_TEXT; item.pszText = wszPerformance; SendMessageW(hTabWnd, TCM_INSERTITEMW, 2, (LPARAM)&item); /* Size everything correctly */ GetClientRect(hWnd, &rc); nOldWidth = rc.right; nOldHeight = rc.bottom; /* nOldStartX = rc.left; */ /*nOldStartY = rc.top; */ #define PAGE_OFFSET_LEFT 17 #define PAGE_OFFSET_TOP 72 #define PAGE_OFFSET_WIDTH (PAGE_OFFSET_LEFT*2) #define PAGE_OFFSET_HEIGHT (PAGE_OFFSET_TOP+32) if ((TaskManagerSettings.Left != 0) || (TaskManagerSettings.Top != 0) || (TaskManagerSettings.Right != 0) || (TaskManagerSettings.Bottom != 0)) { MoveWindow(hWnd, TaskManagerSettings.Left, TaskManagerSettings.Top, TaskManagerSettings.Right - TaskManagerSettings.Left, TaskManagerSettings.Bottom - TaskManagerSettings.Top, TRUE); #ifdef __GNUC__TEST__ MoveWindow(hApplicationPage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); MoveWindow(hProcessPage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); MoveWindow(hPerformancePage, TaskManagerSettings.Left + PAGE_OFFSET_LEFT, TaskManagerSettings.Top + PAGE_OFFSET_TOP, TaskManagerSettings.Right - TaskManagerSettings.Left - PAGE_OFFSET_WIDTH, TaskManagerSettings.Bottom - TaskManagerSettings.Top - PAGE_OFFSET_HEIGHT, FALSE); #endif } if (TaskManagerSettings.Maximized) ShowWindow(hWnd, SW_MAXIMIZE); /* Set the always on top style */ hMenu = GetMenu(hWnd); hEditMenu = GetSubMenu(hMenu, 1); hViewMenu = GetSubMenu(hMenu, 2); hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1); hCPUHistoryMenu = GetSubMenu(hViewMenu, 7); /* Check or uncheck the always on top menu item */ if (TaskManagerSettings.AlwaysOnTop) { CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_CHECKED); SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } else { CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_UNCHECKED); SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } /* Check or uncheck the minimize on use menu item */ if (TaskManagerSettings.MinimizeOnUse) CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_UNCHECKED); /* Check or uncheck the hide when minimized menu item */ if (TaskManagerSettings.HideWhenMinimized) CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_UNCHECKED); /* Check or uncheck the show 16-bit tasks menu item */ if (TaskManagerSettings.Show16BitTasks) CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_UNCHECKED); if (TaskManagerSettings.View_LargeIcons) CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_LARGE, MF_BYCOMMAND); else if (TaskManagerSettings.View_SmallIcons) CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_SMALL, MF_BYCOMMAND); else CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND); if (TaskManagerSettings.ShowKernelTimes) CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED); if (TaskManagerSettings.UpdateSpeed == 1) CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_HIGH, MF_BYCOMMAND); else if (TaskManagerSettings.UpdateSpeed == 2) CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_NORMAL, MF_BYCOMMAND); else if (TaskManagerSettings.UpdateSpeed == 4) CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_LOW, MF_BYCOMMAND); else CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_PAUSED, MF_BYCOMMAND); if (TaskManagerSettings.CPUHistory_OneGraphPerCPU) CheckMenuRadioItem(hCPUHistoryMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND); else CheckMenuRadioItem(hCPUHistoryMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND); nActivePage = TaskManagerSettings.ActiveTabPage; SendMessageW(hTabWnd, TCM_SETCURFOCUS, 0, 0); SendMessageW(hTabWnd, TCM_SETCURFOCUS, 1, 0); SendMessageW(hTabWnd, TCM_SETCURFOCUS, 2, 0); SendMessageW(hTabWnd, TCM_SETCURFOCUS, nActivePage, 0); if (TaskManagerSettings.UpdateSpeed == 1) SetTimer(hWnd, 1, 1000, NULL); else if (TaskManagerSettings.UpdateSpeed == 2) SetTimer(hWnd, 1, 2000, NULL); else if (TaskManagerSettings.UpdateSpeed == 4) SetTimer(hWnd, 1, 4000, NULL); /* * Refresh the performance data * Sample it twice so we can establish * the delta values & cpu usage */ PerfDataRefresh(); PerfDataRefresh(); RefreshApplicationPage(); RefreshProcessPage(); RefreshPerformancePage(); TrayIcon_ShellAddTrayIcon(); return TRUE; }
static VOID InitializeSystemPage(HWND hwndDlg) { WCHAR szTime[200]; DWORD Length; DWORDLONG AvailableBytes, UsedBytes; MEMORYSTATUSEX mem; WCHAR szFormat[40]; WCHAR szDesc[50]; SYSTEM_INFO SysInfo; /* set date/time */ szTime[0] = L'\0'; Length = GetDateFormat(LOCALE_SYSTEM_DEFAULT, DATE_LONGDATE, NULL, NULL, szTime, sizeof(szTime) / sizeof(WCHAR)); if (Length) { szTime[Length-1] = L','; szTime[Length++] = L' '; } Length = GetTimeFormatW(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT|LOCALE_NOUSEROVERRIDE, NULL, NULL, &szTime[Length], (sizeof(szTime) / sizeof(WCHAR))); szTime[199] = L'\0'; SendDlgItemMessageW(hwndDlg, IDC_STATIC_TIME, WM_SETTEXT, 0, (LPARAM)szTime); /* set computer name */ szTime[0] = L'\0'; Length = sizeof(szTime) / sizeof(WCHAR); if (GetComputerNameW(szTime, &Length)) SendDlgItemMessageW(hwndDlg, IDC_STATIC_COMPUTER, WM_SETTEXT, 0, (LPARAM)szTime); /* set product name */ if (GetOSVersion(szTime)) { SendDlgItemMessage(hwndDlg, IDC_STATIC_OS, WM_SETTEXT, 0, (LPARAM)szTime); } else { if (LoadStringW(hInst, IDS_VERSION_UNKNOWN, szTime, sizeof(szTime) / sizeof(WCHAR))) { szTime[(sizeof(szTime) / sizeof(WCHAR))-1] = L'\0'; SendDlgItemMessage(hwndDlg, IDC_STATIC_VERSION, WM_SETTEXT, 0, (LPARAM)szTime); } } /* FIXME set product language/local language */ if (GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,LOCALE_SLANGUAGE , szTime, sizeof(szTime) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, IDC_STATIC_LANG, WM_SETTEXT, 0, (LPARAM)szTime); /* set system manufacturer */ szTime[0] = L'\0'; if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"SystemManufacturer", REG_SZ, szTime, sizeof(szTime))) { szTime[199] = L'\0'; SendDlgItemMessageW(hwndDlg, IDC_STATIC_MANU, WM_SETTEXT, 0, (LPARAM)szTime); } /* set motherboard model */ szTime[0] = L'\0'; if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"SystemProductName", REG_SZ, szTime, sizeof(szTime))) { SendDlgItemMessageW(hwndDlg, IDC_STATIC_MODEL, WM_SETTEXT, 0, (LPARAM)szTime); } /* set bios model */ szTime[0] = L'\0'; if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"BIOSVendor", REG_SZ, szTime, sizeof(szTime))) { DWORD Index; DWORD StrLength = (sizeof(szTime) / sizeof(WCHAR)); Index = wcslen(szTime); StrLength -= Index; if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", L"BIOSReleaseDate", REG_SZ, &szTime[Index], StrLength)) { if (Index + StrLength > (sizeof(szTime)/sizeof(WCHAR))- 15) { //FIXME retrieve BiosMajorRelease, BiosMinorRelease //StrLength = wcslen(&szTime[Index]); //szTime[Index+StrLength] = L' '; //wcscpy(&szTime[Index+StrLength], L"Ver: "); //FIXME NON-NLS //szTime[(sizeof(szTime)/sizeof(WCHAR))-1] = L'\0'; } SendDlgItemMessageW(hwndDlg, IDC_STATIC_BIOS, WM_SETTEXT, 0, (LPARAM)szTime); } } /* set processor string */ if (GetRegValue(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\CentralProcessor\\0", L"ProcessorNameString", REG_SZ, szDesc, sizeof(szDesc))) { /* FIXME retrieve current speed */ szFormat[0] = L'\0'; GetSystemInfo(&SysInfo); if (SysInfo.dwNumberOfProcessors > 1) LoadStringW(hInst, IDS_FORMAT_MPPROC, szFormat, sizeof(szFormat) / sizeof(WCHAR)); else LoadStringW(hInst, IDS_FORMAT_UNIPROC, szFormat, sizeof(szFormat) / sizeof(WCHAR)); szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0'; wsprintfW(szTime, szFormat, szDesc, SysInfo.dwNumberOfProcessors); SendDlgItemMessageW(hwndDlg, IDC_STATIC_PROC, WM_SETTEXT, 0, (LPARAM)szTime); } /* retrieve available memory */ ZeroMemory(&mem, sizeof(mem)); mem.dwLength = sizeof(mem); if (GlobalMemoryStatusEx(&mem)) { if (LoadStringW(hInst, IDS_FORMAT_MB, szFormat, sizeof(szFormat) / sizeof(WCHAR))) { /* set total mem string */ szFormat[(sizeof(szFormat) / sizeof(WCHAR))-1] = L'\0'; wsprintfW(szTime, szFormat, (mem.ullTotalPhys/1048576)); SendDlgItemMessageW(hwndDlg, IDC_STATIC_MEM, WM_SETTEXT, 0, (LPARAM)szTime); } if (LoadStringW(hInst, IDS_FORMAT_SWAP, szFormat, sizeof(szFormat) / sizeof(WCHAR))) { /* set swap string */ AvailableBytes = (mem.ullTotalPageFile-mem.ullTotalPhys)/1048576; UsedBytes = (mem.ullTotalPageFile-mem.ullAvailPageFile)/1048576; szFormat[(sizeof(szFormat) / sizeof(WCHAR))-1] = L'\0'; wsprintfW(szTime, szFormat, (UsedBytes), (AvailableBytes)); SendDlgItemMessageW(hwndDlg, IDC_STATIC_SWAP, WM_SETTEXT, 0, (LPARAM)szTime); } } /* set directx version string */ wcscpy(szTime, L"ReactX "); if (GetDirectXVersion(&szTime[7])) { SendDlgItemMessage(hwndDlg, IDC_STATIC_VERSION, WM_SETTEXT, 0, (LPARAM)szTime); } else { if (LoadStringW(hInst, IDS_VERSION_UNKNOWN, szTime, sizeof(szTime) / sizeof(WCHAR))) { szTime[(sizeof(szTime) / sizeof(WCHAR))-1] = L'\0'; SendDlgItemMessage(hwndDlg, IDC_STATIC_VERSION, WM_SETTEXT, 0, (LPARAM)szTime); } } }
BOOL SH_ShowDriveProperties(WCHAR * drive, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST * apidl) { HPSXA hpsx = NULL; HPROPSHEETPAGE hpsp[MAX_PROPERTY_SHEET_PAGE]; PROPSHEETHEADERW psh; BOOL ret; UINT i; WCHAR szName[MAX_PATH+6]; DWORD dwMaxComponent, dwFileSysFlags; IDataObject * pDataObj = NULL; UINT DriveType; ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); psh.dwSize = sizeof(PROPSHEETHEADERW); //psh.dwFlags = PSH_USECALLBACK | PSH_PROPTITLE; psh.hwndParent = NULL; psh.u2.nStartPage = 0; psh.u3.phpage = hpsp; if (GetVolumeInformationW(drive, szName, sizeof(szName)/sizeof(WCHAR), NULL, &dwMaxComponent, &dwFileSysFlags, NULL, 0)) { psh.pszCaption = szName; psh.dwFlags |= PSH_PROPTITLE; if (!wcslen(szName)) { /* FIXME * check if disk is a really a local hdd */ i = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szName, sizeof(szName)/sizeof(WCHAR)-6); if (i > 0 && i < (sizeof(szName)/sizeof(WCHAR)) - 6) { szName[i] = L' '; szName[i+1] = L'('; wcscpy(&szName[i+2], drive); szName[i+4] = L')'; szName[i+5] = L'\0'; } } } DriveType = GetDriveTypeW(drive); for (i = 0; i < DRIVE_PROPERTY_PAGES; i++) { if (PropPages[i].DriveType == (UINT)-1 || (PropPages[i].DriveType != (UINT)-1 && PropPages[i].DriveType == DriveType)) { HPROPSHEETPAGE hprop = SH_CreatePropertySheetPage(PropPages[i].resname, PropPages[i].dlgproc, (LPARAM)drive, NULL); if (hprop) { hpsp[psh.nPages] = hprop; psh.nPages++; } } } if (SHCreateDataObject(pidlFolder, 1, apidl, NULL, &IID_IDataObject, (void**)&pDataObj) == S_OK) { hpsx = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"Drive", MAX_PROPERTY_SHEET_PAGE-DRIVE_PROPERTY_PAGES, pDataObj); if (hpsx) { SHAddFromPropSheetExtArray(hpsx, (LPFNADDPROPSHEETPAGE)AddPropSheetPageProc, (LPARAM)&psh); } } ret = PropertySheetW(&psh); if (pDataObj) IDataObject_Release(pDataObj); if (hpsx) SHDestroyPropSheetExtArray(hpsx); if (ret < 0) return FALSE; else return TRUE; }
VOID InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) { WCHAR szFs[100] = {0}; WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; INT iSelIndex; ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; DWORD ClusterSize; LRESULT lIndex; HWND hDlgCtrl; hDlgCtrl = GetDlgItem(hwndDlg, 28677); iSelIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0); if (iSelIndex == CB_ERR) return; if (SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFs) == CB_ERR) return; szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; szDrive[0] = pContext->Drive + 'A'; if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) return; if (!wcsicmp(szFs, L"FAT16") || !wcsicmp(szFs, L"FAT")) //ODYSSEY HACK { if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfBytes)) { TRACE("FAT16 is not supported on hdd larger than 4G current %lu\n", TotalNumberOfBytes.QuadPart); SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); return; } if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) { hDlgCtrl = GetDlgItem(hwndDlg, 28680); szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); } } else if (!wcsicmp(szFs, L"FAT32")) { if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfBytes)) { TRACE("FAT32 is not supported on hdd larger than 32G current %lu\n", TotalNumberOfBytes.QuadPart); SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); return; } if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) { hDlgCtrl = GetDlgItem(hwndDlg, 28680); szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); } } else if (!wcsicmp(szFs, L"NTFS")) { if (!GetDefaultClusterSize(szFs, &ClusterSize, &TotalNumberOfBytes)) { TRACE("NTFS is not supported on hdd larger than 2TB current %lu\n", TotalNumberOfBytes.QuadPart); SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); return; } hDlgCtrl = GetDlgItem(hwndDlg, 28680); if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) { szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); } ClusterSize = 512; for (lIndex = 0; lIndex < 4; lIndex++) { TotalNumberOfBytes.QuadPart = ClusterSize; if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szFs, sizeof(szFs)/sizeof(WCHAR))) { lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); } ClusterSize *= 2; } } else { FIXME("unknown fs\n"); SendDlgItemMessageW(hwndDlg, 28680, CB_RESETCONTENT, iSelIndex, 0); return; } }
static DWORD WINAPI ThreadFunc(LPVOID Context) { CComPtr<IBindStatusCallback> dl; WCHAR path[MAX_PATH]; PWSTR p, q; HWND Dlg = (HWND) Context; ULONG dwContentLen, dwBytesWritten, dwBytesRead, dwStatus; ULONG dwCurrentBytesRead = 0; ULONG dwStatusLen = sizeof(dwStatus); BOOL bCancelled = FALSE; BOOL bTempfile = FALSE; BOOL bCab = FALSE; HINTERNET hOpen = NULL; HINTERNET hFile = NULL; HANDLE hOut = INVALID_HANDLE_VALUE; unsigned char lpBuffer[4096]; PCWSTR lpszAgent = L"RApps/1.0"; URL_COMPONENTS urlComponents; size_t urlLength, filenameLength; /* build the path for the download */ p = wcsrchr(AppInfo->szUrlDownload, L'/'); q = wcsrchr(AppInfo->szUrlDownload, L'?'); /* do we have a final slash separator? */ if (!p) goto end; /* prepare the tentative length of the filename, maybe we've to remove part of it later on */ filenameLength = wcslen(p) * sizeof(WCHAR); /* do we have query arguments in the target URL after the filename? account for them (e.g. https://example.org/myfile.exe?no_adware_plz) */ if (q && q > p && (q - p) > 0) filenameLength -= wcslen(q - 1) * sizeof(WCHAR); /* is this URL an update package for RAPPS? if so store it in a different place */ if (wcscmp(AppInfo->szUrlDownload, APPLICATION_DATABASE_URL) == 0) { bCab = TRUE; if (!GetStorageDirectory(path, _countof(path))) goto end; } else { if (FAILED(StringCbCopyW(path, sizeof(path), SettingsInfo.szDownloadDir))) goto end; } /* is the path valid? can we access it? */ if (GetFileAttributesW(path) == INVALID_FILE_ATTRIBUTES) { if (!CreateDirectoryW(path, NULL)) goto end; } /* append a \ to the provided file system path, and the filename portion from the URL after that */ if (FAILED(StringCbCatW(path, sizeof(path), L"\\"))) goto end; if (FAILED(StringCbCatNW(path, sizeof(path), p + 1, filenameLength))) goto end; if (!bCab && AppInfo->szSHA1[0] != 0 && GetFileAttributesW(path) != INVALID_FILE_ATTRIBUTES) { /* only open it in case of total correctness */ if (VerifyInteg(AppInfo->szSHA1, path)) goto run; } /* download it */ bTempfile = TRUE; CDownloadDialog_Constructor(Dlg, &bCancelled, IID_PPV_ARG(IBindStatusCallback, &dl)); if (dl == NULL) goto end; /* FIXME: this should just be using the system-wide proxy settings */ switch(SettingsInfo.Proxy) { case 0: /* preconfig */ hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); break; case 1: /* direct (no proxy) */ hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); break; case 2: /* use proxy */ hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PROXY, SettingsInfo.szProxyServer, SettingsInfo.szNoProxyFor, 0); break; default: /* preconfig */ hOpen = InternetOpenW(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); break; } if (!hOpen) goto end; hFile = InternetOpenUrlW(hOpen, AppInfo->szUrlDownload, NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0); if (!hFile) goto end; if (!HttpQueryInfoW(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwStatusLen, NULL)) goto end; if(dwStatus != HTTP_STATUS_OK) { WCHAR szMsgText[MAX_STR_LEN]; if (!LoadStringW(hInst, IDS_UNABLE_TO_DOWNLOAD, szMsgText, sizeof(szMsgText) / sizeof(WCHAR))) goto end; MessageBoxW(hMainWnd, szMsgText, NULL, MB_OK | MB_ICONERROR); goto end; } dwStatusLen = sizeof(dwStatus); memset(&urlComponents, 0, sizeof(urlComponents)); urlComponents.dwStructSize = sizeof(urlComponents); if(FAILED(StringCbLengthW(AppInfo->szUrlDownload, sizeof(AppInfo->szUrlDownload), &urlLength))) goto end; urlLength /= sizeof(WCHAR); urlComponents.dwSchemeLength = urlLength + 1; urlComponents.lpszScheme = (LPWSTR)malloc(urlComponents.dwSchemeLength * sizeof(WCHAR)); urlComponents.dwHostNameLength = urlLength + 1; urlComponents.lpszHostName = (LPWSTR)malloc(urlComponents.dwHostNameLength * sizeof(WCHAR)); if(!InternetCrackUrlW(AppInfo->szUrlDownload, urlLength+1, ICU_DECODE | ICU_ESCAPE, &urlComponents)) goto end; if(urlComponents.nScheme == INTERNET_SCHEME_HTTP || urlComponents.nScheme == INTERNET_SCHEME_HTTPS) HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwContentLen, &dwStatus, 0); if(urlComponents.nScheme == INTERNET_SCHEME_FTP) dwContentLen = FtpGetFileSize(hFile, &dwStatus); #ifdef USE_CERT_PINNING /* are we using HTTPS to download the RAPPS update package? check if the certificate is original */ if ((urlComponents.nScheme == INTERNET_SCHEME_HTTPS) && (wcscmp(AppInfo->szUrlDownload, APPLICATION_DATABASE_URL) == 0) && (!CertIsValid(hOpen, urlComponents.lpszHostName))) { WCHAR szMsgText[MAX_STR_LEN]; if (!LoadStringW(hInst, IDS_CERT_DOES_NOT_MATCH, szMsgText, sizeof(szMsgText) / sizeof(WCHAR))) goto end; MessageBoxW(Dlg, szMsgText, NULL, MB_OK | MB_ICONERROR); goto end; } #endif free(urlComponents.lpszScheme); free(urlComponents.lpszHostName); hOut = CreateFileW(path, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL); if (hOut == INVALID_HANDLE_VALUE) goto end; do { if (!InternetReadFile(hFile, lpBuffer, _countof(lpBuffer), &dwBytesRead)) { WCHAR szMsgText[MAX_STR_LEN]; if (!LoadStringW(hInst, IDS_INTERRUPTED_DOWNLOAD, szMsgText, _countof(szMsgText))) goto end; MessageBoxW(hMainWnd, szMsgText, NULL, MB_OK | MB_ICONERROR); goto end; } if (!WriteFile(hOut, &lpBuffer[0], dwBytesRead, &dwBytesWritten, NULL)) { WCHAR szMsgText[MAX_STR_LEN]; if (!LoadStringW(hInst, IDS_UNABLE_TO_WRITE, szMsgText, _countof(szMsgText))) goto end; MessageBoxW(hMainWnd, szMsgText, NULL, MB_OK | MB_ICONERROR); goto end; } dwCurrentBytesRead += dwBytesRead; dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, AppInfo->szUrlDownload); } while (dwBytesRead && !bCancelled); CloseHandle(hOut); hOut = INVALID_HANDLE_VALUE; if (bCancelled) goto end; /* if this thing isn't a RAPPS update and it has a SHA-1 checksum verify its integrity by using the native advapi32.A_SHA1 functions */ if (!bCab && AppInfo->szSHA1[0] != 0) { WCHAR szMsgText[MAX_STR_LEN]; /* change a few strings in the download dialog to reflect the verification process */ LoadStringW(hInst, IDS_INTEG_CHECK_TITLE, szMsgText, _countof(szMsgText)); SetWindowText(Dlg, szMsgText); SendMessageW(GetDlgItem(Dlg, IDC_DOWNLOAD_STATUS), WM_SETTEXT, 0, (LPARAM)path); /* this may take a while, depending on the file size */ if (!VerifyInteg(AppInfo->szSHA1, path)) { if (!LoadStringW(hInst, IDS_INTEG_CHECK_FAIL, szMsgText, _countof(szMsgText))) goto end; MessageBoxW(Dlg, szMsgText, NULL, MB_OK | MB_ICONERROR); goto end; } } ShowWindow(Dlg, SW_HIDE); run: /* run it */ if (!bCab) ShellExecuteW( NULL, L"open", path, NULL, NULL, SW_SHOWNORMAL ); end: if (hOut != INVALID_HANDLE_VALUE) CloseHandle(hOut); InternetCloseHandle(hFile); InternetCloseHandle(hOpen); if (bTempfile) { if (bCancelled || (SettingsInfo.bDelInstaller && !bCab)) DeleteFileW(path); } EndDialog(Dlg, 0); return 0; }
static void InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) { WCHAR szVolumeName[MAX_PATH+1] = {0}; DWORD MaxComponentLength = 0; DWORD FileSystemFlags = 0; WCHAR FileSystemName[MAX_PATH+1] = {0}; WCHAR szFormat[50]; WCHAR szBuffer[128]; BOOL ret; UINT DriveType; ULARGE_INTEGER FreeBytesAvailable; LARGE_INTEGER TotalNumberOfFreeBytes; LARGE_INTEGER TotalNumberOfBytes; ret = GetVolumeInformationW(szDrive, szVolumeName, MAX_PATH+1, NULL, &MaxComponentLength, &FileSystemFlags, FileSystemName, MAX_PATH+1); if (ret) { /* set volume label */ SendDlgItemMessageW(hwndDlg, 14000, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szVolumeName); /* set filesystem type */ SendDlgItemMessageW(hwndDlg, 14002, WM_SETTEXT, (WPARAM)NULL, (LPARAM)FileSystemName); } DriveType = GetDriveTypeW(szDrive); if (DriveType == DRIVE_FIXED || DriveType == DRIVE_CDROM) { if(GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable, (PULARGE_INTEGER)&TotalNumberOfBytes, (PULARGE_INTEGER)&TotalNumberOfFreeBytes)) { WCHAR szResult[128]; LONGLONG Result; HANDLE hVolume; DWORD BytesReturned = 0; swprintf(szResult, L"\\\\.\\%c:", towupper(szDrive[0])); hVolume = CreateFileW(szResult, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); if (hVolume != INVALID_HANDLE_VALUE) { ret = DeviceIoControl(hVolume, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, (LPVOID)&TotalNumberOfBytes, sizeof(ULARGE_INTEGER), &BytesReturned, NULL); if (ret && StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); CloseHandle(hVolume); } TRACE("szResult %s hVOlume %p ret %d LengthInformation %ul Bytesreturned %d\n", debugstr_w(szResult), hVolume, ret, TotalNumberOfBytes.QuadPart, BytesReturned); if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart - FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14003, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); if (StrFormatByteSizeW(FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); Result = GetFreeBytesShare(TotalNumberOfFreeBytes.QuadPart, TotalNumberOfBytes.QuadPart); /* set free bytes percentage */ swprintf(szResult, L"%02d%%", Result); SendDlgItemMessageW(hwndDlg, 14006, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); /* store used share amount */ Result = 100 - Result; swprintf(szResult, L"%02d%%", Result); SendDlgItemMessageW(hwndDlg, 14004, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); if (DriveType == DRIVE_FIXED) { if (LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14001, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer); } else /* DriveType == DRIVE_CDROM) */ { if (LoadStringW(shell32_hInstance, IDS_DRIVE_CDROM, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14001, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer); } } } /* set drive description */ SendDlgItemMessageW(hwndDlg, 14009, WM_GETTEXT, (WPARAM)50, (LPARAM)szFormat); swprintf(szBuffer, szFormat, szDrive); SendDlgItemMessageW(hwndDlg, 14009, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szBuffer); }
LRESULT CommDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { LPDIALOG_INFO lpDlgInfo = NULL; HWND hBox; switch (Msg) { case WM_INITDIALOG: { WCHAR wstr[255]; RECT rc, rcDlg, rcOwner; HWND hOwner; INT i; lpDlgInfo = (LPDIALOG_INFO)lParam; SetWindowLongPtrW(hDlg, DWL_USER, (LONG_PTR)lpDlgInfo); /* Set title */ if(LoadStringW(hDllInstance, IDS_TITLE, wstr, sizeof(wstr) / sizeof(wstr[0]))) { SetWindowTextW(hDlg, wstr); } /* FIXME - this won't work correctly systems with multiple monitors! */ if(!(hOwner = GetParent(hDlg))) hOwner = GetDesktopWindow(); /* Position dialog in the center of owner window */ GetWindowRect(hOwner, &rcOwner); GetWindowRect(hDlg, &rcDlg); CopyRect(&rc, &rcOwner); OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top); OffsetRect(&rc, -rc.left, -rc.top); OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom); SetWindowPos(hDlg, HWND_TOP, rcOwner.left + (rc.right / 2), rcOwner.top + (rc.bottom / 2), 0, 0, SWP_NOSIZE); /* Initialize baud rate combo */ if(!(hBox = GetDlgItem(hDlg, IDC_BAUDRATE))) EndDialog(hDlg, ERROR_CANCELLED); for(i = 0; Bauds[i]; i++) { wsprintf(wstr, L"%d", Bauds[i]); SendMessageW(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)wstr); if(Bauds[i] == lpDlgInfo->lpCC->dcb.BaudRate) SendMessageW(hBox, CB_SETCURSEL, (WPARAM)i, 0); } if(SendMessageW(hBox, CB_GETCURSEL, 0, 0) == CB_ERR) SendMessageW(hBox, CB_SETCURSEL, DEFAULT_BAUD_INDEX, 0); /* Initialize byte size combo */ if(!(hBox = GetDlgItem(hDlg, IDC_BYTESIZE))) EndDialog(hDlg, ERROR_CANCELLED); for(i = 0; ByteSizes[i]; i++) { wsprintf(wstr, L"%d", Bauds[i]); SendMessageW(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)wstr); if(ByteSizes[i] == lpDlgInfo->lpCC->dcb.ByteSize) SendMessageW(hBox, CB_SETCURSEL, (WPARAM)i, 0); } if(SendMessageW(hBox, CB_GETCURSEL, 0, 0) == CB_ERR) SendMessageW(hBox, CB_SETCURSEL, DEFAULT_BYTESIZE_INDEX, 0); /* Initialize parity combo */ if(!(hBox = GetDlgItem(hDlg, IDC_PARITY))) EndDialog(hDlg, ERROR_CANCELLED); for(i = 0; Parities[i].StrId; i++) { if(LoadStringW(hDllInstance, Parities[i].StrId, wstr, sizeof(wstr) / sizeof(wstr[0]))) { SendMessageW(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)wstr); if(Parities[i].Parity == lpDlgInfo->lpCC->dcb.Parity) SendMessageW(hBox, CB_SETCURSEL, (WPARAM)i, 0); } } if(SendMessageW(hBox, CB_GETCURSEL, 0, 0)==CB_ERR) SendMessageW(hBox, CB_SETCURSEL, DEFAULT_PARITY_INDEX, 0); /* Initialize stop bits combo */ if(!(hBox = GetDlgItem(hDlg, IDC_STOPBITS))) EndDialog(hDlg, ERROR_CANCELLED); for(i = 0; StopBits[i].StrId; i++) { if(LoadStringW(hDllInstance, StopBits[i].StrId, wstr, sizeof(wstr) / sizeof(wstr[0]))) { SendMessageW(hBox, CB_INSERTSTRING, (WPARAM)i, (LPARAM)wstr); if(StopBits[i].StopBit == lpDlgInfo->lpCC->dcb.StopBits) SendMessageW(hBox, CB_SETCURSEL, (WPARAM)i, 0); } } if(SendMessageW(hBox, CB_GETCURSEL, 0, 0)==CB_ERR) SendMessageW(hBox, CB_SETCURSEL, DEFAULT_STOPBITS_INDEX, 0); /* Initialize flow control combo */ if(!(hBox = GetDlgItem(hDlg, IDC_FLOW))) EndDialog(hDlg, ERROR_CANCELLED); if(LoadStringW(hDllInstance, IDS_FC_NO, wstr, sizeof(wstr) / sizeof(wstr[0]))) { SendMessageW(hBox, CB_INSERTSTRING, 0, (LPARAM)wstr); SendMessageW(hBox, CB_SETCURSEL, 0, 0); lpDlgInfo->InitialFlowIndex = 0; } if(LoadStringW(hDllInstance, IDS_FC_CTSRTS, wstr, sizeof(wstr) / sizeof(wstr[0]))) { SendMessageW(hBox, CB_INSERTSTRING, 1, (LPARAM)wstr); if(lpDlgInfo->lpCC->dcb.fRtsControl == RTS_CONTROL_HANDSHAKE || lpDlgInfo->lpCC->dcb.fOutxCtsFlow == TRUE) { SendMessageW(hBox, CB_SETCURSEL, 1, 0); lpDlgInfo->InitialFlowIndex = 1; } } if(LoadStringW(hDllInstance, IDS_FC_XONXOFF, wstr, sizeof(wstr) / sizeof(wstr[0]))) { SendMessageW(hBox, CB_INSERTSTRING, 2, (LPARAM)wstr); if(lpDlgInfo->lpCC->dcb.fOutX || lpDlgInfo->lpCC->dcb.fInX) { SendMessageW(hBox, CB_SETCURSEL, 2, 0); lpDlgInfo->InitialFlowIndex = 2; } } /* Set focus */ SetFocus(GetDlgItem(hDlg, IDC_OKBTN)); return FALSE; } /* WM_INITDIALOG */ case WM_COMMAND: { switch(wParam) { case IDC_CANCELBTN: EndDialog(hDlg, ERROR_CANCELLED); break; case IDC_OKBTN: OkButton(hDlg); EndDialog(hDlg, ERROR_SUCCESS); break; } return TRUE; } /* WM_COMMAND */ case WM_CLOSE: { EndDialog(hDlg, ERROR_CANCELLED); return TRUE; } /* WM_CLOSE */ default: return FALSE; } }
inline int LoadStringX(HINSTANCE hInstance, UINT id, wchar_t* buffer, int buffermax) { return LoadStringW(hInstance, id, buffer, buffermax); }
VOID OnCommand(WPARAM wParam, LPARAM lParam) { WORD wCommand = LOWORD(wParam); if (lParam == (LPARAM) m_SearchBar->m_hWnd) { WCHAR szBuf[MAX_STR_LEN]; switch (HIWORD(wParam)) { case EN_SETFOCUS: { WCHAR szWndText[MAX_STR_LEN]; LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf)); m_SearchBar->GetWindowTextW(szWndText, MAX_STR_LEN); if (wcscmp(szBuf, szWndText) == 0) { SearchEnabled = FALSE; m_SearchBar->SetWindowTextW(L""); } } break; case EN_KILLFOCUS: { m_SearchBar->GetWindowTextW(szBuf, MAX_STR_LEN); if (wcslen(szBuf) < 1) { LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf)); SearchEnabled = FALSE; m_SearchBar->SetWindowTextW(szBuf); } } break; case EN_CHANGE: { WCHAR szWndText[MAX_STR_LEN]; if (!SearchEnabled) { SearchEnabled = TRUE; break; } LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf)); m_SearchBar->GetWindowTextW(szWndText, MAX_STR_LEN); if (wcscmp(szBuf, szWndText) != 0) { StringCbCopy(szSearchPattern, sizeof(szSearchPattern), szWndText); } else { szSearchPattern[0] = UNICODE_NULL; } DWORD dwDelay; SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &dwDelay, 0); SetTimer(SEARCH_TIMER_ID, dwDelay); } break; } return; } switch (wCommand) { case ID_OPEN_LINK: ShellExecuteW(m_hWnd, L"open", pLink, NULL, NULL, SW_SHOWNOACTIVATE); HeapFree(GetProcessHeap(), 0, pLink); break; case ID_COPY_LINK: CopyTextToClipboard(pLink); HeapFree(GetProcessHeap(), 0, pLink); break; case ID_SETTINGS: CreateSettingsDlg(m_hWnd); break; case ID_EXIT: PostMessageW(WM_CLOSE, 0, 0); break; case ID_INSTALL: if (DownloadApplication(-1)) /* TODO: Implement install dialog * if (InstallApplication(-1)) */ UpdateApplicationsList(-1); break; case ID_UNINSTALL: if (UninstallApplication(-1, FALSE)) UpdateApplicationsList(-1); break; case ID_MODIFY: if (UninstallApplication(-1, TRUE)) UpdateApplicationsList(-1); break; case ID_REGREMOVE: RemoveAppFromRegistry(-1); break; case ID_REFRESH: UpdateApplicationsList(-1); break; case ID_RESETDB: UpdateAppsDB(); UpdateApplicationsList(-1); break; case ID_HELP: MessageBoxW(L"Help not implemented yet", NULL, MB_OK); break; case ID_ABOUT: ShowAboutDialog(); break; } }
static void on_theme_install(HWND dialog) { static const WCHAR filterMask[] = {0,'*','.','m','s','s','t','y','l','e','s',';', '*','.','t','h','e','m','e',0,0}; static const WCHAR themeExt[] = {'.','T','h','e','m','e',0}; const int filterMaskLen = sizeof(filterMask)/sizeof(filterMask[0]); OPENFILENAMEW ofn; WCHAR filetitle[MAX_PATH]; WCHAR file[MAX_PATH]; WCHAR filter[100]; WCHAR title[100]; LoadStringW (GetModuleHandleW(NULL), IDS_THEMEFILE, filter, sizeof (filter) / sizeof (filter[0]) - filterMaskLen); memcpy (filter + lstrlenW (filter), filterMask, filterMaskLen * sizeof (WCHAR)); LoadStringW (GetModuleHandleW(NULL), IDS_THEMEFILE_SELECT, title, sizeof (title) / sizeof (title[0])); ofn.lStructSize = sizeof(OPENFILENAMEW); ofn.hwndOwner = dialog; ofn.hInstance = 0; ofn.lpstrFilter = filter; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 0; ofn.lpstrFile = file; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(file)/sizeof(filetitle[0]); ofn.lpstrFileTitle = filetitle; ofn.lpstrFileTitle[0] = '\0'; ofn.nMaxFileTitle = sizeof(filetitle)/sizeof(filetitle[0]); ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = title; ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ENABLESIZING; ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = NULL; ofn.lCustData = 0; ofn.lpfnHook = NULL; ofn.lpTemplateName = NULL; if (GetOpenFileNameW(&ofn)) { static const WCHAR themesSubdir[] = { '\\','T','h','e','m','e','s',0 }; static const WCHAR backslash[] = { '\\',0 }; WCHAR themeFilePath[MAX_PATH]; SHFILEOPSTRUCTW shfop; if (FAILED (SHGetFolderPathW (NULL, CSIDL_RESOURCES|CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, themeFilePath))) return; if (lstrcmpiW(PathFindExtensionW(filetitle), themeExt)==0) { do_parse_theme(file); SendMessageW(GetParent(dialog), PSM_CHANGED, 0, 0); return; } PathRemoveExtensionW (filetitle); /* Construct path into which the theme file goes */ lstrcatW (themeFilePath, themesSubdir); lstrcatW (themeFilePath, backslash); lstrcatW (themeFilePath, filetitle); /* Create the directory */ SHCreateDirectoryExW (dialog, themeFilePath, NULL); /* Append theme file name itself */ lstrcatW (themeFilePath, backslash); lstrcatW (themeFilePath, PathFindFileNameW (file)); /* SHFileOperation() takes lists as input, so double-nullterminate */ themeFilePath[lstrlenW (themeFilePath)+1] = 0; file[lstrlenW (file)+1] = 0; /* Do the copying */ WINE_TRACE("copying: %s -> %s\n", wine_dbgstr_w (file), wine_dbgstr_w (themeFilePath)); shfop.hwnd = dialog; shfop.wFunc = FO_COPY; shfop.pFrom = file; shfop.pTo = themeFilePath; shfop.fFlags = FOF_NOCONFIRMMKDIR; if (SHFileOperationW (&shfop) == 0) { scan_theme_files(); if (!fill_theme_list (GetDlgItem (dialog, IDC_THEME_THEMECOMBO), GetDlgItem (dialog, IDC_THEME_COLORCOMBO), GetDlgItem (dialog, IDC_THEME_SIZECOMBO))) { SendMessageW (GetDlgItem (dialog, IDC_THEME_COLORCOMBO), CB_SETCURSEL, -1, 0); SendMessageW (GetDlgItem (dialog, IDC_THEME_SIZECOMBO), CB_SETCURSEL, -1, 0); enable_size_and_color_controls (dialog, FALSE); } else { enable_size_and_color_controls (dialog, TRUE); } } else WINE_TRACE("copy operation failed\n"); } else WINE_TRACE("user cancelled\n"); }
VOID InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) { WCHAR szText[120]; WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; WCHAR szFs[30] = {0}; INT Length, TempLength; DWORD dwSerial, dwMaxComp, dwFileSys; ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; DWORD dwIndex, dwDefault; UCHAR uMinor, uMajor; BOOLEAN Latest; HWND hDlgCtrl; Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR)); if (Length < 0) Length = 0; szDrive[0] = pContext->Drive + L'A'; if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR))) { szText[Length] = L' '; szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; TempLength = wcslen(&szText[Length+1]); if (!TempLength) { /* load default volume label */ TempLength = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2); } else { /* set volume label */ szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; SendDlgItemMessageW(hwndDlg, 28679, WM_SETTEXT, 0, (LPARAM)&szText[Length+1]); } Length += TempLength + 1; } if (Length + 4 < (sizeof(szText)/sizeof(WCHAR))) { szText[Length] = L' '; szText[Length+1] = L'('; szText[Length+2] = szDrive[0]; szText[Length+3] = L')'; Length +=4; } if (Length < (sizeof(szText)/sizeof(WCHAR))) szText[Length] = L'\0'; else szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; /* set window text */ SetWindowTextW(hwndDlg, szText); if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) { if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szText, sizeof(szText)/sizeof(WCHAR))) { /* add drive capacity */ szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; SendDlgItemMessageW(hwndDlg, 28673, CB_ADDSTRING, 0, (LPARAM)szText); SendDlgItemMessageW(hwndDlg, 28673, CB_SETCURSEL, 0, (LPARAM)0); } } if (pContext->Options & SHFMT_OPT_FULL) { /* check quick format button */ SendDlgItemMessageW(hwndDlg, 28674, BM_SETCHECK, BST_CHECKED, 0); } /* enumerate all available filesystems */ dwIndex = 0; dwDefault = 0; hDlgCtrl = GetDlgItem(hwndDlg, 28677); while(pContext->QueryAvailableFileSystemFormat(dwIndex, szText, &uMajor, &uMinor, &Latest)) { szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; if (!wcsicmp(szText, szFs)) dwDefault = dwIndex; SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szText); dwIndex++; } if (!dwIndex) { ERR("no filesystem providers\n"); return; } /* select default filesys */ SendMessageW(hDlgCtrl, CB_SETCURSEL, dwDefault, 0); /* setup cluster combo */ InsertDefaultClusterSizeForFs(hwndDlg, pContext); /* hide progress control */ ShowWindow(GetDlgItem(hwndDlg, 28678), SW_HIDE); }
/*********************************************************************** * WININET_InvalidCertificateDialog */ static INT_PTR WINAPI WININET_InvalidCertificateDialog( HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { struct WININET_ErrorDlgParams *params; HWND hitem; WCHAR buf[1024]; if( uMsg == WM_INITDIALOG ) { TRACE("WM_INITDIALOG (%08lx)\n", lParam); /* save the parameter list */ params = (struct WININET_ErrorDlgParams*) lParam; SetWindowLongPtrW( hdlg, GWLP_USERDATA, lParam ); switch( params->dwError ) { case ERROR_INTERNET_INVALID_CA: LoadStringW( WININET_hModule, IDS_CERT_CA_INVALID, buf, 1024 ); break; case ERROR_INTERNET_SEC_CERT_DATE_INVALID: LoadStringW( WININET_hModule, IDS_CERT_DATE_INVALID, buf, 1024 ); break; case ERROR_INTERNET_SEC_CERT_CN_INVALID: LoadStringW( WININET_hModule, IDS_CERT_CN_INVALID, buf, 1024 ); break; case ERROR_INTERNET_SEC_CERT_ERRORS: /* FIXME: We should fetch information about the * certificate here and show all the relevant errors. */ LoadStringW( WININET_hModule, IDS_CERT_ERRORS, buf, 1024 ); break; default: FIXME( "No message for error %d\n", params->dwError ); buf[0] = '\0'; } hitem = GetDlgItem( hdlg, IDC_CERT_ERROR ); SetWindowTextW( hitem, buf ); return TRUE; } params = (struct WININET_ErrorDlgParams*) GetWindowLongPtrW( hdlg, GWLP_USERDATA ); switch( uMsg ) { case WM_COMMAND: if( wParam == IDOK ) { BOOL res = TRUE; if( params->dwFlags & FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS ) { DWORD flags, size = sizeof(flags); InternetQueryOptionW( params->hRequest, INTERNET_OPTION_SECURITY_FLAGS, &flags, &size ); switch( params->dwError ) { case ERROR_INTERNET_INVALID_CA: flags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; break; case ERROR_INTERNET_SEC_CERT_DATE_INVALID: flags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID; break; case ERROR_INTERNET_SEC_CERT_CN_INVALID: flags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID; break; case ERROR_INTERNET_SEC_CERT_ERRORS: FIXME("Should only add ignore flags as needed.\n"); flags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA; /* FIXME: ERROR_INTERNET_SEC_CERT_ERRORS also * seems to set the corresponding DLG_* flags. */ break; } res = InternetSetOptionW( params->hRequest, INTERNET_OPTION_SECURITY_FLAGS, &flags, size ); if(!res) WARN("InternetSetOption(INTERNET_OPTION_SECURITY_FLAGS) failed.\n"); } EndDialog( hdlg, res ? ERROR_SUCCESS : ERROR_NOT_SUPPORTED ); return TRUE; } if( wParam == IDCANCEL ) { TRACE("Pressed cancel.\n"); EndDialog( hdlg, ERROR_CANCELLED ); return TRUE; } break; } return FALSE; }
static VOID CreateVdmMenu(HANDLE ConOutHandle) { HMENU hVdmSubMenu; UINT_PTR ItemID; UINT Pos; USHORT i; WCHAR szNoMedia[100]; WCHAR szMenuString1[256], szMenuString2[256]; hConsoleMenu = ConsoleMenuControl(ConOutHandle, ID_CAPTURE_MOUSE, ID_VDM_DRIVES + (2 * ARRAYSIZE(GlobalSettings.FloppyDisks))); if (hConsoleMenu == NULL) return; /* Get the position where we are going to insert our menu items */ VdmMenuPos = GetMenuItemCount(hConsoleMenu); /* Really add the menu if it doesn't already exist (in case eg. NTVDM crashed) */ if (!VdmMenuExists(hConsoleMenu)) { /* Add all the menu entries */ AppendMenuItems(hConsoleMenu, VdmMainMenuItems); /* Add the removable drives menu entries */ hVdmSubMenu = GetSubMenu(hConsoleMenu, VdmMenuPos + 2); // VdmMenuItems Pos = 3; // After the 2 items and the separator in VdmMenuItems LoadStringW(GetModuleHandle(NULL), IDS_NO_MEDIA, szNoMedia, ARRAYSIZE(szNoMedia)); LoadStringW(GetModuleHandle(NULL), IDS_VDM_MOUNT_FLOPPY, szMenuString1, ARRAYSIZE(szMenuString1)); /* Drive 'x' -- Mount */ for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i) { ItemID = ID_VDM_DRIVES + (2 * i); /* Add the item */ _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, szNoMedia); szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL; InsertMenuW(hVdmSubMenu, Pos++, MF_STRING | MF_BYPOSITION, ItemID, szMenuString2); } LoadStringW(GetModuleHandle(NULL), IDS_VDM_EJECT_FLOPPY, szMenuString1, ARRAYSIZE(szMenuString1)); /* Drive 'x' -- Eject */ for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i) { ItemID = ID_VDM_DRIVES + (2 * i); /* Add the item */ _snwprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i); szMenuString2[ARRAYSIZE(szMenuString2) - 1] = UNICODE_NULL; InsertMenuW(hVdmSubMenu, Pos++, MF_STRING | MF_BYPOSITION, ItemID + 1, szMenuString2); } /* Refresh the menu state */ UpdateVdmMenu(); DrawMenuBar(hConsoleWnd); } }
static void TaskManager_OnTabWndSelChange(void) { int i; HMENU hMenu; HMENU hOptionsMenu; HMENU hViewMenu; HMENU hSubMenu; WCHAR wszLargeIcons[255]; WCHAR wszSmallIcons[255]; WCHAR wszDetails[255]; WCHAR wszWindows[255]; WCHAR wszSelectColumns[255]; WCHAR wszShow16bTasks[255]; WCHAR wszOneGraphAllCPU[255]; WCHAR wszOneGraphPerCPU[255]; WCHAR wszCPUHistory[255]; WCHAR wszShowKernelTimes[255]; LoadStringW(hInst, IDS_VIEW_LARGE, wszLargeIcons, sizeof(wszLargeIcons)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_SMALL, wszSmallIcons, sizeof(wszSmallIcons)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_DETAILS, wszDetails, sizeof(wszDetails)/sizeof(WCHAR)); LoadStringW(hInst, IDS_WINDOWS, wszWindows, sizeof(wszWindows)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_SELECTCOLUMNS, wszSelectColumns, sizeof(wszSelectColumns)/sizeof(WCHAR)); LoadStringW(hInst, IDS_OPTIONS_SHOW16BITTASKS, wszShow16bTasks, sizeof(wszShow16bTasks)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_CPUHISTORY_ONEGRAPHALL, wszOneGraphAllCPU, sizeof(wszOneGraphAllCPU)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_CPUHISTORY_ONEGRAPHPERCPU, wszOneGraphPerCPU, sizeof(wszOneGraphPerCPU)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_CPUHISTORY, wszCPUHistory, sizeof(wszCPUHistory)/sizeof(WCHAR)); LoadStringW(hInst, IDS_VIEW_SHOWKERNELTIMES, wszShowKernelTimes, sizeof(wszShowKernelTimes)/sizeof(WCHAR)); hMenu = GetMenu(hMainWnd); hViewMenu = GetSubMenu(hMenu, 2); hOptionsMenu = GetSubMenu(hMenu, 1); TaskManagerSettings.ActiveTabPage = SendMessageW(hTabWnd, TCM_GETCURSEL, 0, 0); for (i = GetMenuItemCount(hViewMenu) - 1; i > 2; i--) { hSubMenu = GetSubMenu(hViewMenu, i); if (hSubMenu) DestroyMenu(hSubMenu); RemoveMenu(hViewMenu, i, MF_BYPOSITION); } RemoveMenu(hOptionsMenu, 3, MF_BYPOSITION); switch (TaskManagerSettings.ActiveTabPage) { case 0: ShowWindow(hApplicationPage, SW_SHOW); ShowWindow(hProcessPage, SW_HIDE); ShowWindow(hPerformancePage, SW_HIDE); BringWindowToTop(hApplicationPage); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_LARGE, wszLargeIcons); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SMALL, wszSmallIcons); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_DETAILS, wszDetails); if (GetMenuItemCount(hMenu) <= 4) { hSubMenu = LoadMenuW(hInst, MAKEINTRESOURCEW(IDR_WINDOWSMENU)); InsertMenuW(hMenu, 3, MF_BYPOSITION|MF_POPUP, (UINT_PTR)hSubMenu, wszWindows); DrawMenuBar(hMainWnd); } if (TaskManagerSettings.View_LargeIcons) CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_LARGE, MF_BYCOMMAND); else if (TaskManagerSettings.View_SmallIcons) CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_SMALL, MF_BYCOMMAND); else CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND); /* * Give the application list control focus */ SetFocus(hApplicationPageListCtrl); break; case 1: ShowWindow(hApplicationPage, SW_HIDE); ShowWindow(hProcessPage, SW_SHOW); ShowWindow(hPerformancePage, SW_HIDE); BringWindowToTop(hProcessPage); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SELECTCOLUMNS, wszSelectColumns); AppendMenuW(hOptionsMenu, MF_STRING, ID_OPTIONS_SHOW16BITTASKS, wszShow16bTasks); if (TaskManagerSettings.Show16BitTasks) CheckMenuItem(hOptionsMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED); if (GetMenuItemCount(hMenu) > 4) { RemoveMenu(hMenu, 3, MF_BYPOSITION); DrawMenuBar(hMainWnd); } /* * Give the process list control focus */ SetFocus(hProcessPageListCtrl); break; case 2: ShowWindow(hApplicationPage, SW_HIDE); ShowWindow(hProcessPage, SW_HIDE); ShowWindow(hPerformancePage, SW_SHOW); BringWindowToTop(hPerformancePage); if (GetMenuItemCount(hMenu) > 4) { RemoveMenu(hMenu, 3, MF_BYPOSITION); DrawMenuBar(hMainWnd); } hSubMenu = CreatePopupMenu(); AppendMenuW(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHALL, wszOneGraphAllCPU); AppendMenuW(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, wszOneGraphPerCPU); AppendMenuW(hViewMenu, MF_STRING|MF_POPUP, (UINT_PTR)hSubMenu, wszCPUHistory); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SHOWKERNELTIMES, wszShowKernelTimes); if (TaskManagerSettings.ShowKernelTimes) CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED); if (TaskManagerSettings.CPUHistory_OneGraphPerCPU) CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND); else CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND); /* * Give the tab control focus */ SetFocus(hTabWnd); break; } }
BOOL WINAPI InitializeProfiles(VOID) { WCHAR szProfilesPath[MAX_PATH]; WCHAR szProfilePath[MAX_PATH]; WCHAR szCommonFilesDirPath[MAX_PATH]; WCHAR szBuffer[MAX_PATH]; DWORD dwLength; PFOLDERDATA lpFolderData; HKEY hKey; LONG Error; DPRINT("InitializeProfiles()\n"); /* Load profiles directory path */ if (!LoadStringW(hInstance, IDS_PROFILEPATH, szBuffer, MAX_PATH)) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } Error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } /* Expand it */ if (!ExpandEnvironmentStringsW(szBuffer, szProfilesPath, MAX_PATH)) { DPRINT1("Error: %lu\n", GetLastError()); RegCloseKey(hKey); return FALSE; } /* Create profiles directory */ if (!CreateDirectoryW(szProfilesPath, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); RegCloseKey(hKey); return FALSE; } } /* Store the profiles directory path in the registry */ dwLength = (wcslen (szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, L"ProfilesDirectory", 0, REG_EXPAND_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } /* Set 'DefaultUserProfile' value */ wcscpy(szBuffer, L"Default User"); /* Create Default User profile directory path */ wcscpy(szProfilePath, szProfilesPath); wcscat(szProfilePath, L"\\"); wcscat(szProfilePath, szBuffer); /* Attempt default user directory creation */ if (!CreateDirectoryW (szProfilePath, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); RegCloseKey(hKey); return FALSE; } /* Directory existed, let's try to append the postfix */ if (!AppendSystemPostfix(szBuffer, MAX_PATH)) { DPRINT1("AppendSystemPostfix() failed\n", GetLastError()); RegCloseKey(hKey); return FALSE; } /* Create Default User profile directory path again */ wcscpy(szProfilePath, szProfilesPath); wcscat(szProfilePath, L"\\"); wcscat(szProfilePath, szBuffer); /* Attempt creation again with appended postfix */ if (!CreateDirectoryW(szProfilePath, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); RegCloseKey(hKey); return FALSE; } } } /* Store the default user profile path in the registry */ dwLength = (wcslen (szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, L"DefaultUserProfile", 0, REG_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } RegCloseKey(hKey); /* Set current user profile */ SetEnvironmentVariableW(L"USERPROFILE", szProfilePath); /* Create 'Default User' subdirectories */ /* FIXME: Get these paths from the registry */ lpFolderData = &UserShellFolders[0]; while (lpFolderData->lpValueName != NULL) { wcscpy(szBuffer, szProfilePath); wcscat(szBuffer, L"\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } if (!CreateDirectoryW(szBuffer, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } } if (lpFolderData->bHidden == TRUE) { SetFileAttributesW(szBuffer, FILE_ATTRIBUTE_HIDDEN); } lpFolderData++; } /* Set default 'Shell Folders' values */ Error = RegOpenKeyExW(HKEY_USERS, L".Default\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } lpFolderData = &UserShellFolders[0]; while (lpFolderData->lpValueName != NULL) { if (lpFolderData->bShellFolder) { wcscpy(szBuffer, szProfilePath); wcscat(szBuffer, L"\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, lpFolderData->lpValueName, 0, REG_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } } lpFolderData++; } /* Set 'Fonts' folder path */ GetWindowsDirectoryW(szBuffer, MAX_PATH); wcscat(szBuffer, L"\\fonts"); dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, L"Fonts", 0, REG_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } RegCloseKey(hKey); /* Set default 'User Shell Folders' values */ Error = RegOpenKeyExW(HKEY_USERS, L".Default\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } lpFolderData = &UserShellFolders[0]; while (lpFolderData->lpValueName != NULL) { if (lpFolderData->bUserShellFolder) { wcscpy(szBuffer, L"%USERPROFILE%\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, lpFolderData->lpValueName, 0, REG_EXPAND_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } } lpFolderData++; } RegCloseKey(hKey); /* Set 'AllUsersProfile' value */ wcscpy(szBuffer, L"All Users"); /* Create 'All Users' profile directory path */ wcscpy(szProfilePath, szProfilesPath); wcscat(szProfilePath, L"\\"); wcscat(szProfilePath, szBuffer); /* Attempt 'All Users' directory creation */ if (!CreateDirectoryW (szProfilePath, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } /* Directory existed, let's try to append the postfix */ if (!AppendSystemPostfix(szBuffer, MAX_PATH)) { DPRINT1("AppendSystemPostfix() failed\n", GetLastError()); return FALSE; } /* Attempt again creation with appended postfix */ wcscpy(szProfilePath, szProfilesPath); wcscat(szProfilePath, L"\\"); wcscat(szProfilePath, szBuffer); if (!CreateDirectoryW(szProfilePath, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } } } Error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, L"AllUsersProfile", 0, REG_SZ, (LPBYTE)szBuffer, dwLength); RegCloseKey(hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } /* Set 'All Users' profile */ SetEnvironmentVariableW(L"ALLUSERSPROFILE", szProfilePath); /* Create 'All Users' subdirectories */ /* FIXME: Take these paths from the registry */ lpFolderData = &CommonShellFolders[0]; while (lpFolderData->lpValueName != NULL) { wcscpy(szBuffer, szProfilePath); wcscat(szBuffer, L"\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } if (!CreateDirectoryW(szBuffer, NULL)) { if (GetLastError() != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } } if (lpFolderData->bHidden) { SetFileAttributesW(szBuffer, FILE_ATTRIBUTE_HIDDEN); } lpFolderData++; } /* Set common 'Shell Folders' values */ Error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } lpFolderData = &CommonShellFolders[0]; while (lpFolderData->lpValueName != NULL) { if (lpFolderData->bShellFolder) { wcscpy(szBuffer, szProfilePath); wcscat(szBuffer, L"\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, lpFolderData->lpValueName, 0, REG_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } } lpFolderData++; } RegCloseKey(hKey); /* Set common 'User Shell Folders' values */ Error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } lpFolderData = &CommonShellFolders[0]; while (lpFolderData->lpValueName != NULL) { if (lpFolderData->bUserShellFolder) { wcscpy(szBuffer, L"%ALLUSERSPROFILE%\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, lpFolderData->lpValueName, 0, REG_EXPAND_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } } lpFolderData++; } RegCloseKey(hKey); /* Load 'Program Files' location */ if (!LoadStringW(hInstance, IDS_PROGRAMFILES, szBuffer, MAX_PATH)) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } if (!LoadStringW(hInstance, IDS_COMMONFILES, szCommonFilesDirPath, MAX_PATH)) { DPRINT1("Warning: %lu\n", GetLastError()); } /* Expand it */ if (!ExpandEnvironmentStringsW(szBuffer, szProfilesPath, MAX_PATH)) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } wcscpy(szBuffer, szProfilesPath); wcscat(szBuffer, L"\\"); wcscat(szBuffer, szCommonFilesDirPath); if (!ExpandEnvironmentStringsW(szBuffer, szCommonFilesDirPath, MAX_PATH)) { DPRINT1("Warning: %lu\n", GetLastError()); } /* Store it */ Error = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion", 0, KEY_SET_VALUE, &hKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } dwLength = (wcslen (szProfilesPath) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, L"ProgramFilesDir", 0, REG_SZ, (LPBYTE)szProfilesPath, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hKey); SetLastError((DWORD)Error); return FALSE; } dwLength = (wcslen(szCommonFilesDirPath) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, L"CommonFilesDir", 0, REG_SZ, (LPBYTE)szCommonFilesDirPath, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Warning: %lu\n", Error); } RegCloseKey (hKey); /* Create directory */ if (!CreateDirectoryW(szProfilesPath, NULL)) { if (GetLastError () != ERROR_ALREADY_EXISTS) { DPRINT1("Error: %lu\n", GetLastError()); return FALSE; } } /* Create directory */ if (!CreateDirectoryW(szCommonFilesDirPath, NULL)) { if (GetLastError () != ERROR_ALREADY_EXISTS) { DPRINT1("Warning: %lu\n", GetLastError()); } } DPRINT("Success\n"); return TRUE; }
/************************************************************************** * ICPanel_IContextMenu_InvokeCommand() */ HRESULT WINAPI CControlPanelFolder::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { WCHAR szPath[MAX_PATH]; char szTarget[MAX_PATH]; STRRET strret; WCHAR* pszPath; INT Length, cLength; CComPtr<IPersistFile> ppf; CComPtr<IShellLinkA> isl; HRESULT hResult; PIDLCPanelStruct *pcpanel = _ILGetCPanelPointer(apidl[0]); TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd); if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_OPEN)) //FIXME { LPITEMIDLIST lpIDList = ILCombine(pidlRoot, apidl[0]); if (!pcpanel) { /* UGLY HACK! */ LPSHELLBROWSER lpSB = (LPSHELLBROWSER)SendMessageW(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0); HRESULT hr; if (lpSB == NULL) return E_FAIL; hr = lpSB->BrowseObject(lpIDList, 0); return hr; } /* Note: we pass the applet name to Control_RunDLL to distinguish between multiple applets in one .cpl file */ ShellExecuteA(NULL, "cplopen", pcpanel->szName, pcpanel->szName + pcpanel->offsDispName, NULL, 0); } else if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_CREATELINK)) //FIXME { if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE)) return E_FAIL; pszPath = PathAddBackslashW(szPath); if (!pszPath) return E_FAIL; if (GetDisplayNameOf(apidl[0], SHGDN_FORPARSING, &strret) != S_OK) return E_FAIL; Length = MAX_PATH - (pszPath - szPath); cLength = strlen(strret.cStr); if (Length < cLength + 5) { FIXME("\n"); return E_FAIL; } if (MultiByteToWideChar(CP_ACP, 0, strret.cStr, cLength + 1, pszPath, Length)) { pszPath += cLength; Length -= cLength; } if (Length > 10) { wcscpy(pszPath, L" - "); cLength = LoadStringW(shell32_hInstance, IDS_LNK_FILE, &pszPath[3], Length - 4) + 3; if (cLength + 5 > Length) cLength = Length - 5; Length -= cLength; pszPath += cLength; } wcscpy(pszPath, L".lnk"); pcpanel = _ILGetCPanelPointer(ILFindLastID(apidl[0])); if (pcpanel) { strncpy(szTarget, pcpanel->szName, MAX_PATH); } else { FIXME("Couldn't retrieve pointer to cpl structure\n"); return E_FAIL; } hResult = CShellLink::_CreatorClass::CreateInstance(NULL, IID_PPV_ARG(IShellLinkA, &isl)); if (SUCCEEDED(hResult)) { isl->SetPath(szTarget); if (SUCCEEDED(isl->QueryInterface(IID_PPV_ARG(IPersistFile,&ppf)))) ppf->Save(szPath, TRUE); } return NOERROR; } return S_OK; }
BOOL UpdateUsersShellFolderSettings(LPCWSTR lpUserProfilePath, HKEY hUserKey) { WCHAR szBuffer[MAX_PATH]; DWORD dwLength; PFOLDERDATA lpFolderData; HKEY hFoldersKey; LONG Error; DPRINT("UpdateUsersShellFolderSettings() called\n"); DPRINT("User profile path: %S\n", lpUserProfilePath); Error = RegOpenKeyExW(hUserKey, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_SET_VALUE, &hFoldersKey); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); SetLastError((DWORD)Error); return FALSE; } lpFolderData = &UserShellFolders[0]; while (lpFolderData->lpValueName != NULL) { if (lpFolderData->bShellFolder) { wcscpy(szBuffer, lpUserProfilePath); wcscat(szBuffer, L"\\"); /* Append the folder name */ dwLength = wcslen(szBuffer); if (!LoadStringW(hInstance, lpFolderData->uId, &szBuffer[dwLength], MAX_PATH - dwLength)) { /* Use the default name instead */ wcscat(szBuffer, lpFolderData->lpPath); } DPRINT("%S: %S\n", lpFolderData->lpValueName, szBuffer); dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hFoldersKey, lpFolderData->lpValueName, 0, REG_SZ, (LPBYTE)szBuffer, dwLength); if (Error != ERROR_SUCCESS) { DPRINT1("Error: %lu\n", Error); RegCloseKey(hFoldersKey); SetLastError((DWORD)Error); return FALSE; } } lpFolderData++; } RegCloseKey(hFoldersKey); DPRINT("UpdateUsersShellFolderSettings() done\n"); return TRUE; }
void TaskManager_OnTabWndSelChange(void) { int i; HMENU hMenu; HMENU hOptionsMenu; HMENU hViewMenu; HMENU hSubMenu; WCHAR szTemp[256]; SYSTEM_INFO sysInfo; hMenu = GetMenu(hMainWnd); hViewMenu = GetSubMenu(hMenu, 2); hOptionsMenu = GetSubMenu(hMenu, 1); TaskManagerSettings.ActiveTabPage = TabCtrl_GetCurSel(hTabWnd); for (i = GetMenuItemCount(hViewMenu) - 1; i > 2; i--) { hSubMenu = GetSubMenu(hViewMenu, i); if (hSubMenu) DestroyMenu(hSubMenu); RemoveMenu(hViewMenu, i, MF_BYPOSITION); } RemoveMenu(hOptionsMenu, 3, MF_BYPOSITION); if (hWindowMenu) DestroyMenu(hWindowMenu); switch (TaskManagerSettings.ActiveTabPage) { case 0: ShowWindow(hApplicationPage, SW_SHOW); ShowWindow(hProcessPage, SW_HIDE); ShowWindow(hPerformancePage, SW_HIDE); BringWindowToTop(hApplicationPage); LoadStringW(hInst, IDS_MENU_LARGEICONS, szTemp, 256); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_LARGE, szTemp); LoadStringW(hInst, IDS_MENU_SMALLICONS, szTemp, 256); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SMALL, szTemp); LoadStringW(hInst, IDS_MENU_DETAILS, szTemp, 256); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_DETAILS, szTemp); if (GetMenuItemCount(hMenu) <= 5) { hWindowMenu = LoadMenuW(hInst, MAKEINTRESOURCEW(IDR_WINDOWSMENU)); LoadStringW(hInst, IDS_MENU_WINDOWS, szTemp, 256); InsertMenuW(hMenu, 3, MF_BYPOSITION|MF_POPUP, (UINT_PTR) hWindowMenu, szTemp); DrawMenuBar(hMainWnd); } CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, TaskManagerSettings.ViewMode, MF_BYCOMMAND); /* * Give the application list control focus */ if (!bWasKeyboardInput) SetFocus(hApplicationPageListCtrl); break; case 1: ShowWindow(hApplicationPage, SW_HIDE); ShowWindow(hProcessPage, SW_SHOW); ShowWindow(hPerformancePage, SW_HIDE); BringWindowToTop(hProcessPage); LoadStringW(hInst, IDS_MENU_SELECTCOLUMNS, szTemp, 256); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SELECTCOLUMNS, szTemp); LoadStringW(hInst, IDS_MENU_16BITTASK, szTemp, 256); AppendMenuW(hOptionsMenu, MF_STRING, ID_OPTIONS_SHOW16BITTASKS, szTemp); if (TaskManagerSettings.Show16BitTasks) CheckMenuItem(hOptionsMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED); if (GetMenuItemCount(hMenu) > 5) { DeleteMenu(hMenu, 3, MF_BYPOSITION); DrawMenuBar(hMainWnd); } /* * Give the process list control focus */ if (!bWasKeyboardInput) SetFocus(hProcessPageListCtrl); break; case 2: ShowWindow(hApplicationPage, SW_HIDE); ShowWindow(hProcessPage, SW_HIDE); ShowWindow(hPerformancePage, SW_SHOW); BringWindowToTop(hPerformancePage); if (GetMenuItemCount(hMenu) > 5) { DeleteMenu(hMenu, 3, MF_BYPOSITION); DrawMenuBar(hMainWnd); } GetSystemInfo(&sysInfo); /* Hide CPU graph options on single CPU systems */ if (sysInfo.dwNumberOfProcessors > 1) { hSubMenu = CreatePopupMenu(); LoadStringW(hInst, IDS_MENU_ONEGRAPHALLCPUS, szTemp, 256); AppendMenuW(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHALL, szTemp); LoadStringW(hInst, IDS_MENU_ONEGRAPHPERCPU, szTemp, 256); AppendMenuW(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, szTemp); LoadStringW(hInst, IDS_MENU_CPUHISTORY, szTemp, 256); AppendMenuW(hViewMenu, MF_STRING|MF_POPUP, (UINT_PTR) hSubMenu, szTemp); if (TaskManagerSettings.CPUHistory_OneGraphPerCPU) CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND); else CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND); } LoadStringW(hInst, IDS_MENU_SHOWKERNELTIMES, szTemp, 256); AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SHOWKERNELTIMES, szTemp); if (TaskManagerSettings.ShowKernelTimes) CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED); else CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED); /* * Give the tab control focus */ if (!bWasKeyboardInput) SetFocus(hTabWnd); break; } }
/************************************************************************* * AboutDlgProc (internal) */ static INT_PTR CALLBACK AboutDlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { static DWORD cxLogoBmp; static DWORD cyLogoBmp; static HBITMAP hLogoBmp; static HWND hWndAuthors; switch(msg) { case WM_INITDIALOG: { ABOUT_INFO *info = (ABOUT_INFO *)lParam; if (info) { const WCHAR szRegKey[] = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"; HKEY hRegKey; MEMORYSTATUSEX MemStat; WCHAR szAppTitle[512]; WCHAR szAppTitleTemplate[512]; WCHAR szAuthorsText[20]; // Preload the ROS bitmap hLogoBmp = (HBITMAP)LoadImage(shell32_hInstance, MAKEINTRESOURCE(IDB_REACTOS), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); if(hLogoBmp) { BITMAP bmpLogo; GetObject( hLogoBmp, sizeof(BITMAP), &bmpLogo ); cxLogoBmp = bmpLogo.bmWidth; cyLogoBmp = bmpLogo.bmHeight; } // Set App-specific stuff (icon, app name, szOtherStuff string) SendDlgItemMessageW(hWnd, IDC_ABOUT_ICON, STM_SETICON, (WPARAM)info->hIcon, 0); GetWindowTextW( hWnd, szAppTitleTemplate, sizeof(szAppTitleTemplate) / sizeof(WCHAR) ); swprintf( szAppTitle, szAppTitleTemplate, info->szApp ); SetWindowTextW( hWnd, szAppTitle ); SetDlgItemTextW( hWnd, IDC_ABOUT_APPNAME, info->szApp ); SetDlgItemTextW( hWnd, IDC_ABOUT_OTHERSTUFF, info->szOtherStuff ); // Set the registered user and organization name if(RegOpenKeyExW( HKEY_LOCAL_MACHINE, szRegKey, 0, KEY_QUERY_VALUE, &hRegKey ) == ERROR_SUCCESS) { SetRegTextData( hWnd, hRegKey, L"RegisteredOwner", IDC_ABOUT_REG_USERNAME ); SetRegTextData( hWnd, hRegKey, L"RegisteredOrganization", IDC_ABOUT_REG_ORGNAME ); RegCloseKey( hRegKey ); } // Set the value for the installed physical memory MemStat.dwLength = sizeof(MemStat); if( GlobalMemoryStatusEx(&MemStat) ) { WCHAR szBuf[12]; if (MemStat.ullTotalPhys > 1024 * 1024 * 1024) { double dTotalPhys; WCHAR szDecimalSeparator[4]; WCHAR szUnits[3]; // We're dealing with GBs or more MemStat.ullTotalPhys /= 1024 * 1024; if (MemStat.ullTotalPhys > 1024 * 1024) { // We're dealing with TBs or more MemStat.ullTotalPhys /= 1024; if (MemStat.ullTotalPhys > 1024 * 1024) { // We're dealing with PBs or more MemStat.ullTotalPhys /= 1024; dTotalPhys = (double)MemStat.ullTotalPhys / 1024; wcscpy( szUnits, L"PB" ); } else { dTotalPhys = (double)MemStat.ullTotalPhys / 1024; wcscpy( szUnits, L"TB" ); } } else { dTotalPhys = (double)MemStat.ullTotalPhys / 1024; wcscpy( szUnits, L"GB" ); } // We need the decimal point of the current locale to display the RAM size correctly if (GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, szDecimalSeparator, sizeof(szDecimalSeparator) / sizeof(WCHAR)) > 0) { UCHAR uDecimals; UINT uIntegral; uIntegral = (UINT)dTotalPhys; uDecimals = (UCHAR)((UINT)(dTotalPhys * 100) - uIntegral * 100); // Display the RAM size with 2 decimals swprintf(szBuf, L"%u%s%02u %s", uIntegral, szDecimalSeparator, uDecimals, szUnits); } } else { // We're dealing with MBs, don't show any decimals swprintf( szBuf, L"%u MB", (UINT)MemStat.ullTotalPhys / 1024 / 1024 ); } SetDlgItemTextW( hWnd, IDC_ABOUT_PHYSMEM, szBuf); } // Add the Authors dialog hWndAuthors = CreateDialogW( shell32_hInstance, MAKEINTRESOURCEW(IDD_ABOUT_AUTHORS), hWnd, AboutAuthorsDlgProc ); LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); SetDlgItemTextW( hWnd, IDC_ABOUT_AUTHORS, szAuthorsText ); } return TRUE; } case WM_PAINT: { if(hLogoBmp) { PAINTSTRUCT ps; HDC hdc; HDC hdcMem; hdc = BeginPaint(hWnd, &ps); hdcMem = CreateCompatibleDC(hdc); if(hdcMem) { SelectObject(hdcMem, hLogoBmp); BitBlt(hdc, 0, 0, cxLogoBmp, cyLogoBmp, hdcMem, 0, 0, SRCCOPY); DeleteDC(hdcMem); } EndPaint(hWnd, &ps); } }; break; case WM_COMMAND: { switch(wParam) { case IDOK: case IDCANCEL: EndDialog(hWnd, TRUE); return TRUE; case IDC_ABOUT_AUTHORS: { static BOOL bShowingAuthors = FALSE; WCHAR szAuthorsText[20]; if(bShowingAuthors) { LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); ShowWindow( hWndAuthors, SW_HIDE ); } else { LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_BACK, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); ShowWindow( hWndAuthors, SW_SHOW ); } SetDlgItemTextW( hWnd, IDC_ABOUT_AUTHORS, szAuthorsText ); bShowingAuthors = !bShowingAuthors; return TRUE; } } }; break; case WM_CLOSE: EndDialog(hWnd, TRUE); break; } return 0; }
static INT_PTR CALLBACK SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_INITDIALOG: { NewSettingsInfo = SettingsInfo; InitSettingsControls(hDlg, &SettingsInfo); } break; case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_CHOOSE: ChooseFolder(hDlg); break; case IDC_SAVE_WINDOW_POS: IS_CHECKED(NewSettingsInfo.bSaveWndPos, IDC_SAVE_WINDOW_POS); break; case IDC_UPDATE_AVLIST: IS_CHECKED(NewSettingsInfo.bUpdateAtStart, IDC_UPDATE_AVLIST); break; case IDC_LOG_ENABLED: IS_CHECKED(NewSettingsInfo.bLogEnabled, IDC_LOG_ENABLED); break; case IDC_DEL_AFTER_INSTALL: IS_CHECKED(NewSettingsInfo.bDelInstaller, IDC_DEL_AFTER_INSTALL); break; case IDC_DEFAULT_SETTINGS: FillDefaultSettings(&NewSettingsInfo); InitSettingsControls(hDlg, &NewSettingsInfo); break; case IDOK: { WCHAR szDir[MAX_PATH]; DWORD dwAttr; GetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT), szDir, MAX_PATH); dwAttr = GetFileAttributesW(szDir); if (dwAttr != INVALID_FILE_ATTRIBUTES && (dwAttr & FILE_ATTRIBUTE_DIRECTORY)) { StringCbCopyW(NewSettingsInfo.szDownloadDir, sizeof(NewSettingsInfo.szDownloadDir), szDir); } else { WCHAR szMsgText[MAX_STR_LEN]; LoadStringW(hInst, IDS_CHOOSE_FOLDER_ERROR, szMsgText, sizeof(szMsgText) / sizeof(WCHAR)); if (MessageBoxW(hDlg, szMsgText, NULL, MB_YESNO) == IDYES) { if (CreateDirectoryW(szDir, NULL)) { EndDialog(hDlg, LOWORD(wParam)); } } SetFocus(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT)); break; } SettingsInfo = NewSettingsInfo; SaveSettings(GetParent(hDlg)); EndDialog(hDlg, LOWORD(wParam)); } break; case IDCANCEL: EndDialog(hDlg, LOWORD(wParam)); break; } } break; } return FALSE; }
int __stdcall wlanprof(DWORD *WlanStatus) { HWND hWnd = NULL; WCHAR wsProfileXml[1024]; HINSTANCE hInstance; DWORD dwNicCnt; DWORD dwServiceVersion; HMODULE hModule = NULL; TCHAR NewDevPath[MAX_PATH]; int Found; int RetryCount = 0; BOOL LaterThanXP; int status = 0; *WlanStatus = 0; LaterThanXP = TestForLaterThanXP(); // // Load the entry points into the WLANAPI DLL to access the WLAN stuff... // GetSystemDirectory(NewDevPath, SIZECHARS(NewDevPath)); StringCchCat (NewDevPath, SIZECHARS(NewDevPath), TEXT("\\WLANAPI.DLL")); hModule = LoadLibrary(NewDevPath); if (!hModule) { //@@@ MessageBox(hWnd, "WLANAPI.DLL not found", "Error", MB_OK); return -1; } // // Found the DLL...start fetching the entry points. // pWlanOpenHandle = (PWLANOPENHANDLE)GetProcAddress(hModule, "WlanOpenHandle"); pWlanCloseHandle = (PWLANCLOSEHANDLE)GetProcAddress(hModule, "WlanCloseHandle"); pWlanEnumInterfaces = (PWLANENUMINTERFACES)GetProcAddress(hModule, "WlanEnumInterfaces"); pWlanSetProfile = (PWLANSETPROFILE)GetProcAddress(hModule, "WlanSetProfile"); pWlanReasonCodeToString = (PWLANREASONCODETOSTRING)GetProcAddress(hModule, "WlanReasonCodeToString"); if (!pWlanOpenHandle || !pWlanCloseHandle || !pWlanEnumInterfaces || !pWlanSetProfile || !pWlanReasonCodeToString) { //@@@ MessageBox(hWnd, "Error loading Wifi API procedure(s)", "Error", MB_OK); return -2; } // // Load the XML profile data from the embedded // string resource. For XP, there is one profile... // anything later uses the alternate profile. // hInstance = GetModuleHandle(NULL); LoadStringW (hInstance, IDS_XENWIRELESS, wsProfileXml, 1024); Found = 0; do { if (pWlanOpenHandle (1, NULL, &dwServiceVersion, &hClientHandle) != ERROR_SUCCESS) { // Error opening Wlan Handle // // Print no error since we are being launched at user login and the WLAN // service may not be running yet. So just keep retrying... // Sleep (5000); continue; } // // Fetch the current list of WLAN interfaces // if (*WlanStatus = pWlanEnumInterfaces (hClientHandle, NULL, &ppInterfaceList) != ERROR_SUCCESS) { // Error Getting Interfaces //@@@ MessageBox(hWnd, "Error getting list of device interfaces", "Error", MB_OK); status = -3; goto done; } // // Check number of Citrix PV wireless adapters found so far // for (dwNicCnt = 0; dwNicCnt < ppInterfaceList->dwNumberOfItems; dwNicCnt++) { if (wcsstr(ppInterfaceList->InterfaceInfo[dwNicCnt].strInterfaceDescription, L"Citrix PV")) Found++; } // // If none found, sleep for 5s and try again // if (!Found) Sleep (5000); } while (!Found); MessageBeep ((UINT)-1); #if 0 if (ListGuids) { char entry[512]; for (dwNicCnt = 0; dwNicCnt < ppInterfaceList->dwNumberOfItems; dwNicCnt++) { sprintf_s (entry, sizeof(entry), "%s / %S", Guid2String(ppInterfaceList->InterfaceInfo[dwNicCnt].InterfaceGuid), ppInterfaceList->InterfaceInfo[dwNicCnt].strInterfaceDescription); MessageBox(hWnd, entry, "Info", MB_OK); } return 0; } #endif // // At this point, we have found at least one Citrix branded wireless // adapter. So we can go ahead and set the profile. // for (dwNicCnt=0; dwNicCnt < ppInterfaceList->dwNumberOfItems; dwNicCnt++) { DWORD pdwReasonCode = 0; DWORD retWlanSetProfile; *WlanStatus = retWlanSetProfile = pWlanSetProfile ( hClientHandle, &ppInterfaceList->InterfaceInfo[dwNicCnt].InterfaceGuid, 0, wsProfileXml, NULL, TRUE, NULL, &pdwReasonCode); if (retWlanSetProfile != ERROR_SUCCESS) { #if 0 WCHAR swcReason[256]; char err[256]; pWlanReasonCodeToString (pdwReasonCode, 256, swcReason, NULL); sprintf_s (err, sizeof(err), "[%d] %S", pdwReasonCode, swcReason); MessageBox(hWnd, err, "Error adding AP", MB_OK); #endif Sleep (1000); dwNicCnt -= 1; RetryCount++; } if (RetryCount > 50) break; } if (RetryCount >= 50) status = -4; done: // sorry Mattba... //FreeLibrary (hModule); pWlanCloseHandle(hClientHandle, NULL); // // We have completed our task, so it is time to remove the // registry entry that kicks off this util. // // HKLM\SOFTWARE\Citrix\XenClient\WlanProf // RegDeleteKey (HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Citrix\\XenClient\\WlanProf")); return status; }
HRESULT CApplication::CreateApplicationWindow() { HRESULT hr = S_OK; WNDCLASSEX wcex = { 0 }; wcex.cbSize = sizeof (wcex); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = CApplication::WindowProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = _hinstance; wcex.hIcon = NULL; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); wcex.lpszMenuName = nullptr; wcex.lpszClassName = "MainWindowClass"; wcex.hIconSm = NULL; hr = !RegisterClassEx(&wcex) ? E_FAIL : S_OK; if (SUCCEEDED(hr)) { RECT rect = { 0, 0, WINDOW_SIZE, WINDOW_SIZE}; AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE); _hwnd = CreateWindowExW( 0, L"MainWindowClass", L"Windows Animation Manager (WAM) Sample", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, _hinstance, nullptr); if (_hwnd == NULL) { hr = E_UNEXPECTED; } } if (SUCCEEDED(hr)) { WCHAR fontTypeface[32] = { 0 }; hr = !LoadStringW(_hinstance, IDS_FONT_TYPEFACE, fontTypeface, ARRAYSIZE(fontTypeface)) ? E_FAIL : S_OK; if (SUCCEEDED(hr)) { hr = StringCchCopyW(_fontTypeface, ARRAYSIZE(_fontTypeface), fontTypeface); } } if (SUCCEEDED(hr)) { WCHAR fontHeightLogo[32] = { 0 }; hr = !LoadStringW(_hinstance, IDS_FONT_HEIGHT_LOGO, fontHeightLogo, ARRAYSIZE(fontHeightLogo)) ? E_FAIL : S_OK; if (SUCCEEDED(hr)) { _fontHeightLogo = _wtoi(fontHeightLogo); } } if (SUCCEEDED(hr)) { WCHAR fontHeightTitle[32] = { 0 }; hr = !LoadStringW(_hinstance, IDS_FONT_HEIGHT_TITLE, fontHeightTitle, ARRAYSIZE(fontHeightTitle)) ? E_FAIL : S_OK; if (SUCCEEDED(hr)) { _fontHeightTitle = _wtoi(fontHeightTitle); } } if (SUCCEEDED(hr)) { WCHAR fontHeightDescription[32] = { 0 }; hr = !LoadStringW(_hinstance, IDS_FONT_HEIGHT_DESCRIPTION, fontHeightDescription, ARRAYSIZE(fontHeightDescription)) ? E_FAIL : S_OK; if (SUCCEEDED(hr)) { _fontHeightDescription = _wtoi(fontHeightDescription); } } return hr; }
/* Fill theme, color and sizes combo boxes with the know themes and select * the entries matching the currently active theme. */ static BOOL fill_theme_list (HWND comboTheme, HWND comboColor, HWND comboSize) { WCHAR textNoTheme[256]; int themeIndex = 0; BOOL ret = TRUE; int i; WCHAR currentTheme[MAX_PATH]; WCHAR currentColor[MAX_PATH]; WCHAR currentSize[MAX_PATH]; ThemeFile* theme = NULL; LoadStringW (GetModuleHandleW(NULL), IDS_NOTHEME, textNoTheme, sizeof(textNoTheme) / sizeof(WCHAR)); SendMessageW (comboTheme, CB_RESETCONTENT, 0, 0); SendMessageW (comboTheme, CB_ADDSTRING, 0, (LPARAM)textNoTheme); for (i = 0; i < themeFilesCount; i++) { ThemeFile* item = DSA_GetItemPtr (themeFiles, i); SendMessageW (comboTheme, CB_ADDSTRING, 0, (LPARAM)item->fancyName); } if (IsThemeActive () && SUCCEEDED (GetCurrentThemeName (currentTheme, sizeof(currentTheme) / sizeof(WCHAR), currentColor, sizeof(currentColor) / sizeof(WCHAR), currentSize, sizeof(currentSize) / sizeof(WCHAR)))) { /* Determine the index of the currently active theme. */ BOOL found = FALSE; for (i = 0; i < themeFilesCount; i++) { theme = DSA_GetItemPtr (themeFiles, i); if (lstrcmpiW (theme->themeFileName, currentTheme) == 0) { found = TRUE; themeIndex = i+1; break; } } if (!found) { /* Current theme not found?... add to the list, then... */ WINE_TRACE("Theme %s not in list of enumerated themes\n", wine_dbgstr_w (currentTheme)); myEnumThemeProc (NULL, currentTheme, currentTheme, currentTheme, NULL, NULL); themeIndex = themeFilesCount; theme = DSA_GetItemPtr (themeFiles, themeFilesCount-1); } fill_color_size_combos (theme, comboColor, comboSize); select_color_and_size (theme, currentColor, comboColor, currentSize, comboSize); } else { /* No theme selected */ ret = FALSE; } SendMessageW (comboTheme, CB_SETCURSEL, themeIndex, 0); return ret; }
void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam) { LPNMHDR pnmh; LV_DISPINFO* pnmdi; LPAPPLICATION_PAGE_LIST_ITEM pAPLI; WCHAR szMsg[256]; pnmh = (LPNMHDR) lParam; pnmdi = (LV_DISPINFO*) lParam; if (pnmh->hwndFrom == hApplicationPageListCtrl) { switch (pnmh->code) { case LVN_ITEMCHANGED: ApplicationPageUpdate(); break; case LVN_GETDISPINFO: pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)pnmdi->item.lParam; /* Update the item text */ if (pnmdi->item.iSubItem == 0) { wcsncpy(pnmdi->item.pszText, pAPLI->szTitle, pnmdi->item.cchTextMax); } /* Update the item status */ else if (pnmdi->item.iSubItem == 1) { if (pAPLI->bHung) { LoadStringW( GetModuleHandleW(NULL), IDS_NOT_RESPONDING , szMsg, sizeof(szMsg) / sizeof(szMsg[0])); } else { LoadStringW( GetModuleHandleW(NULL), IDS_RUNNING, (LPWSTR) szMsg, sizeof(szMsg) / sizeof(szMsg[0])); } wcsncpy(pnmdi->item.pszText, szMsg, pnmdi->item.cchTextMax); } break; case NM_RCLICK: if (ListView_GetSelectedCount(hApplicationPageListCtrl) < 1) { ApplicationPageShowContextMenu1(); } else { ApplicationPageShowContextMenu2(); } break; case NM_DBLCLK: ApplicationPage_OnSwitchTo(); break; case LVN_KEYDOWN: if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE) ApplicationPage_OnEndTask(); break; } } else if (pnmh->hwndFrom == ListView_GetHeader(hApplicationPageListCtrl)) { switch (pnmh->code) { case NM_RCLICK: if (ListView_GetSelectedCount(hApplicationPageListCtrl) < 1) { ApplicationPageShowContextMenu1(); } else { ApplicationPageShowContextMenu2(); } break; case HDN_ITEMCLICK: (void)ListView_SortItems(hApplicationPageListCtrl, ApplicationPageCompareFunc, 0); bSortAscending = !bSortAscending; break; } } }
HRESULT WINAPI CNetworkConnections::GetDetailsOf( PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS * psd) { WCHAR buffer[MAX_PATH] = {0}; HRESULT hr = E_FAIL; const VALUEStruct * val; NETCON_PROPERTIES * pProperties; if (iColumn >= NETCONNECTSHELLVIEWCOLUMNS) return E_FAIL; psd->fmt = NetConnectSFHeader[iColumn].fmt; psd->cxChar = NetConnectSFHeader[iColumn].cxChar; if (pidl == NULL) { psd->str.uType = STRRET_WSTR; if (LoadStringW(netshell_hInstance, NetConnectSFHeader[iColumn].colnameid, buffer, MAX_PATH)) hr = SHStrDupW(buffer, &psd->str.pOleStr); return hr; } if (iColumn == COLUMN_NAME) { psd->str.uType = STRRET_WSTR; return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str); } val = _ILGetValueStruct(pidl); if (!val) return E_FAIL; if (!val->pItem) return E_FAIL; if (val->pItem->GetProperties(&pProperties) != S_OK) return E_FAIL; switch (iColumn) { case COLUMN_TYPE: if (pProperties->MediaType == NCM_LAN || pProperties->MediaType == NCM_SHAREDACCESSHOST_RAS) { if (LoadStringW(netshell_hInstance, IDS_TYPE_ETHERNET, buffer, MAX_PATH)) { psd->str.uType = STRRET_WSTR; hr = SHStrDupW(buffer, &psd->str.pOleStr); } } break; case COLUMN_STATUS: buffer[0] = L'\0'; if (pProperties->Status == NCS_HARDWARE_DISABLED) LoadStringW(netshell_hInstance, IDS_STATUS_NON_OPERATIONAL, buffer, MAX_PATH); else if (pProperties->Status == NCS_DISCONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_UNREACHABLE, buffer, MAX_PATH); else if (pProperties->Status == NCS_MEDIA_DISCONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_DISCONNECTED, buffer, MAX_PATH); else if (pProperties->Status == NCS_CONNECTING) LoadStringW(netshell_hInstance, IDS_STATUS_CONNECTING, buffer, MAX_PATH); else if (pProperties->Status == NCS_CONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_CONNECTED, buffer, MAX_PATH); if (buffer[0]) { buffer[MAX_PATH-1] = L'\0'; psd->str.uType = STRRET_WSTR; hr = SHStrDupW(buffer, &psd->str.pOleStr); } break; case COLUMN_DEVNAME: if (pProperties->pszwDeviceName) { wcscpy(buffer, pProperties->pszwDeviceName); buffer[MAX_PATH-1] = L'\0'; psd->str.uType = STRRET_WSTR; hr = SHStrDupW(buffer, &psd->str.pOleStr); } else { psd->str.cStr[0] = '\0'; psd->str.uType = STRRET_CSTR; } break; case COLUMN_PHONE: case COLUMN_OWNER: psd->str.cStr[0] = '\0'; psd->str.uType = STRRET_CSTR; break; } NcFreeNetconProperties(pProperties); return hr; }