線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2426
推到 Plurk!
推到 Facebook!

修改時間,user權限受限無法修改

尚未結案
lisahsu7488
一般會員


發表:9
回覆:3
積分:2
註冊:2007-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-11 20:19:13 IP:210.243.xxx.xxx 訂閱
在系統一執行會去
使用ShellExecute(application.Handle, nil, 'cmd.exe', PChar('/C time ' sTime), nil, SW_HIDE);
和setlocaltime
雖然它可以修改時間,但卻有權限上的問題…
但是因某些原因,不能開放給user更改時間,所以想請問各位大大是否有更好的方法,謝謝!
昨天,又另外試了SETSYSTEMTIME可是,執行完全沒反應…不知道是哪出問題了,可以再麻煩大大幫忙一下嗎?謝謝
感謝christie大大的幫忙,不過現在是卡在權限執行了~"~
有參考更改權限的文章,但放放gest權限上依然是無法執行會出現一個error→並非所有參考到的特殊權限都指定給呼叫者


const
SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
var
bsql:string;
MyST:TSystemTime;
hToken: THandle;
tkp, PrevTokenPriv: TTokenPrivileges;
luid: TLargeInteger;
ReturnLength: DWORD;
begin
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
try
if not LookupPrivilegeValue(nil, SE_SYSTEMTIME_NAME, luid) then Exit;
tkp.PrivilegeCount := 1;
tkp.Privileges[0].luid := luid;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTOKENPRIVILEGES),
PrevTokenPriv, ReturnLength) then Exit;
if (GetLastError <> ERROR_SUCCESS) then
begin
raise Exception.Create(SysErrorMessage(GetLastError));
Exit;
end;
finally
CloseHandle(hToken);
end;
end;
end;
bsql:='select current timestamp as time from test';
query1.Close;
query1.SQL.Clear;
query1.SQL.Text:=bsql;
query1.open;
if query1.RecordCount<>0 then
begin
with MyST do
begin
wYear:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),1,4));
wMonth:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),6,2));
wDay:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),9,2));
DayOfWeek(now);
wHour:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),12,2))-8;
wMinute:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),15,2));
wSecond:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),18,2));
end;
if not windows.SetsystemTime(myst) then
showmessage('error!');
end else
begin
edit1.Text:='error';
end;
end;
**我的名言☆愈受挫愈努力☆也許道路上會有很多的阻礙,當解決後也會更成長^^~
編輯記錄
lisahsu7488 重新編輯於 2008-12-12 09:59:38, 註解 無‧
lisahsu7488 重新編輯於 2008-12-12 12:19:49, 註解 無‧
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-12 11:29:01 IP:122.117.xxx.xxx 未訂閱
Hi, Try THIS:

procedure TForm1.FormClick(Sender: TObject);
VAR
ld_DBTime : TDateTime;
ld_SysTime : TSystemTime;
begin
ld_DBTime:=strtodatetime('2008/12/12 11:27:55');
DateTimeToSystemTime(ld_DBTime, ld_SysTime);
SetLocalTime(ld_SysTime);
end;
===================引 用 lisahsu7488 文 章===================
在系統一執行會去
使用ShellExecute(application.Handle, nil, 'cmd.exe', PChar('/C time ' sTime), nil, SW_HIDE);
和setlocaltime
雖然它可以修改時間,但卻有權限上的問題…
但是因某些原因,不能開放給user更改時間,所以想請問各位大大是否有更好的方法,謝謝!
昨天,又另外試了SETSYSTEMTIME可是,執行完全沒反應…不知道是哪出問題了,可以再麻煩大大幫忙一下嗎?謝謝
Var
MyST:TSystemTime;
begin
bsql:='select current timestamp as time from test';
query1.Close;
query1.SQL.Clear;
query1.SQL.Text:=bsql;
query1.open;

with MyST do
begin
wYear:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),1,4));
wMonth:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),6,2));
wDay:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),9,2));
DayOfWeek(now);
wHour:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),12,2));
wMinute:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),15,2));
wSecond:=strtoint(copy(formatdatetime('yyyy/mm/dd hh:nn:ss',query1.FieldValues['time']),18,2));
end;
SetSystemTime(myst);
end;
------
What do we live for if not to make life less difficult for each other?
系統時間:2024-05-06 10:03:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!