Взаимодействие с хостлистом
Функции работы с хостлистом можно разделить на следующие части:
 |
Собственно работа с хостами - удаление, добавление,
получение информации о хосте, получение информации о выделенных в данный момент в списке хостах - реализованы в виде
сообщений NMPN_OBJECT. Имена хостов должны быть в нижнем регистре. Для операций с
хостом lParam указывает на структуру NVHOST wParam может принимать следующие комбинации флагов:
 |
NVOBJ_GETHOST - В структуре NVHOST необходимо указать id
существующего хоста для получени информации о нем, либо 0 - тогда будет возвращена информация (в том числе и
id) первого хоста в списке
Если комбинировать NVOBJ_GETHOST | NVOBJ_SELECTED то будет возвращен следующий выделенный хост после указанного в id
(либо первый выделенный если id==0). В nextid возвращается id следующего хоста, что позволяет проходить по списку
всех, либо выделенных хостов. Ниже приведен пример функции перечисляющей все выделенный хосты и
передающей их по порядку процедуре yourstuff(char *):
NVHOST hst;ZeroMemory(&hst,sizeof(hst));
SendMessage(plgi->nvwnd,NMPN_OBJECT,NVOBJ_SELECTED|NVOBJ_GETHOST,(DWORD)&hst);
while(hst.id)
{
yourstuff(hst.hostname);
hst.id=hst.nextid;
if(hst.id)SendMessage(plgi->nvwnd,NMPN_OBJECT,NVOBJ_SELECTED|NVOBJ_GETHOST,(DWORD)&hst);
}
|
 |
NVOBJ_SETHOST - В структуре NVHOST указать id существующего хоста либо 0 для лобавления нового в список. При этом
все поля структуры будут перенесены в хост. |
 |
NVOBJ_DELHOST - В структуре NVHOST указать id существующего хоста. Он будет удален полностью. |
 |
NVOBJ_HOSTBYTEXT - lParam указывает на char * строку - имя хоста или ip адрес. Может быть скомбинировано с NVOBJ_FORCENEW - в этом
случае нетвью добавит новый хост, если не сможет найти существующий по указанному тексту. Сообщение
возвращает id найденного или добавленного хоста. Если указать флаг NVOBJ_HOSTNOIP то будет добавлен хост с
пустым IP без определения адреса по имени.
|
|
 |
Работа с хостлистами. lParam указывает на NVLIST структуру. wParam может иметь следующие
флаги:
 |
NVOBJ_GETLIST - то же самое что и NVOBJ_GETHOST для хостов, за
исключением того что NVOBJ_SELECTED не действует (пока, потом сделаю так чтобы при указании этого флага
возвращался активынй список) |
 |
NVOBJ_SETLIST - принцип тот же что и NVOBJ_SETHOST |
 |
NVOBJ_DELLIST - удаляет список, id которого передается в lParam (заметьте для
NVOBJ_DELHOST в lParam указывается структура NVHOST, а здесь только list id) |
 |
NVOBJ_LISTBYTEXT - аналогично NVOBJ_HOSTBYTEXT |
|
 |
Работа с линиями визуальной карты. Принципиально
отличается от первых двух пунктов тем что линии нетвью хранит в виде массива а
не списка для ускорения доступа и прорисовки.
 |
NVOBJ_GETLINE - lParam указывает на NVLINE, в которой
указан в index порядковый индекс линии, сообщение возвращает полное количество линий в хостлисте. Нетвью
заполнчет поля структуры для указанной линии. |
 |
NVOBJ_SETLINE - lParam указывает на NVLINE, в которой
заданы все параметры. Индекс следует установить в -1 для создания новой линии либо он должен быть равен
индексу существующей линии. Нетвью установит параметры линии и перерисует ее. |
 |
NVOBJ_DELLINE - lParam равен индексу линии, которую нужно удалить |
|
 |
Работа с областями -
визуальными прямоугольниками на карте.
Примерно так же как с хостлистами и
хостами: |
 |
NVOBJ_GETAREA - lParam указывает на
структуру NVAREA в которой заполнено поле id в
идентификатор существующей области или в 0
для получения самой первой области в
списке. Позволяет обходить список
областей аналогично работе с хостами и
хостлистами. Возвращает идентификатор в
случае успеха или 0 в случае ошибки. |
 |
NVOBJ_SETAREA - lParam указывает на
структуру NVAREA в которой заполнены все поля.
id установлен либо в идентификатор области
которую нужно поменять либо в 0 - тогда
будет создана новая область на заданном
хостлисте и с заданным именем. Учтите что на
одном хостлисте области могут иметь
только уникальные имена. Возвращает
идентификатор в случае успеха, 0 - в
случае глобального облома, -1 - в том случае
если плагин пытается присвоит области имя
уже существующей на карте другой области с
таким же именем. |
 |
NVOBJ_DELAREA - lParam установлен в
идентификатор id области подлежащей
удалению. Возвращает 1 в случае успеха и 0 -
в случае облома. |
 |
Работа с метаданными хостов. Метаданные - это строка, ассоциированная с хостом и
имеющая уникальное в пределах этого хоста имя. Строка и ее имя не может содержать в себе символы '#','$',#0,#13,#10 но
это ограничение будет снято в будущих версиях. В принципе ничто не мешает записать в метаданные полную
медкарточку пользователя компа, но этого лучше не делать из соображени быстродействия. Если будете
использовать свои метапеременные настоятельно рекомендую написать мне письмо для получения уникального начала
имен переменных (а-ля "abcd_"), что позволит избежать путаницы с другими плагинами. Имена переменных
чувствительны к регистру букв. Работа с ними осуществлется с помощью сообщения NMPN_METAVAR, lParam указывает
на структуру NVMETAVAR, причем для нее должно быть выделено достаточно памяти. wParam принимает значения:
 |
NVMETAVAR_GET - перед вызовом указать hostname и varname в
NVMETAVAR. Если переменной не существует будет возвращена пустая строка. Если максимальная граница строки
неизвестна, нужно установить vallen равным нулю, после вызова сообщения нетвью установит vallen в необходимое
значение. Затем выделить нужное кол-во памяти под структуру и вызвать сообщение еще раз. Примерный код этого дела:
LPNVMETAVAR
mv=(LPNVMETAVAR)malloc(256);
ZeroMemory(mv,256);
strcpy(mv->hostname,"coolhost");
strcpy(mv->varname,"abcd_myvar");
mv->vallen=0;
SendMessage(plgi->nvwnd,NMPN_METAVAR,NVMETAVAR_GET,(DWORD)mv);
mv=(LPNVMETAVAR)realloc(mv,256+mv->vallen);//выделили необходимое кол-во памяти
ZeroMemory(mv->val,mv->vallen+1);
SendMessage(plgi->nvwnd,NMPN_METAVAR,NVMETAVAR_GET,(DWORD)mv);
//теперь в mv->val мы имеем NULL TERMINATED строку длиной mv->vallen
//делаем с ней все что хотим и...:
free(mv);
|
 |
NVMETAVAR_SET - указать все параметры в NVMETAVAR. Если
строка имеет нулевую длину она будет удалена.
LPNVMETAVAR mv=(LPNVMETAVAR)malloc(256+val.Length());
strcpy(mv->hostname,"coolhost");
strcpy(mv->varname,"abcd_myvar");
strcpy(mv->val,"my metavar string");
mv->vallen=val.Length();
SendMessage(plgi->nvwnd,NMPN_METAVAR,NVMETAVAR_SET,(DWORD)mv);
free(mv);
|
 |
Нетвью хранит все параметры хостов в метапеременных. Назначение
некоторых (далеко не всех) встроенных метапеременных: |
|
Список основных
метапеременных можно найти здесь
Для применения изменений в большинстве внутренних метапеременных достаточно сделать NMPN_ACTION
с флагом NVACTION_SETSTATE указав в lParam соответствующий host id.
На верх
|