全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3004
推到 Plurk!
推到 Facebook!

如何使用Delphi讀取NT或2000的帳號及密碼做認證

答題得分者是:chiehmin
JamesChen
一般會員


發表:3
回覆:1
積分:0
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-17 00:01:27 IP:61.59.xxx.xxx 未訂閱
大家好 想要做一個功能,就是執行此專案前 跳出詢問帳號/密碼的框框 輸入帳號後,程式與Win2000帳號密碼核對 若相同者,則通過可繼續執行 else 無法繼續執行 不知該怎去和 Win2000帳號比對 Thanks!
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-17 08:45:10 IP:61.221.xxx.xxx 未訂閱
{ 檢查NT登入帳號密碼 } function checkNTPass(iUserID, iPassword, iRemoteName: String): Boolean; var lpNetResource: _NETRESOURCE; begin lpNetResource.dwType := RESOURCETYPE_ANY; lpNetResource.lpLocalName := Nil; lpNetResource.lpRemoteName := PChar(iRemoteName); lpNetResource.lpProvider := Nil; case WNetAddConnection2(lpNetResource, PChar(iPassword), PChar(iUserID), 0) of NO_ERROR: begin Result := True; if WNetCancelConnection2(PChar(iRemoteName), 0, true) <> NO_ERROR then //showMessage('無法離線') else //showMessage('已離線'); end else Result := False; end; end; 發表人 - chiehmin 於 2002/10/17 08:54:45
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-14 16:43:18 IP:210.64.xxx.xxx 未訂閱
請教:這個函式要怎麼用呀? 我在自己的電腦編譯通過,用下面的方式測試,卻一直無法通過. 能夠幫幫忙、給我個範例、教我怎麼用嗎? procedure TForm1.Button2Click(Sender: TObject); begin If checkNTPass(Edit1.Text ,Edit2.Text,Edit3.Text) Then Memo1.Lines.Add('OK') Else Memo1.Lines.Add('False'); end;
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-14 16:51:31 IP:61.221.xxx.xxx 未訂閱
Edit1輸入帳號 Edit2輸入密碼 Edit3輸入NT主機名稱如  \\test
引言: 請教:這個函式要怎麼用呀? 我在自己的電腦編譯通過,用下面的方式測試,卻一直無法通過. 能夠幫幫忙、給我個範例、教我怎麼用嗎? procedure TForm1.Button2Click(Sender: TObject); begin If checkNTPass(Edit1.Text ,Edit2.Text,Edit3.Text) Then Memo1.Lines.Add('OK') Else Memo1.Lines.Add('False'); end;
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-15 11:45:12 IP:210.64.xxx.xxx 未訂閱
原來,主機名稱我少打「\\」 真得很想給您一個答題得分 非常滴謝謝您 ^_^
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-16 10:47:17 IP:210.64.xxx.xxx 未訂閱
我用下面的方式檢查帳號、密碼是否正確時,發現一個問題.  
If checkNTPass(edit1.text , edit2.text , edit3.text) Then
   Memo1.Lines.Add('True')
Else
   Memo1.Lines.Add('False');
 
如果網域控制器(DC)上有這的帳號,就需要正確的密碼才能通過. 如果DC上沒有這個帳號,也會通過,密碼當然就隨便key囉.不知道問題是在那裡. 我是用 Windows 2000 Server 當AD.
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-16 10:57:03 IP:61.221.xxx.xxx 未訂閱
我也不知道為什麼.... 我自己測試..沒有帳號都傳回
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-17 09:22:38 IP:61.216.xxx.xxx 未訂閱
經過多次的測試 發現Windows 2000 Server 會有這個情形,但是NT 4 Server 就不會. 如果帳號密碼是正確的話,很快就有回應 要是不正確的話,會頓一會兒才有回應 另外再裝一台Windows 2000 Server,只有加入網域,未安裝其他ap下,也是和NT4一樣的情形. 又,會怪怪的Win2k是網域內的AD.不是ad的都沒事.真是怪了 @_@
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-17 09:36:49 IP:61.216.xxx.xxx 未訂閱
又遇到問題了 !_!    我用GUI介面測試checkNTPass是 ok的. 另外,也用Console方式寫了一隻程式,用法如下: NTCheck UserID Pwd ServerName 在Dos下測試都 ok.    接下來寫成 ASP的元件. 在該ASP元件裡的其他功能都ok,就是checkNTPass總是回應失敗.  
function Tinfo.Get_CheckPwd(UserID, Pwd, ServerName: OleVariant): OleVariant;
begin
   If checkNTPass(UserID, Pwd, ServerName) Then
      Result := 'ok'
   Else
      Result :=  'fail';
end;
 
原以為是參數不能用 OleVariant .但是如果寫成 Result := UserID Pwd ServerName ; 也都能將三個參數傳送回來. 又想可能是 ASP 的元件沒寫好,就改用 ASPexec.dll 來執行之前的Console程式,卻還是不行. 想請教:我少做了什麼動作嗎?
系統時間:2024-11-23 2:28:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!