Название: Как самому сделать plug-in к FAR на Visual C++
Вид работы: доклад
Рубрика: Информатика и программирование
Размер файла: 15.72 Kb
Скачать файл: referat.me-138939.docx
Краткое описание работы: Far поддерживает весь набор функций для работы в текстовом режиме. Установка plug-in модуля происходит предельно просто - DLL файл и файлы данных копируются в каталог в каталоге FarPlugins и Far перезапускается.
Как самому сделать 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-у документирована замечательно, разбирайтесь.
Похожие работы
-
Описание файлов, создаваемых Дельфи
Вы когда ни будь задумывались о том, что создает Дельфи в папке с исходниками проекта? Да и нужен ли весь этот абсолютно бесполезный, для рядового программиста, "мусор"? Пора призадуматься. В этой мини-статье я расскажу о назначении таких файлов.
-
Тектовый редактор VI. ОС UNIX ...
Лабораторная работа №3 Текстовый редактор vi. Создание и сохранение файлов. Основные режимы работы. Назначение и функции командного режима. Назначение и функции режима редактирования.
-
Работа с каталогами (лабораторная работа)
Лабораторная работа №1 Т е м а : Р а б о т а с к а т а л о г а м и Задание: 1)Просмотр корневых каталогов и подкаталогов дисков командами DIR,DIR/W,DIR/P. В отчете представить 3-4 характерные строки отображения содержимого каталогов при выполнении команд DIR(DIR/p) и DIR/W, т.е. показать форму отображения имен файлов и каталогов.
-
Технология Plug and Play
Plug and Play - это стандарт компьютерной индустрии для автоматизации процесса добавления новых возможностей к вашему компьютеру или изменения адаптеров PCMCIA в вашем портативном компьютере.
-
Функции операционных систем персонального компьютера
Операционная система - программа, которая загружается при включении компьютера. Способы реализации интерфейса и классификация операционных систем. Организация файловой системы, типы файлов и их наименования. Понятие каталога, атрибуты файловой системы.
-
Plug and Play
Общая характеристика технологии Plug and Play, ее структура и принцип действия, оценка преимуществ и недостатков, системные требования для бесперебойной работы. Основная цель реализации Plug and Play и ее возможности, спецификация интерфейса драйверов.
-
Переустановка Windows
О самой процедуре удаления Windows и установки по новой уже много рассказано и повторяться здесь не имеет смысла. Я упомяну только о некоторых установках на которые часто не обращают внимание.
-
Основные команды операционной системы MS-DOS и работа с ними
Что такое операционная система, ее главные функции и классификация. Характеристика операционной системы MS-DOS4, организация данных. Особенности основных операций и команд системы, отработка практических навыков использования команд для работы на ПК.
-
Знакомство с MS-DOS
Понятия файлов и каталогов. Область внешней памяти, группа файлов на одном носителе. Древовидная структура файлов на диске. Имя и местонахождение файла. Маршрут или путь по файловой системе. Запись имени файла в DOSе. Шаблоны. Структура каталога.
-
SVG: Замена Flash-у
В векторной графике появился новичок - Scalable Vector Graphics (SVG) (масштабируемая векторная графика), язык, основанный на XML, разрабатываемый консорциумом W3C.