В Windows NT-системах (NT/2000/XP/2003) появилась очень
интересная и удобная команда NET SEND, которая
позволяет отправить на другой компьютер сообщение из командной строки. Вы пишете
команду, адрес получателя и текст сообщение. А после выполнения инструкции на
компьютере адресата появляется окно с текстом сообщения.
Сообщение отправляется командой следующего вида:
NET SEND Адрес Текст
В качестве адреса можно указывать как NETBios-имя компьютера,
так и IP -адрес. Вот пример, который посылает сообщение "Hi, Dany" на компьютер
Dany :
NET SEND Dany Hi, Dany
Самое интересное, что Windows 2000 и Windows
XP абсолютно не защищены от бомбардировки командой NET
SEND. Вы можете очень быстро послать хоть сто команд на компьютер вашего
друга с любыми сообщениями, и все они дойдут. Но отправлять руками —
утомительно, поэтому напишем небольшую программу.
Создайте новый проект типа Win32 Project в
Visual C++ (использовалась версия Visual C++ 6.0 ) , и в функции WinMain напишите следующий
код до цикла обработки сообщений: for (int i=0; i<10; i++) { WinExec("NET SEND 192.168.1.121 You will be cry by me", SW_SHOW); Sleep(1000); }
Здесь мы запускаем цикл, в котором функция WinExec будет 10 раз
выполнять код, указанный в качестве первого параметра в командной строке Windows
. В данном примере это текст "NET SEND 192.168.1.121 You will
be cry by me". Если выполнить этот код в командной строке, то вы отправите
сообщение "You will be cry by me" на компьютер с адресом 192.168.1.121. На каждом шаге цикла мы делаем задержку в 1 секунду с помощью
функции Sleep, чтобы между сообщениями была хоть
какая-то пауза.
Что бы скрыть окно командной строки измените параметр SW_SHOW на SW_HIDE.
Полный листинг программы:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
// Глобальные переменные: HINSTANCE hInst; HWND hWnd;
// Прототипы функций: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
MSG msg; HACCEL hAccelTable;
MyRegisterClass(hInstance);
//Инициализация приложения: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; }
for (int i=0; i<10; i++) { WinExec("NET SEND 192.168.1.121 You will be cry by me", SW_HIDE); Sleep(1000); } // Главный цикл сообщений: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); }
}
return msg.wParam; }
// // ФУНКЦИЯ: MyRegisterClass() // // НАЗНАЧЕНИЕ: Регистрация класса окна. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = 0; wcex.hCursor = 0; wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = 0; wcex.lpszClassName = "MyClass"; wcex.hIconSm = 0;
return RegisterClassEx(&wcex); }
// // ФУНКЦИЯ: InitInstance(HANDLE, int) // // НАЗНАЧЕНИЕ: Сохранение экземпляра приложения и создание окна // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd;
hInst = hInstance; // Сохранение экземпляра приложения в глобальной переменной
hWnd = CreateWindow("MyClass", "MyWindow", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd) { return FALSE; }
//Закоментировать, если не хотите чтобы было видно окно //*********************************************** ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); //***********************************************
return TRUE; }
// // ФУНКЦИЯ: : WndProc(HWND, unsigned, WORD, LONG) // // НАЗНАЧЕНИЕ: : Обработка сообщений от главного окна. // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc;
switch (message) { case WM_PAINT: break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
|