Here you can view the CLCLPlugin folder and the CLCLPlugin\tool_test\tool_test.c file.
CLCLPlugin.pbi (using Header Converter.exe). But I don't understand the meaning of #WM_APP
Code: Select all
#BUF_SIZE = 256
#WM_GET_VERSION = (#WM_APP+100)
#WM_GET_WORKPATH = (#WM_APP+101)
#WM_GET_CLIPBOARD_WATCH = (#WM_APP+102)
#WM_SET_CLIPBOARD_WATCH = (#WM_APP+103)
#WM_GET_FORMAT_ICON = (#WM_APP+104)
#WM_ENABLE_ACCELERATOR = (#WM_APP+105)
#WM_REGIST_HOTKEY = (#WM_APP+106)
#WM_UNREGIST_HOTKEY = (#WM_APP+107)
#WM_OPTION_SHOW = (#WM_APP+200)
#WM_OPTION_GET = (#WM_APP+201)
#WM_OPTION_LOAD = (#WM_APP+202)
#WM_OPTION_SAVE = (#WM_APP+203)
#WM_HISTORY_CHANGED = (#WM_APP+300)
#WM_HISTORY_GET_ROOT = (#WM_APP+301)
#WM_HISTORY_LOAD = (#WM_APP+302)
#WM_HISTORY_SAVE = (#WM_APP+303)
#WM_REGIST_CHANGED = (#WM_APP+350)
#WM_REGIST_GET_ROOT = (#WM_APP+351)
#WM_REGIST_LOAD = (#WM_APP+352)
#WM_REGIST_SAVE = (#WM_APP+353)
#WM_ITEM_TO_CLIPBOARD = (#WM_APP+400)
#WM_ITEM_CREATE = (#WM_APP+401)
#WM_ITEM_COPY = (#WM_APP+402)
#WM_ITEM_FREE = (#WM_APP+403)
#WM_ITEM_FREE_DATA = (#WM_APP+404)
#WM_ITEM_CHECK = (#WM_APP+405)
#WM_ITEM_TO_BYTES = (#WM_APP+406)
#WM_ITEM_FROM_BYTES = (#WM_APP+407)
#WM_ITEM_TO_FILE = (#WM_APP+408)
#WM_ITEM_FROM_FILE = (#WM_APP+409)
#WM_ITEM_GET_PARENT = (#WM_APP+410)
#WM_ITEM_GET_FORMAT_TO_ITEM = (#WM_APP+411)
#WM_ITEM_GET_PRIORITY_HIGHEST = (#WM_APP+412)
#WM_ITEM_GET_TITLE = (#WM_APP+413)
#WM_ITEM_GET_OPEN_INFO = (#WM_APP+414)
#WM_ITEM_GET_SAVE_INFO = (#WM_APP+415)
#WM_VIEWER_SHOW = (#WM_APP+500)
#WM_VIEWER_GET_HWND = (#WM_APP+501)
#WM_VIEWER_GET_MAIN_HWND = (#WM_APP+504)
#WM_VIEWER_GET_SELECTION = (#WM_APP+502)
#WM_VIEWER_SELECT_ITEM = (#WM_APP+503)
#TYPE_DATA = 0
#TYPE_ITEM = 1
#TYPE_FOLDER = 2
#TYPE_ROOT = 3
#CALLTYPE_MENU = 1
#CALLTYPE_VIEWER = 2
#CALLTYPE_VIEWER_OPEN = 4
#CALLTYPE_VIEWER_CLOSE = 8
#CALLTYPE_ADD_HISTORY = 16
#CALLTYPE_ITEM_TO_CLIPBOARD = 32
#CALLTYPE_START = 64
#CALLTYPE_END = 128
#CALLTYPE_MENU_COPY_PASTE = 256
#CALLTYPE_HISTORY = 512
#CALLTYPE_REGIST = 1024
#TOOL_ERROR = 0
#TOOL_SUCCEED = 1
#TOOL_CANCEL = 2
#TOOL_DATA_MODIFIED = 4
Structure FORMAT_GET_INFO
struct_size.DWORD
format_name.TCHAR[#BUF_SIZE]
func_header.TCHAR[#BUF_SIZE]
comment.TCHAR[#BUF_SIZE]
EndStructure
Structure TOOL_GET_INFO
struct_size.DWORD
title.TCHAR[#BUF_SIZE]
func_name.TCHAR[#BUF_SIZE]
cmd_line.TCHAR[#BUF_SIZE]
call_type.l
EndStructure
Structure TOOL_EXEC_INFO
struct_size.DWORD
call_type.l
*cmd_line.TCHAR
lParam.LPARAM
EndStructure
Structure DATA_INFO
struct_size.DWORD
type.l
*title.TCHAR
*format_name.TCHAR
format_name_hash.l
format.UINT
Data.HANDLE
size.DWORD
modified.FILETIME
*window_name.TCHAR
*plugin_string.TCHAR
plugin_param.LPARAM
*menu_title.TCHAR
free_title.BOOL
menu_icon.HICON
free_icon.BOOL
menu_bitmap.HBITMAP
free_bitmap.BOOL
menu_bmp_width.l
menu_bmp_height.l
param1.LPARAM
param2.LPARAM
*child.DATA_INFO
*Next.DATA_INFO
hkey_id.l
op_modifiers.UINT
op_virtkey.UINT
op_paste.l
EndStructure
Structure TOOL_DATA_INFO
struct_size.DWORD
*di.DATA_INFO
*child.TOOL_DATA_INFO
*Next.TOOL_DATA_INFO
EndStructure
Code: Select all
XIncludeFile "CLCLPlugin.pbi"
ProcedureDLL AttachProcess(Instance)
hInst = Instance
; dll_initialize() ; отключил инициализацию, так как там в принципе поиск рабочей папки CLCL и ini.
EndProcedure
ProcedureDLL DetachProcess(Instance)
; dll_uninitialize() ; отключил деинициализацию, так как она возвращает 1 в static BOOL (мы не знаем что это такое)
EndProcedure
ProcedureDLL AttachThread(Instance)
EndProcedure
ProcedureDLL DetachThread(Instance)
EndProcedure
ProcedureDLL get_tool_info_w(hWnd, index, tgi.TOOL_GET_INFO)
Select index
Case 0
tgi\title = "Conv" ; загрузить из ресурсов, так есть возможность легко и безболезненно поменять.
tgi\func_name = "Conv"
tgi\cmd_line = ""
ProcedureReturn 1
; Case
EndSelect
ProcedureReturn 0
EndProcedure
; ProcedureDLL dll_initialize()
; Дескриптор NULL вместо hInst указывает на поиск пути к исполняемому файлу вместо текущей библиотеки dll.
; найдите файл tool_clip.ini в той же папке, что и clcl.ini, кроме того clcl.exe
; Для режима выпуска (не переносимого приложения) установите ini_path в ту же папку, что и %LOCALAPPDATA%\CLCL\clcl.ini
; чтобы у нас был доступ на запись.
; Смотрите C:\home\wilf\Projects\Clcl.cvs\main.c строка 2234 и далее
; TODO: скопировать из старого расположения в dll-папку
; EndProcedure
; ProcedureDLL dll_uninitialize()
; ProcedureReturn 1
; EndProcedure
ProcedureDLL Conv(hWnd, tei.TOOL_EXEC_INFO, tgi.TOOL_DATA_INFO)
If tdi = 0
ProcedureReturn #TOOL_SUCCEED
EndIf
di.DATA_INFO = tdi\di
If di = 0 Or (di\type <> TYPE_ITEM And di\type <> TYPE_DATA)
ProcedureReturn #TOOL_ERROR
EndIf
SendMessage(hWnd, WM_ITEM_TO_CLIPBOARD, 0, @"проверка")
ProcedureReturn #TOOL_SUCCEED
EndProcedure