WNetOpenEnum/WNetEnumResource 遞迴列舉網域/電腦/共享資源。AnsiString ↔ WideChar 相容 Messenger API。TrayIcon 元件最小化至通知區域,支援右鍵選單還原/結束。HKCU\Software\Microsoft\Windows\CurrentVersion\Run。主表單包含:TTreeView (網路結構)、TListView (線上用戶)、TMemo (輸入訊息)、TStatusBar、工具列按鈕 (發送、匿名、要求回執)、系統匣圖示。

void __fastcall TFormMain::ButtonSendClick(TObject *Sender) {
AnsiString msg = Memo1->Text;
if (msg.IsEmpty()) { ShowMessage("請輸入訊息"); return; }
AnsiString from = CheckBoxAnony->Checked ? EditAnony->Text : "";
AnsiString to;
TListItem* item;
if (!ListView1->SelCount) { // TreeView 選取
if (!TreeView1->Selected) { ShowMessage("請選擇目標"); return; }
to = TreeView1->Selected->Text;
if (TreeView1->Selected->Level == 1) to += "*"; // 電腦節點加 *
} else { // ListView 多選
for (int i = 0; i < ListView1->SelCount; i++) {
item = (i==0) ? ListView1->Selected : ListView1->GetNextItem(item, sdAll, TItemStates() << isSelected);
to = item->Caption;
if (TreeView1->Selected->Level == 0) to += "*"; // 網域節點
while (to[1] == '\\') to = to.SubString(2, to.Length()-1); // 移除前導 \\
new TNetMessageSend(false, to, from, msg, CheckBoxGetRet->Checked);
}
return;
}
while (to[1] == '\\') to = to.SubString(2, to.Length()-1);
new TNetMessageSend(false, to, from, msg, CheckBoxGetRet->Checked);
}
bool __fastcall TEnumNetResource::GetNetRes(TTreeNodes* Nodes, TTreeNode* Node,
NETRESOURCE* pNetRes, int Depth) {
if (Terminated || !Nodes || Depth == 0) return false;
HANDLE hEnum;
if (WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, pNetRes, &hEnum) != NO_ERROR)
return false;
NETRESOURCE buffer[1024];
DWORD count = 10, size = 16384;
bool result = true;
do {
DWORD err = WNetEnumResource(hEnum, &count, buffer, &size);
if (err == NO_ERROR) {
for (DWORD i = 0; i < count; i++) {
if (Terminated) return false;
NETRESOURCE* nr = &buffer[i];
AnsiString name = nr->lpRemoteName;
while (name[1] == '\\') name = name.SubString(2, name.Length()-1);
TTreeNode* child = Nodes->AddChild(Node, name);
// 設定圖示索引...
if (nr->dwDisplayType != RESOURCEDISPLAYTYPE_SHARE)
GetNetRes(Nodes, child, nr, Depth-1);
}
} else if (err != ERROR_NO_MORE_ITEMS) {
result = false; break;
}
} while (count == 10);
WNetCloseEnum(hEnum);
return result;
}
void __fastcall TNetMessageSend::Execute() {
const int MAXLEN = 1600;
wchar_t* buf = new wchar_t[FMessage.WideCharBufSize()];
FMessage.WideChar(buf, FMessage.WideCharBufSize());
for (int offset = 0; offset < FMessage.WideCharBufSize()*2; offset += MAXLEN) {
int len = min(MAXLEN, FMessage.WideCharBufSize()*2 - offset);
DWORD ret = NetMessageBufferSend(NULL, FUserName.c_str(), FFromName.c_str(),
(char*)(buf + offset/2), len);
// 處理回傳碼...
}
delete[] buf;
}
services.msc → Messenger → 自動/啟動)