FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9176
Вход
Net Time или функция для получения времени с сервера в сети на основе API NetRemoteTOD

Процедура позволяет получить дату-время с любого компьютера сети. без всяких dcom и прочего


 
Прислал: Михаил (Bomber)   Категория: Сети (Интернет и др.)


Net Time или функция для получения времени с сервера в сети на основе API NetRemoteTOD

PARAMETERS m.cServerName
*Имя сервера обязательно с символов \\, например \\server

PRIVATE m.lcServerName, m.lnBufferPointer, m.cSetDate, m.nHour, m.nMin, m.nSec, m.nmDiv, m.nDay, m.nMon, m.nYear, m.nRetValue
m.cSetDate=SET("DATE")
SET DATE GERMAN
m.nRetValue={..::}
LOCAL ARRAY Arrdlls[1,3]
=ADLLS(Arrdlls)
IF ASCAN(Arrdlls,"NetRemoteTOD")=0
DECLARE INTEGER NetRemoteTOD IN NETAPI32 STRING ServerName,INTEGER @BufferPointer
ENDIF
IF ASCAN(Arrdlls,"NetApiBufferFree")=0
DECLARE INTEGER NetApiBufferFree IN NETAPI32 INTEGER Pointer
ENDIF
IF ASCAN(Arrdlls,"RtlMoveMemory")=0
DECLARE RtlMoveMemory IN Kernel32 String@ dest, Integer src, Integer nsize
ENDIF
IF ASCAN(Arrdlls,"lstrlenW")=0
DECLARE Integer lstrlenW IN Kernel32 Integer src
ENDIF

m.cServerName=ALLTRIM(m.cServerName)
m.lcServerName = StrConv(StrConv(m.cServerName + Chr(0), 1), 5)
m.lnBufferPointer = 0
IF NetRemoteTOD(m.lcServerName,@m.lnBufferPointer)=0 && Все хорошо!
m.nHour = GetMemoryDWORD(lnBufferPointer+8) &&часы
m.nMin = GetMemoryDWORD(lnBufferPointer+12) &&минуты
m.nSec = GetMemoryDWORD(lnBufferPointer+16) &&секунды
m.nmDiv = GetMemoryDWORD(lnBufferPointer+24) &&смещение
m.nDay = GetMemoryDWORD(lnBufferPointer+32) &&день
m.nMon = GetMemoryDWORD(lnBufferPointer+36) &&месяц
m.nYear = GetMemoryDWORD(lnBufferPointer+40) &&год
m.nRetValue=CTOT(PADL(ALLTRIM(STR(m.nDay)),2,"0")+"."+;
PADL(ALLTRIM(STR(m.nMon)),2,"0")+"."+;
PADL(ALLTRIM(STR(m.nYear)),4,"0")+" "+;
PADL(ALLTRIM(STR(m.nHour)),2,"0")+":"+;
PADL(ALLTRIM(STR(m.nMin)),2,"0")+":"+;
PADL(ALLTRIM(STR(m.nsec)),2,"0"))-(60*m.nmDiv)
ENDIF
SET DATE &cSetDate
NetApiBufferFree(m.lnBufferPointer)
RETURN m.nRetValue


FUNCTION GetMemoryLPString
LParameter m.nPointer, m.nPlatform
Local m.cResult, m.nLPStr, m.nslen

m.nLPStr = GetMemoryDWORD(m.nPointer)

m.nslen = lstrlenW(m.nLPStr) * 2
m.cResult = Replicate(chr(0), m.nslen)
RtlMoveMemory(@m.cResult, m.nLPStr, m.nslen)
m.cResult = StrConv(StrConv(m.cResult, 6), 2)

RETURN m.cResult
ENDFUNC
*--
* Return Number from a pointer to DWORD
*--
FUNCTION GetMemoryDWORD
LParameter m.nPointer
Local m.cstrDWORD
m.cstrDWORD = Replicate(chr(0), 4)
RtlMoveMemory(@m.cstrDWORD, m.nPointer, 4)
RETURN str2long(m.cstrDWORD)
ENDFUNC

*--
* Convert a Number intto a binary Long Integer
*--
FUNCTION long2str
LParameter m.nLong

m.nLong = Int(m.nLong)
RETURN (chr(bitand(m.nLong,255)) + ;
chr(bitand(bitrshift(m.nLong, 8), 255)) + ;
chr(bitand(bitrshift(m.nLong, 16), 255)) + ;
chr(bitand(bitrshift(m.nLong, 24), 255)))
ENDFUNC
*--
* Convert a binary Long Integer into a Number
*--
FUNCTION str2long
LParameter m.cpLong
Return (Bitlshift(Asc(Substr(m.cpLong, 4, 1)), 24) + ;
Bitlshift(Asc(Substr(m.cpLong, 3, 1)), 16) + ;
Bitlshift(Asc(Substr(m.cpLong, 2, 1)), 8) + ;
Asc(Substr(m.cpLong, 1, 1)))
ENDFUNC
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.977)
Дополнения пользователей
Net Time или функция для получения времени с сервера в сети на основе API NetRemoteTOD
[+][?]
Радченко Виктор Вадимович
28.09.04 12:36:58

NetRemoteTOD Requirements :
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.

А есть ли WinAPI решение для рабочей станции под Win98 ?
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика