NetWkstaSetInfo API |
答題得分者是:windblown
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
各位大大,我去看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 發送簡訊給我 |
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
|
windblown
中階會員 發表:0 回覆:117 積分:98 註冊:2003-11-14 發送簡訊給我 |
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控制台 -〉系統 -〉電腦名稱 -〉完整電腦名稱 可以看出他的變化。 ps1: 我是直接用 ansi version SetComputerNameExA(), 如果是 unicode, 需用 SetComputerNameExW() ps2: lib 需加 Netapi32.lib 設定工作群組的方法還沒找到 |
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
引言: 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控制台 -〉系統 -〉電腦名稱 -〉完整電腦名稱 可以看出他的變化。 ps1: 我是直接用 ansi version SetComputerNameExA(), 如果是 unicode, 需用 SetComputerNameExW() ps2: lib 需加 Netapi32.lib 設定工作群組的方法還沒找到 >>< face="Verdana, Arial, Helvetica"> 大大,小弟目前就是不知要如何設定工作群組,大大所說的SetComputerName API小弟已略懂了!感謝大大的回應! |
windblown
中階會員 發表:0 回覆:117 積分:98 註冊:2003-11-14 發送簡訊給我 |
試出來了,請參考
// 設定工作群組 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 發送簡訊給我 |
引言: 試出來了,請參考大大可以解釋一下:重點一、重點二嗎? 還有LPCWSTR pDomain = L"MSHOME";的L"MSHOME"雙引號應該就是工作群組名稱 可是小弟是用Edit1->Text來設定名稱!那L"MSHOME"要如何改? 小弟測了很多天了,還是try不出來,還是大大比較厲害!謝謝大大!// 設定工作群組 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() 時,會停頓一段時間 } |
windblown
中階會員 發表:0 回覆:117 積分:98 註冊:2003-11-14 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |