# 如何在遠端電腦彈出訊息 ###### tags: `ChangingTec-Windows開發` ### 前言 在Command中我們可以利用msg指令來向某一台電腦發出訊息 ```shell= msg /SERVER:<IP> * "message" ``` 結果如下圖所示,可以在遠端的電腦產生一個彈跳視窗顯示訊息。 ![](https://i.imgur.com/HfH6mE0.png) 這篇文章主要是提供在Windows平台下如何使用C++來產生相同的功能。 (使用Visual Studio 2019編譯) ### 程式碼 大部分遠端的功能,WinSocket或RPC等等,都需要先和遠端的裝置進行連接,所以下面範例會先看到第一步驟是要先OpenServer(接受連接者稱為Server)。在Open完後我們要選擇Session來進行傳輸,Session可以想成是{傳輸者,接收者}之間的一條傳輸通道,在這邊我們選擇Console。 最後我們使用SendMessage來傳輸我們的資料,在這個函式中我們可以做以下設定: (1) 傳送的標題與內容 (2) 客製化MessageBox選項(eq:MB_OK, MB_HELP......) (3) Timeout設定 (4) 是否等待伺服器端回傳結果 詳細的資訊可以參考官方網站的API。 https://docs.microsoft.com/en-us/windows/win32/api/wtsapi32/nf-wtsapi32-wtssendmessagew ```cpp=14 #include <Windows.h> #include <WtsApi32.h> #include <iostream> #include <string> using namespace std; int main() { const char* sendTitle = "Title"; const char* sendMessage = "Message"; DWORD response; PWTS_SESSION_INFOA sessionInfo; DWORD sessionCount; HANDLE remoteHost = WTSOpenServerExA((LPSTR)"Your Remote Computer IP"); if (!WTSEnumerateSessionsA( remoteHost, 0, 1, &sessionInfo, &sessionCount )) { return -1; } for (unsigned int i = 0; i < sessionCount; i++) { if (0==strcmp(sessionInfo[i].pWinStationName, "Console")) { cout << sessionInfo[i].pWinStationName << endl; WTSSendMessageA( remoteHost, sessionInfo[i].SessionId, (LPSTR)sendTitle, strlen(sendTitle), (LPSTR)sendMessage, strlen(sendMessage), MB_OK, 0, &response, TRUE ); } } WTSFreeMemory(sessionInfo); WTSCloseServer(remoteHost); } ```