Реферат по предмету "Программирование"


Как самому сделать plug-in к FAR на Visual C++

Как самому сделать plug-in к FAR на Visual C++

Трудно
найти человека, которые не знает или не использует Far - IMHO лучший клон NC
для Windows. Кроме того, что это просто очень хороший файл менеджер, к нему
есть огромное количество plug-in модулей. Plug-in модуль это DLL-файл, который
вместо стандартных Windows функций по работе с монитором, клавиатурой и т.д.
обращается к функциям Far-а.

Far
поддерживает весь набор функций для работы в текстовом режиме. Установка
plug-in модуля происходит предельно просто - DLL файл и файлы данных копируются
в каталог в каталоге FarPlugins и Far перезапускается.

FAR
распространяется с полным набором файлов для написания самим plug-in на любом С
компиляторе для Windows. Темой этой статьи является написание этих модулей
самим на Visual C++ (я использовал Visual C++ 5.0). При установке в каталог Far
копируется PlugDoc.rar, в нем есть примеры plug-in-ов и header файл. Все
примеры используются Еще там есть VCReadme.txt, в котором описываются тонкости
работы с Visual C++. Потом поразбираетесь с примерами.

Мы
с вами напишем plug-in, который получает список открытых окон Windows, он может
пригодиться как заготовка для своих. И вообще - стоит начать - все это не так
сложно, как можно подумать. Вот, а теперь - поехали:

1)
Запускает VC, делаем новый проект типа "Win32 Dynamic-Link Library"
по имени SimpleFP. Создает файл simplefp.cpp - здесь, собственно, мы и будем
писать. В каталог SimpleFP копируем header файл plugin.hpp из архива
PlugDoc.rar.

2)
Теперь нам надо сделать .def файл - это файл, в котором описываются функции,
которые вызываются из внешних модулей. Мы должны описать функции Far-а, которые
мы будем использовать в нашем модуле. Делаем текстовый файл simplefp.def, в
котором пишем:

LIBRARY

EXPORTS

GetPluginInfo=_GetPluginInfo@4

OpenPlugin=_OpenPlugin@8

SetStartupInfo=_SetStartupInfo@4

Здесь
мы описываем 3 функции, которые нам пригодятся. А теперь добавим simpledef.def к файлам проекта
(Project - Add to project - Files - simplefp.def).

3)
Теперь пишем сам plug-in - работаем с файлом simplefp.cpp. Я решил дать текст
самой программы с комментариями - можно скопировать в С++ и начать с ним
возиться. Но сначала о основах.

Far
работает по тем же принципам, что и Windows - вы ссылаетесь в программе на те
функции, уже имеющиеся в системе, которые хотите использовать. Far
предоставляет функции для работы с экранными формами в режиме console
application. При запуске plug-in-а Far запускает функцию OpenPlugin, мы будем
ее рассматривать как аналог main() или WinMain(). Но кроме этого надо еще
сообщить Far-у данные о нашем plug-in-е. Это делает функция GetPluginInfo.

/*

*
SimpleFP - простой plug-in к Far-у. (С) 2000
Phoenix, Moscow

*/

#include // для вызова sprintf

#include // для функций Windows

#include "plugin.hpp" // для функций Far

#define PLUGIN_NAME "Open
windows" // Название
plug-in-а

#define
WINDOW_HEAD "Open windows list" // Заголовок меню, которое мы сделаем

//

//
Описываем функции Far, которые с которыми мы работаем.

//

extern "C"

{

void WINAPI _export
SetStartupInfo(struct PluginStartupInfo *Info);

HANDLE WINAPI _export OpenPlugin(int
OpenFrom,int Item);

void WINAPI _export
GetPluginInfo(struct PluginInfo *Info);

};

static struct PluginStartupInfo
Info; // Информация о нашем plug-in-е

//

//
Информация о модуле определена нами в структуре Info

//

void WINAPI _export
SetStartupInfo(struct PluginStartupInfo *Info)

{

::Info=*Info;

}

//
Эта функция вызывается для получения информации о plug-in.

//
Мы должны заполнить поля структуры Info.

//

void WINAPI _export
GetPluginInfo(struct PluginInfo *Info)

{

Info->StructSize=sizeof(*Info);
// Размер структуры Info

Info->Flags=0;
// Это нам не нужно

Info->DiskMenuStringsNumber=0;
// Это нам тоже не нужно

//
Определяем строку с названием модуля

static
char *PluginMenuStrings[1];

PluginMenuStrings[0]= PLUGIN_NAME;

// Определяем название plug-in модуля

Info->PluginMenuStrings=PluginMenuStrings;

Info->PluginMenuStringsNumber=sizeof(PluginMenuStrings)/sizeof(PluginMenuStrings[0]);

Info->PluginConfigStringsNumber=0;
// Это нам не нужно

}

//
Эта функция вызывается при запуске plug-in модуля.

//

HANDLE WINAPI _export OpenPlugin(int
OpenFrom,int Item)

{

HWND
hwnd; // Используем для получения handle

char
p[128], o[128]; // Для создания строк меню

int
i=0; // Счетчик

struct
FarMenuItem MenuItems[64]; // Описание меню, которое создаст для нас Far

memset(MenuItems,0,sizeof(MenuItems));
// Инициализируем наше меню

MenuItems[0].Selected=TRUE;

hwnd = GetDesktopWindow(); // Получаем handle для desktop

hwnd = GetWindow(hwnd, GW_CHILD); //
Получаем его handle

while
(hwnd !=0) // Пока оно не последнее

{

hwnd = GetWindow(hwnd, GW_HWNDNEXT);
// получим handle окна

GetWindowText(hwnd,p,128);
// и его заголовок

if
(strlen(p)>0) // если заголовок есть

{

sprintf(o,"%0.8xld
%s", hwnd, p); // сделаем строчку

strcpy(MenuItems[i++].Text,
o); // скопируем эту строчку в массив MenuItems

}

}

//
вызываем созданное нами меню, получаем номер выбранного пункта - MenuCode

//

int
MenuCode=Info.Menu(Info.ModuleNumber,

-1,-1,0,

FMENU_AUTOHIGHLIGHT|FMENU_WRAPMODE,

WINDOW_HEAD,

NULL,

"Menu content",

NULL,

NULL,

MenuItems,

i);

return(INVALID_HANDLE_VALUE);

}

Компилируйте,
копируйте в FarPlugin и перезапускайте Far. В Far-е нажмите F11 - это список
plug-in модулей. Теперь в нем должна появиться строка Open windows. Посмотрите
на результат. Теперь можно развивать, например - обрабатывая результат MenuCode
посылать выбранному окну сообщение WM_CLOSE, или сделать еще что-нибудь
нетривиальное :) Создание plug-in модулей к Far-у документирована замечательно,
разбирайтесь.
Список литературы

Для
подготовки данной работы были использованы материалы с сайта http://www.soch.imperium.by


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат No Privacy Essay Research Paper Each time
Реферат The Rise And Fall Of Prohibition In
Реферат Обучение персонала организации
Реферат Экономические показатели работы УП Минский вагоноремонтный завод
Реферат Внешнеполитические цели политики перестройки.
Реферат Александер, Уильям, граф Стерлинг
Реферат Аспирантка миу история возникновения и правового регулирования товарных знаков
Реферат Gun Control Essay Research Paper Will Gun
Реферат Онтологическая и гносеологическая стороны основного вопро
Реферат Особенности рынка недвижимости
Реферат Прямое налогообложение расходов физических лиц на потребление
Реферат Екологія та ландшафтна екологія
Реферат Аудит достоверности показателей бухгалтерской отчетности предприя
Реферат Стратегия инвестиционной деятельности на Украине
Реферат Анализ производства и реализации продукции на предприятии ЧУП "Светоприбор"