BOOL CJabberProto::OnIqProcessIqOldTime(HXML, CJabberIqInfo *pInfo) { struct tm *gmt; time_t ltime; TCHAR stime[100], *dtime; _tzset(); time(<ime); gmt = gmtime(<ime); mir_sntprintf(stime, _countof(stime), _T("%.4i%.2i%.2iT%.2i:%.2i:%.2i"), gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday, gmt->tm_hour, gmt->tm_min, gmt->tm_sec); dtime = _tctime(<ime); dtime[24] = 0; XmlNodeIq iq(_T("result"), pInfo); HXML queryNode = iq << XQUERY(JABBER_FEAT_ENTITY_TIME_OLD); queryNode << XCHILD(_T("utc"), stime); LPCTSTR szTZName = TimeZone_GetName(NULL); if (szTZName) queryNode << XCHILD(_T("tz"), szTZName); queryNode << XCHILD(_T("display"), dtime); m_ThreadInfo->send(iq); return TRUE; }
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static time_t t; static TCHAR str[100]; switch(message) { case WM_DESTROY: PostQuitMessage(0); break; case WM_TIMER: t = time(NULL); // количество секунд, прошедших с 01.01.1970 lstrcpy(str, _tctime(&t)); // формирование строки следующего формата: день месяц число часы:минуты:секунды год str[lstrlen(str) - 1] = '\0'; SetWindowText(hWnd, str); // вывод даты и времени в заголовок окна break; case WM_KEYDOWN: if(wParam == VK_RETURN) SetTimer(hWnd, 1, 1000, NULL); // установка таймера по нажатию клавиши <ENTER> else if(wParam == VK_ESCAPE) KillTimer(hWnd, 1); // уничтожение таймера по нажатию клавиши <ESC> break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
//функци¤ обратного вызова дл¤ обработки сообщений от таймера VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { static time_t t; static TCHAR str[100]; t = time(NULL); // количество секунд, прошедших с 01.01.1970 lstrcpy(str, _tctime(&t)); // формирование строки следующего формата: день мес¤ц число часы:минуты:секунды год str[lstrlen(str) - 1] = '\0'; SetWindowText(hwnd, str); // вывод даты и времени в заголовок окна }
/* * Handle a log line from the OpenVPN management interface * Format <TIMESTAMP>,<FLAGS>,<MESSAGE> */ void OnLogLine(connection_t *c, char *line) { HWND logWnd = GetDlgItem(c->hwndStatus, ID_EDT_LOG); char *flags, *message; time_t timestamp; TCHAR *datetime; const SETTEXTEX ste = { .flags = ST_SELECTION, .codepage = CP_UTF8 }; flags = strchr(line, ',') + 1; if (flags - 1 == NULL) return; message = strchr(flags, ',') + 1; if (message - 1 == NULL) return; /* Remove lines from log window if it is getting full */ if (SendMessage(logWnd, EM_GETLINECOUNT, 0, 0) > MAX_LOG_LINES) { int pos = SendMessage(logWnd, EM_LINEINDEX, DEL_LOG_LINES, 0); SendMessage(logWnd, EM_SETSEL, 0, pos); SendMessage(logWnd, EM_REPLACESEL, FALSE, (LPARAM) _T("")); } timestamp = strtol(line, NULL, 10); datetime = _tctime(×tamp); datetime[24] = _T(' '); /* Append line to log window */ SendMessage(logWnd, EM_SETSEL, (WPARAM) -1, (LPARAM) -1); SendMessage(logWnd, EM_REPLACESEL, FALSE, (LPARAM) datetime); SendMessage(logWnd, EM_SETTEXTEX, (WPARAM) &ste, (LPARAM) message); SendMessage(logWnd, EM_REPLACESEL, FALSE, (LPARAM) _T("\n")); }
/** Logs an unformatted message to a log file. * \param[in] iType - type of the log message (LT_*) * \param[in] bStd - log also to stdout/stderr if true * \param[in] pszStr - message string */ void log_file::logs(int_t iType, bool bStd, const tchar_t* pszStr) { assert(m_pszPath); if(!m_pszPath) return; if (iType < m_iLogLevel || iType < 0 || iType >= sizeof(__logtype_str)) return; // log time time_t t=time(NULL); tchar_t szData[128]; _tcscpy(szData, _tctime(&t)); size_t tLen=_tcslen(szData)-1; while(szData[tLen] == _t('\n')) szData[tLen--]=_t('\0'); m_lock.lock(); // check the size constraints truncate((int_t)(_tcslen(pszStr)+1)); #if defined(UNICODE) && (defined(_WIN32) || defined(_WIN64)) FILE* pFile=_tfopen(m_pszPath, _t("ab")); #else FILE* pFile=_tfopen(m_pszPath, _t("at")); #endif bool bFailed=false; if (pFile) { if (_ftprintf(pFile, _t("[") TSTRFMT _t("] [") TSTRFMT _t("] ") TSTRFMT ENDL, szData, __logtype_str[iType], pszStr) < 0) bFailed=true; fclose(pFile); } else bFailed=true; if (bFailed || (m_bLogStd && !bStd)) { switch(iType) { case level_error: _ftprintf(stderr, _t("[") TSTRFMT _t("] [") TSTRFMT _t("] ") TSTRFMT ENDL, szData, __logtype_str[iType], pszStr); break; default: _ftprintf(stdout, _t("[") TSTRFMT _t("] [") TSTRFMT _t("] ") TSTRFMT ENDL, szData, __logtype_str[iType], pszStr); } } else if (bStd) { switch(iType) { case level_error: _ftprintf(stderr, TSTRFMT _t(": ") TSTRFMT ENDL, __logtype_str[iType], pszStr); break; case level_info: _ftprintf(stdout, TSTRFMT ENDL, pszStr); break; default: _ftprintf(stdout, TSTRFMT _t(": ") TSTRFMT ENDL, __logtype_str[iType], pszStr); } } m_lock.unlock(); }
void list_OnGetTip(CCtrlListView::TEventInfo *evt) { if (auto pTip = evt->nmlvit) { TCHAR profilename[MAX_PATH], tszFullPath[MAX_PATH]; struct _stat statbuf; m_profileList.GetItemText(pTip->iItem, 0, profilename, _countof(profilename)); mir_sntprintf(tszFullPath, _countof(tszFullPath), _T("%s\\%s\\%s.dat"), m_pd->ptszProfileDir, profilename, profilename); _tstat(tszFullPath, &statbuf); mir_sntprintf(pTip->pszText, pTip->cchTextMax, _T("%s\n%s: %s\n%s: %s"), tszFullPath, TranslateT("Created"), rtrimt(NEWTSTR_ALLOCA(_tctime(&statbuf.st_ctime))), TranslateT("Modified"), rtrimt(NEWTSTR_ALLOCA(_tctime(&statbuf.st_mtime)))); } }
int nugi( TCHAR *machine, TCHAR *user ) { DWORD rc; USER_INFO_3 *buf = 0; TCHAR temp[40]; wchar_t unicodeMachine[UNCLEN + 4], unicodeUser[UNLEN + 2]; static flag_t privilegeTexts[] = { { USER_PRIV_GUEST, _T( "USER_PRIV_GUEST" ) }, { USER_PRIV_USER, _T( "USER_PRIV_USER" ) }, { USER_PRIV_ADMIN, _T( "USER_PRIV_ADMIN" ) }, { 0, 0 } }; static flag_t authFlags[] = { { AF_OP_PRINT, _T( "AF_OP_PRINT" ) }, { AF_OP_COMM, _T( "AF_OP_COMM" ) }, { AF_OP_SERVER, _T( "AF_OP_SERVER" ) }, { AF_OP_ACCOUNTS, _T( "AF_OP_ACCOUNTS" ) }, { 0, 0 } }; static flag_t acctFlags[] = { { UF_SCRIPT, _T( "UF_SCRIPT" ) }, { UF_ACCOUNTDISABLE, _T( "UF_ACCOUNTDISABLE" ) }, { UF_HOMEDIR_REQUIRED, _T( "UF_HOMEDIR_REQUIRED" ) }, { UF_PASSWD_NOTREQD, _T( "UF_PASSWD_NOTREQD" ) }, { UF_PASSWD_CANT_CHANGE, _T( "UF_PASSWD_CANT_CHANGE" ) }, { UF_LOCKOUT, _T( "UF_LOCKOUT" ) }, { UF_DONT_EXPIRE_PASSWD, _T( "UF_DONT_EXPIRE_PASSWD" ) }, #ifdef UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED { UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED, _T( "UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED" ) }, #endif #ifdef UF_NOT_DELEGATED { UF_NOT_DELEGATED, _T( "UF_NOT_DELEGATED" ) }, #endif #ifdef UF_SMARTCARD_REQUIRED { UF_SMARTCARD_REQUIRED, _T( "UF_SMARTCARD_REQUIRED" ) }, #endif { UF_NORMAL_ACCOUNT, _T( "UF_NORMAL_ACCOUNT" ) }, { UF_TEMP_DUPLICATE_ACCOUNT, _T( "UF_TEMP_DUPLICATE_ACCOUNT" ) }, { UF_WORKSTATION_TRUST_ACCOUNT, _T( "UF_WORKSTATION_TRUST_ACCOUNT" ) }, { UF_SERVER_TRUST_ACCOUNT, _T( "UF_SERVER_TRUST_ACCOUNT" ) }, { UF_INTERDOMAIN_TRUST_ACCOUNT, _T( "UF_INTERDOMAIN_TRUST_ACCOUNT" ) }, { 0, 0 } }; #ifdef UNICODE _tcsncpy( unicodeMachine, machine, lenof( unicodeMachine ) ); _tcsncpy( unicodeUser, user, lenof( unicodeUser ) ); #else mbstowcs( unicodeMachine, machine, lenof( unicodeMachine ) ); mbstowcs( unicodeUser, user, lenof( unicodeUser ) ); #endif unicodeMachine[lenof( unicodeMachine ) - 1] = _T( '\0' ); unicodeUser[lenof( unicodeUser ) - 1] = _T( '\0' ); _tprintf( _T( "User %s on %s: " ), user, machine ); rc = NetUserGetInfo( unicodeMachine, unicodeUser, 3, (byte **) &buf ); if ( rc != 0 ) { _tprintf( _T( "error %lu.\n" ), rc ); return rc; } _tprintf( _T( "found.\n" ) ); _tprintf( _T( " Name: %ls\n" ), buf->usri3_name ); _tprintf( _T( " Password: %ls\n" ), buf->usri3_password ); _tprintf( _T( " Password age: %lu days, %02lu:%02lu:%02lu\n" ), buf->usri3_password_age / 86400UL, buf->usri3_password_age % 86400UL / 3600UL, buf->usri3_password_age % 3600UL / 60UL, buf->usri3_password_age % 60UL ); _tprintf( _T( " Privilege: %s\n" ), getText( buf->usri3_priv, privilegeTexts ) ); _tprintf( _T( " Home dir: %ls\n" ), buf->usri3_home_dir ); _tprintf( _T( " Comment: %ls\n" ), buf->usri3_comment ); _tprintf( _T( " Flags: %s\n" ), buildFlags( buf->usri3_flags, acctFlags ) ); _tprintf( _T( " Script path: %ls\n" ), buf->usri3_script_path ); _tprintf( _T( " Auth flags: %s\n" ), buildFlags( buf->usri3_auth_flags, authFlags ) ); _tprintf( _T( " Full name: %ls\n" ), buf->usri3_full_name ); _tprintf( _T( " User comment: %ls\n" ), buf->usri3_usr_comment ); _tprintf( _T( " RAS params: (not displayed)\n" ) ); _tprintf( _T( " Workstations: %ls\n" ), buf->usri3_workstations ); _tprintf( _T( " Last logon: %s" ), buf->usri3_last_logon == 0? _T( "never\n" ): _tctime( (long *) &buf->usri3_last_logon ) ); _tprintf( _T( " Last logoff: %s" ), buf->usri3_last_logoff == 0? _T( "unknown\n" ): _tctime( (long *) &buf->usri3_last_logoff ) ); _tprintf( _T( " Expires: %s" ), buf->usri3_acct_expires == TIMEQ_FOREVER? _T( "never\n" ): _tctime( (long *) &buf->usri3_acct_expires ) ); _tprintf( _T( " Max storage: %s\n" ), buf->usri3_max_storage == USER_MAXSTORAGE_UNLIMITED? _T( "unlimited" ): _ultot( buf->usri3_max_storage, temp, 10 ) ); _tprintf( _T( " Logon hours: (not displayed)\n" ) ); _tprintf( _T( " Bad PW count: %s\n" ), buf->usri3_bad_pw_count == (DWORD) -1L? _T( "unlimited" ): _ultot( buf->usri3_bad_pw_count, temp, 10 ) ); _tprintf( _T( " # of logons: %s\n" ), buf->usri3_num_logons == (DWORD) -1L? _T( "unknown" ): _ultot( buf->usri3_num_logons, temp, 10 ) ); _tprintf( _T( " Logon server: %ls\n" ), buf->usri3_logon_server ); _tprintf( _T( " Country code: %lu\n" ), buf->usri3_country_code ); _tprintf( _T( " Code page: %lu\n" ), buf->usri3_code_page ); _tprintf( _T( " User RID: %lu\n" ), buf->usri3_user_id ); _tprintf( _T( " Pgroup RID: %lu\n" ), buf->usri3_primary_group_id ); _tprintf( _T( " Profile path: %ls\n" ), buf->usri3_profile ); _tprintf( _T( " Home drive: %ls\n" ), buf->usri3_home_dir_drive ); _tprintf( _T( " PW expired: %s\n" ), buf->usri3_password_expired? _T( "yes" ): _T( "no" ) ); _tprintf( _T( "\n" ) ); return 0; }
std::basic_string<TCHAR> Util::sdTime::GetDateTimeStr() { time_t t; std::time(&t); return _tctime(&t); }
static INT_PTR CALLBACK DlgProfileSelect(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { DlgProfData *dat = (struct DlgProfData *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); HWND hwndList = GetDlgItem(hwndDlg, IDC_PROFILELIST); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); EnsureCheckerLoaded(true); { dat = (DlgProfData*)lParam; SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); // set columns LVCOLUMN col; col.mask = LVCF_TEXT | LVCF_WIDTH; col.pszText = TranslateT("Profile"); col.cx = 100; ListView_InsertColumn(hwndList, 0, &col); col.pszText = TranslateT("Driver"); col.cx = 150 - GetSystemMetrics(SM_CXVSCROLL); ListView_InsertColumn(hwndList, 1, &col); col.pszText = TranslateT("Size"); col.cx = 60; ListView_InsertColumn(hwndList, 2, &col); // icons HIMAGELIST hImgList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 2, 1); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_USERDETAILS)); ImageList_AddIcon_NotShared(hImgList, MAKEINTRESOURCE(IDI_DELETE)); // LV will destroy the image list SetWindowLongPtr(hwndList, GWL_STYLE, GetWindowLongPtr(hwndList, GWL_STYLE) | LVS_SORTASCENDING); ListView_SetImageList(hwndList, hImgList, LVSIL_SMALL); ListView_SetExtendedListViewStyle(hwndList, ListView_GetExtendedListViewStyle(hwndList) | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_FULLROWSELECT); // find all the profiles ProfileEnumData ped = { hwndDlg, dat->pd->szProfile }; findProfiles(dat->pd->szProfileDir, EnumProfilesForList, (LPARAM)&ped); PostMessage(hwndDlg, WM_FOCUSTEXTBOX, 0, 0); dat->hFileNotify = FindFirstChangeNotification(dat->pd->szProfileDir, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE); if (dat->hFileNotify != INVALID_HANDLE_VALUE) SetTimer(hwndDlg, 0, 1200, NULL); return TRUE; } case WM_DESTROY: KillTimer(hwndDlg, 0); FindCloseChangeNotification(dat->hFileNotify); break; case WM_TIMER: if (WaitForSingleObject(dat->hFileNotify, 0) == WAIT_OBJECT_0) { ListView_DeleteAllItems(hwndList); ProfileEnumData ped = { hwndDlg, dat->pd->szProfile }; findProfiles(dat->pd->szProfileDir, EnumProfilesForList, (LPARAM)&ped); FindNextChangeNotification(dat->hFileNotify); } break; case WM_FOCUSTEXTBOX: SetFocus(hwndList); if (dat->pd->szProfile[0] == 0 || ListView_GetSelectedCount(hwndList) == 0) ListView_SetItemState(hwndList, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); break; case WM_SHOWWINDOW: if (wParam) { SetWindowText(dat->hwndOK, TranslateT("&Run")); EnableWindow(dat->hwndSM, TRUE); EnableWindow(dat->hwndOK, ListView_GetSelectedCount(hwndList) == 1); } break; case WM_CONTEXTMENU: { LVHITTESTINFO lvht = { 0 }; lvht.pt.x = GET_X_LPARAM(lParam); lvht.pt.y = GET_Y_LPARAM(lParam); ScreenToClient(hwndList, &lvht.pt); if (ListView_HitTest(hwndList, &lvht) < 0) { if (lParam != -1) break; lvht.iItem = ListView_GetSelectionMark(hwndList); RECT rc = { 0 }; if (!ListView_GetItemRect(hwndList, lvht.iItem, &rc, LVIR_LABEL)) break; lvht.pt.x = rc.left; lvht.pt.y = rc.bottom; ClientToScreen(hwndList, &lvht.pt); } else { lvht.pt.x = GET_X_LPARAM(lParam); lvht.pt.y = GET_Y_LPARAM(lParam); } HMENU hMenu = CreatePopupMenu(); AppendMenu(hMenu, MF_STRING, 1, TranslateT("Run")); AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); if (ServiceExists(MS_DB_CHECKPROFILE)) { AppendMenu(hMenu, MF_STRING, 2, TranslateT("Check database")); AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); } AppendMenu(hMenu, MF_STRING, 3, TranslateT("Delete")); int index = TrackPopupMenu(hMenu, TPM_RETURNCMD, lvht.pt.x, lvht.pt.y, 0, hwndDlg, NULL); switch (index) { case 1: SendMessage(GetParent(hwndDlg), WM_COMMAND, IDOK, 0); break; case 2: CheckProfile(hwndList, lvht.iItem, dat); break; case 3: DeleteProfile(hwndList, lvht.iItem, dat); break; } DestroyMenu(hMenu); } break; case WM_NOTIFY: LPNMHDR hdr = (LPNMHDR)lParam; if (hdr && hdr->code == PSN_INFOCHANGED) break; if (hdr && hdr->idFrom == IDC_PROFILELIST) { switch (hdr->code) { case LVN_ITEMCHANGED: EnableWindow(dat->hwndOK, ListView_GetSelectedCount(hwndList) == 1); case NM_DBLCLK: if (dat != NULL) { TCHAR profile[MAX_PATH]; LVITEM item = { 0 }; item.mask = LVIF_TEXT; item.iItem = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED | LVNI_ALL); item.pszText = profile; item.cchTextMax = SIZEOF(profile); if (ListView_GetItem(hwndList, &item)) { // profile is placed in "profile_name" subfolder TCHAR tmpPath[MAX_PATH]; mir_sntprintf(tmpPath, SIZEOF(tmpPath), _T("%s\\%s.dat"), dat->pd->szProfileDir, profile); HANDLE hFile = CreateFile(tmpPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hFile == INVALID_HANDLE_VALUE) mir_sntprintf(dat->pd->szProfile, MAX_PATH, _T("%s\\%s\\%s.dat"), dat->pd->szProfileDir, profile, profile); else _tcscpy(dat->pd->szProfile, tmpPath); CloseHandle(hFile); if (hdr->code == NM_DBLCLK) EndDialog(GetParent(hwndDlg), 1); } } return TRUE; case LVN_KEYDOWN: if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE) DeleteProfile(hwndList, ListView_GetNextItem(hwndList, -1, LVNI_SELECTED | LVNI_ALL), dat); break; case LVN_GETINFOTIP: NMLVGETINFOTIP *pInfoTip = (NMLVGETINFOTIP *)lParam; if (pInfoTip != NULL) { TCHAR profilename[MAX_PATH], fullpath[MAX_PATH]; struct _stat statbuf; ListView_GetItemText(hwndList, pInfoTip->iItem, 0, profilename, MAX_PATH); mir_sntprintf(fullpath, SIZEOF(fullpath), _T("%s\\%s\\%s.dat"), dat->pd->szProfileDir, profilename, profilename); _tstat(fullpath, &statbuf); mir_sntprintf(pInfoTip->pszText, pInfoTip->cchTextMax, _T("%s\n%s: %s\n%s: %s"), fullpath, TranslateT("Created"), rtrimt(NEWTSTR_ALLOCA(_tctime(&statbuf.st_ctime))), TranslateT("Modified"), rtrimt(NEWTSTR_ALLOCA(_tctime(&statbuf.st_mtime)))); } } } break; } return FALSE; }
BOOL EnumProfilesForList(TCHAR * fullpath, TCHAR * profile, LPARAM lParam) { ProfileEnumData *ped = (ProfileEnumData*)lParam; HWND hwndList = GetDlgItem(ped->hwnd, IDC_PROFILELIST); TCHAR sizeBuf[64]; int iItem=0; struct _stat statbuf; bool bFileExists = false, bFileLocked = true; TCHAR* p = _tcsrchr(profile, '.'); _tcscpy(sizeBuf, _T("0 KB")); if ( p != NULL ) *p=0; LVITEM item = { 0 }; item.mask = LVIF_TEXT | LVIF_IMAGE; item.pszText = profile; item.iItem = 0; if ( _tstat(fullpath, &statbuf) == 0) { if ( statbuf.st_size > 1000000 ) { mir_sntprintf(sizeBuf,SIZEOF(sizeBuf), _T("%.3lf"), (double)statbuf.st_size / 1048576.0 ); _tcscpy(sizeBuf+5, _T(" MB")); } else { mir_sntprintf(sizeBuf,SIZEOF(sizeBuf), _T("%.3lf"), (double)statbuf.st_size / 1024.0 ); _tcscpy(sizeBuf+5, _T(" KB")); } bFileExists = TRUE; bFileLocked = !fileExist(fullpath); } item.iImage = bFileLocked; iItem = SendMessage( hwndList, LVM_INSERTITEM, 0, (LPARAM)&item ); if ( lstrcmpi(ped->szProfile, fullpath) == 0 ) ListView_SetItemState(hwndList, iItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); item.iItem = iItem; item.iSubItem = 2; item.pszText = sizeBuf; SendMessage( hwndList, LVM_SETITEMTEXT, iItem, (LPARAM)&item ); if ( bFileExists ) { PLUGIN_DB_ENUM dbe; TCHAR szPath[MAX_PATH]; LVITEM item2; item2.mask = LVIF_TEXT; item2.iItem = iItem; dbe.cbSize = sizeof(dbe); dbe.pfnEnumCallback = (int(*)(const char*,void*,LPARAM))DetectDbProvider; dbe.lParam = (LPARAM)szPath; _tcscpy(szPath, fullpath); if ( CallService( MS_PLUGINS_ENUMDBPLUGINS, 0, ( LPARAM )&dbe ) == 1 ) { if (bFileLocked) { // file locked item2.pszText = TranslateT( "<In Use>" ); item2.iSubItem = 1; SendMessage( hwndList, LVM_SETITEMTEXT, iItem, ( LPARAM )&item2 ); } else { item.pszText = szPath; item.iSubItem = 1; SendMessage( hwndList, LVM_SETITEMTEXT, iItem, (LPARAM)&item ); } } item2.iSubItem = 3; item2.pszText = rtrim( _tctime( &statbuf.st_ctime )); SendMessage( hwndList, LVM_SETITEMTEXT, iItem, (LPARAM)&item2 ); item2.iSubItem = 4; item2.pszText = rtrim( _tctime( &statbuf.st_mtime )); SendMessage( hwndList, LVM_SETITEMTEXT, iItem, (LPARAM)&item2 ); } return TRUE; }