/* * Copyright (c) 2005 Massachusetts Institute of Technology * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* $Id$ */ #include #include #include #if DEBUG #include #endif INT_PTR CALLBACK about_dlg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: { HANDLE hsnap; HWND hw; SetDlgItemText(hwnd, IDC_PRODUCT, TEXT(KH_VERSTR_PRODUCT_1033)); /* retain the original copyright strings */ #ifdef OVERRIDE_COPYRIGHT SetDlgItemText(hwnd, IDC_COPYRIGHT, TEXT(KH_VERSTR_COPYRIGHT_1033)); #endif SetDlgItemText(hwnd, IDC_BUILDINFO, TEXT(KH_VERSTR_BUILDINFO_1033)); hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0); if (hsnap != INVALID_HANDLE_VALUE) { LVCOLUMN lvc; MODULEENTRY32 mod; RECT r; hw = GetDlgItem(hwnd, IDC_MODULES); #ifdef DEBUG assert(hw != NULL); #endif GetWindowRect(hw, &r); OffsetRect(&r, -r.left, -r.top); ZeroMemory(&lvc, sizeof(lvc)); lvc.mask = LVCF_TEXT | LVCF_WIDTH; lvc.pszText = L"Name"; lvc.cx = r.right / 4; ListView_InsertColumn(hw, 0, &lvc); lvc.pszText = L"Path"; lvc.cx = (r.right * 3) / 4; ListView_InsertColumn(hw, 1, &lvc); ZeroMemory(&mod, sizeof(mod)); mod.dwSize = sizeof(mod); /* done with columns, now for the actual data */ if (!Module32First(hsnap, &mod)) goto _done_with_modules; do { LVITEM lvi; int idx; ZeroMemory(&lvi, sizeof(lvi)); lvi.mask = LVIF_TEXT; lvi.pszText = mod.szModule; idx = ListView_InsertItem(hw, &lvi); lvi.mask = LVIF_TEXT; lvi.iItem = idx; lvi.iSubItem = 1; lvi.pszText = mod.szExePath; ListView_SetItem(hw, &lvi); ZeroMemory(&mod, sizeof(mod)); mod.dwSize = sizeof(mod); } while(Module32Next(hsnap, &mod)); _done_with_modules: CloseHandle(hsnap); } khm_add_dialog(hwnd); khm_enter_modal(hwnd); } return FALSE; case WM_DESTROY: khm_del_dialog(hwnd); return TRUE; case WM_CLOSE: khm_leave_modal(); DestroyWindow(hwnd); return TRUE; case WM_COMMAND: if (wParam == MAKEWPARAM(IDOK, BN_CLICKED)) { khm_leave_modal(); DestroyWindow(hwnd); } return TRUE; } return FALSE; } void khm_create_about_window(void) { HWND hwnd; hwnd = CreateDialog(khm_hInstance, MAKEINTRESOURCE(IDD_ABOUT), khm_hwnd_main, about_dlg_proc); ShowWindow(hwnd, SW_SHOW); /* no need to keep track of the hwnd, since we add it to the dialog chain in the dialog procedure */ }