我们知道通过WIndows tools
发送控制台消息 系统管理员可以使用控制台消息功能向工作组或域中的每一台计算机发送一条消息。举例来说, 当执行服务器维护工作时, 他们可以向用户发送一条能够显示在桌面上的消息, 以便通知用户这台服务器将在特定时间内停机。如需发送一条控制台消息, 请依次执行以下操作: 依次点击Start(开始)、Control Panel(控制面版)、Performance and Maintenance(性能与维护)、Administrative Tools(管理工具)。
双击Computer Management(计算机管理)。
在计算机管理窗口中, 点击Action(操作)菜单, 选择All Tasks(所有任务)并单击Send Console Message(发送控制台消息)。
如果您需要在收件人列表中创建新的计算机, 请单击Add(添加)。在Select Computers(选择计算机)对话框中, 选择您所要访问的工作组或域, 并点击相应的计算名称。
在发送控制台消息对话框中单击Send(发送)。
这种控制台消息将在用户桌面上的Messenger Service(消息服务)框中予以显示。为访问Microsoft管理控制台(MMC), 您必须具备本地计算机上的管理权限。这种使用技巧已在Windows XP Professional上通过了测试, 但尚未在Windows XP Home Edition上进行测试。
----------
但我希望通过编程实现
发送控制台消息 系统管理员可以使用控制台消息功能向工作组或域中的每一台计算机发送一条消息。举例来说, 当执行服务器维护工作时, 他们可以向用户发送一条能够显示在桌面上的消息, 以便通知用户这台服务器将在特定时间内停机。如需发送一条控制台消息, 请依次执行以下操作: 依次点击Start(开始)、Control Panel(控制面版)、Performance and Maintenance(性能与维护)、Administrative Tools(管理工具)。
双击Computer Management(计算机管理)。
在计算机管理窗口中, 点击Action(操作)菜单, 选择All Tasks(所有任务)并单击Send Console Message(发送控制台消息)。
如果您需要在收件人列表中创建新的计算机, 请单击Add(添加)。在Select Computers(选择计算机)对话框中, 选择您所要访问的工作组或域, 并点击相应的计算名称。
在发送控制台消息对话框中单击Send(发送)。
这种控制台消息将在用户桌面上的Messenger Service(消息服务)框中予以显示。为访问Microsoft管理控制台(MMC), 您必须具备本地计算机上的管理权限。这种使用技巧已在Windows XP Professional上通过了测试, 但尚未在Windows XP Home Edition上进行测试。
----------
但我希望通过编程实现
解决方案 »
- 用API函数创建非模态对话框遇到问题.. 急啊 .. 希望大家帮忙 万分感谢
- 请教VC++操作Excel
- 有没有VC学习的群
- VC中使用CBitmap类必须将BMP位图装入资源中,我对此有疑问?
- 我的VC++ 6.0在编译release版本出现链接错误,希望得到帮助
- 如何做到:一插入U盘,就自动将其所有内容复制下来?
- 非常邪门的问题:dc.SetBkMode(TRANSPARENT);语句编译通不过?错误信息为:error C2065: 'TRANSPARENT' : undeclared identifier
- 如何在单文档中首先显示对话框
- 请问有没有能删除TXT文件里特定字母和字符的程序?谢谢!
- 老问题了,不过我当时没仔细看.
- dll中使用CSocket,为什么Create时候会出错?
- 为什么我用GetAsyncKeyState在98下不能获得左右Shift和Ctrl键的区别呢?
{
#define EXECDOSCMD "net send lige 服不服?" //可以换成你的命令 SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
return FALSE;
} STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//关键步骤,CreateProcess函数参数意义请查阅MSDN
if (!CreateProcess(NULL, EXECDOSCMD
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
return FALSE;
}
CloseHandle(hWrite); char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
//buffer中就是执行的结果,可以保存到文本,也可以直接输出
TRACE(buffer);
Sleep(200);
}
return TRUE;
}
LPCWSTR wtargetName=(unsigned short *)"192.168.1.15";
char str[]="Testing";
dwReturn=NetMessageBufferSend(NULL,wtargetName,NULL,(LPBYTE)str,strlen(str));
我的程序停在上面的NetMessageBufferSend()上,怎么会是block的呢
net send 192.168.1.15 test
----------
但用 API 收不到
DWORD dwReturn = 0;
LPCWSTR wtargetName=(unsigned short *)"192.168.1.15";
char str[]="Testing";
dwReturn=NetMessageBufferSend(NULL,wtargetName,NULL,(LPBYTE)str,strlen(str));
我的程序停在上面的NetMessageBufferSend()上,怎么会是block的呢
这个T2COLE()是什么function.
#include <afxpriv.h>在使用NetMessageBufferSend函数的最前面加上
USES_CONVERSION;
or system(net send pcname msg);
vc6.0下测试通过
USES_CONVERSION;
NET_API_STATUS ret = NetMessageBufferSend(NULL,T2COLE(strLocalIP),T2COLE(strAppName),(LPBYTE)(T2COLE(strMsg)),strMsg.GetLength()*sizeof(WCHAR));
}