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

NetWkstaSetInfo API

答題得分者是:windblown
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-26 13:31:55 IP:211.74.xxx.xxx 未訂閱
各位大大,我去看MSDN的NetWkstaSetInfo說明,然後自己寫一段可以設定工作群組名稱的程式,編譯時,沒出現錯誤,但就是沒有結果,請各位大大指點我一下!
 /* NetWkstaSetInfo函數宣告 */
  LPWKSTA_INFO_101 pBuf = NULL;
  WKSTA_INFO_101 wi;
  DWORD dwLevel = 101;
  NET_API_STATUS nStatus;
  LPTSTR pszServerName = NULL;
  LPDWORD parm_err = NULL;
  int iStatus;      AnsiString src(Edit1->Text),src1(Edit5->Text);
  WideString Xfer(src),Xfer1(src1);
  wchar_t* dest = Xfer.c_bstr();
  wchar_t* dest1 = Xfer1.c_bstr();
  /* NetWkstaSetInfo函數,設定工作群組名稱(Netapi32.lib) */
  iStatus = NetWkstaSetInfo((wchar_t *)pszServerName,dwLevel,(unsigned char *)&pBuf,parm_err);
  if (iStatus == NERR_Success)
  {
    pBuf->wki101_computername = dest;//Edit1->Text;
    pBuf->wki101_langroup = dest1;
  }
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-26 15:55:59 IP:61.229.xxx.xxx 未訂閱
MSDN 寫的 1 The NetWkstaSetInfo function is obsolete. 2 Only members of the Administrators local group can successfully ... 我猜是不是因為這兩個原因而讓 iStatus != NERR_Success
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-27 01:06:20 IP:211.74.xxx.xxx 未訂閱
windblown大大,我有試過用Administrators,可是還是不行也!
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-27 13:54:13 IP:61.229.xxx.xxx 未訂閱
MSDN 寫    wk101_computername and wk101_langroup fields of this structure cannot be set by calling this function. To set these values, call SetComputerName/SetComputerNameEx or NetJoinDomain, respectively    我試的結果是 error = "沒有實作此功能"    因此你需要 SetComputerName()/SetComputerNameEx() 與 NetJoinDomain()    我試 SetComputerName() 的結果
  const char* pMyName = "Hello";
  int nResult = SetComputerName(pMyName);
它會更改 NetBios 的電腦名稱 可以從 控制台 -〉系統 -〉電腦名稱 -〉變更 -〉NetBios 電腦名稱 可以看出他的變化。 如果用 SetComputerNameEx()
#define _WIN32_WINNT 0x0500 // 要注意這行
#include 
#include       const char* pMyName = "Hello";
  nResult = SetComputerNameExA(ComputerNamePhysicalDnsHostname, pMyName);
控制台 -〉系統 -〉電腦名稱 -〉完整電腦名稱 可以看出他的變化。 ps1: 我是直接用 ansi version SetComputerNameExA(), 如果是 unicode, 需用 SetComputerNameExW() ps2: lib 需加 Netapi32.lib 設定工作群組的方法還沒找到
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-27 16:46:43 IP:140.127.xxx.xxx 未訂閱
引言: MSDN 寫 wk101_computername and wk101_langroup fields of this structure cannot be set by calling this function. To set these values, call SetComputerName/SetComputerNameEx or NetJoinDomain, respectively 我試的結果是 error = "沒有實作此功能" 因此你需要 SetComputerName()/SetComputerNameEx() 與 NetJoinDomain() 我試 SetComputerName() 的結果
  const char* pMyName = "Hello";
  int nResult = SetComputerName(pMyName);
它會更改 NetBios 的電腦名稱 可以從 控制台 -〉系統 -〉電腦名稱 -〉變更 -〉NetBios 電腦名稱 可以看出他的變化。 如果用 SetComputerNameEx()
#define _WIN32_WINNT 0x0500 // 要注意這行
#include 
#include       const char* pMyName = "Hello";
  nResult = SetComputerNameExA(ComputerNamePhysicalDnsHostname, pMyName);
控制台 -〉系統 -〉電腦名稱 -〉完整電腦名稱 可以看出他的變化。 ps1: 我是直接用 ansi version SetComputerNameExA(), 如果是 unicode, 需用 SetComputerNameExW() ps2: lib 需加 Netapi32.lib 設定工作群組的方法還沒找到 < face="Verdana, Arial, Helvetica"> 大大,小弟目前就是不知要如何設定工作群組,大大所說的SetComputerName API小弟已略懂了!感謝大大的回應!
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-28 17:18:21 IP:61.229.xxx.xxx 未訂閱
試出來了,請參考  
// 設定工作群組
void TestSetGroupName()
{
  LPCWSTR pServer = NULL;
  LPCWSTR pDomain = L"MSHOME"; // 重點一
  LPCWSTR pAccountOU = NULL;
  LPCWSTR pAccount = NULL;
  LPCWSTR pPassword = NULL;
  DWORD nJoinOptions = NETSETUP_DOMAIN_JOIN_IF_JOINED; // 重點二
  NET_API_STATUS nStatus =
    NetJoinDomain(pServer, pDomain, pAccountOU, pAccount, pPassword,
                  nJoinOptions);
  // 執行 NetJoinDomain() 時,會停頓一段時間
}
 
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-29 02:45:30 IP:59.104.xxx.xxx 未訂閱
引言: 試出來了,請參考
// 設定工作群組
void TestSetGroupName()
{
  LPCWSTR pServer = NULL;
  LPCWSTR pDomain = L"MSHOME"; // 重點一
  LPCWSTR pAccountOU = NULL;
  LPCWSTR pAccount = NULL;
  LPCWSTR pPassword = NULL;
  DWORD nJoinOptions = NETSETUP_DOMAIN_JOIN_IF_JOINED; // 重點二
  NET_API_STATUS nStatus =
    NetJoinDomain(pServer, pDomain, pAccountOU, pAccount, pPassword,
                  nJoinOptions);
  // 執行 NetJoinDomain() 時,會停頓一段時間
}
 
大大可以解釋一下:重點一、重點二嗎? 還有LPCWSTR pDomain = L"MSHOME";的L"MSHOME"雙引號應該就是工作群組名稱 可是小弟是用Edit1->Text來設定名稱!那L"MSHOME"要如何改? 小弟測了很多天了,還是try不出來,還是大大比較厲害!謝謝大大!
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-29 09:11:45 IP:61.229.xxx.xxx 未訂閱
LPCWSTR pDomain 指的是「工作群組名稱」的 unicdoe string 簡單的使用是 
  wchar_t aUnicode[100];
  Edit1->Text.WideChar(aUnicode, 100);
  pDomain = aUnicode;
重點二是個參數,如果不設為 NETSETUP_JOIN_DOMAIN 的話,任何參數都可以,但我看了相關參數,只有 NETSETUP_DOMAIN_JOIN_IF_JOINED 比較符合,因此使用它。 可以參考 MSDN 有詳細說明 Ps: 上面的 code 僅僅是我參考 help 寫的,並沒有實際測試,很抱歉,因為我用的是 bcc ver 5.5 的 compiler, 沒有 vcl 可以測試
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-29 13:35:14 IP:140.127.xxx.xxx 未訂閱
引言: Ps: 上面的 code 僅僅是我參考 help 寫的,並沒有實際測試,很抱歉
大大,我有試了上面的code,的確可以!感謝您,解決了我忙了好久的問題!
系統時間:2024-04-29 5:20:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!