我们知道通过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上进行测试。 
----------
但我希望通过编程实现
 

解决方案 »

  1.   

    执行发送控制台的dos命令(偶记不清了,你找一下)用以下的三个函数都可以执行dos命令WinExecShellExecuteCreateProcess
      

  2.   

    BOOL CDOSDlg::ExecDosCmd()
    {
    #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;
    }
      

  3.   

    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的呢
      

  4.   

    本来就会block的(如果对方没及时响应,大概要等30秒),如果不想阻塞,开一个线程。
      

  5.   

    用DOS命令 net send用API函数 NetMessageBufferSend(...)都可以送出消息。但是要求对方计算机开通 Messenger 服务,该服务在 WinXP SP2 上是被缺省禁用的。
      

  6.   

    我用DOS 没有问题:
    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的呢
      

  7.   

    NET_API_STATUS ret = NetMessageBufferSend(NULL,T2COLE(strLocalIP),T2COLE(strAppName),(LPBYTE)(T2COLE(strMsg)),strMsg.GetLength()*sizeof(WCHAR));
      

  8.   

    To: Hendy_So(横笛)
    这个T2COLE()是什么function.
      

  9.   

    ATL中的函数,大概要:
    #include <afxpriv.h>在使用NetMessageBufferSend函数的最前面加上
    USES_CONVERSION;
      

  10.   

    就是net send啊~ 查查 messager这个服务的资料
      

  11.   

    system(net send ip msg);
    or system(net send pcname msg);
    vc6.0下测试通过
      

  12.   

    我要的是NetMessageBufferSend的例子呀
      

  13.   

    #include <afxpriv.h>{
      USES_CONVERSION;
      NET_API_STATUS ret = NetMessageBufferSend(NULL,T2COLE(strLocalIP),T2COLE(strAppName),(LPBYTE)(T2COLE(strMsg)),strMsg.GetLength()*sizeof(WCHAR));
    }