PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Операции с выделенными файлами (?)


Операции с выделенными файлами (?)

Сообщений 1 страница 5 из 5

1

Задача:
1. Пользователь выбирает 5 файлов в папке, жмёт хоткей, получает архив этих файлов в той же папке.
2. Тоже самое но не обязательно архив, это может быть другая команда.

Техническая реализация:

вариант 1, использовать ранее обсуждаемую DLL, каким то образом вызвав пункт меню, или вызвать функцию внутри DLL. Но не так всё просто с вызовом функции, там работает внутренний механизм связанный с реестром, просто вызвать функцию не получится. Аналогично имя пункта меню может быть разное, поэтому выслать активацию меню и выбор пункта по букве не универсальное решение.

вариант 2, используя программу TrueLounchBar, которая регистрирует хоткей, запустить исполняемый файл написанный на PureBasic, который высылает хоткей Ctrl + Insert, копируя список в буфер обмена. Но как оказалось список в специальном формате, и если прога CLCL или AutoIt3 понимает этот формат и преобразовывает его в текст, то функция GetClipboardText() не понимает этот формат, надежда получить список файлов в виде текста, который потом разделить на список по символу переноса не оправдалась. Либо нужно создать аналог GetClipboardText() но для файлового дескриптора, либо найти функцию как в ранее указанной DLL, типа DragQueryFile_(), которая перечисляет выделенные файлы. Ну и далее уже используя ini-файл сделать исполняемый файл универсальный, который запустит батник или другой исполняемый файл и передаст ему файлы в ком-строке.

Человеку нужно именно удобство хоткей, а не вызов меню, так как если операция делается очень часто то вызов меню и поиск пункта напрягает, а если решить эту проблему, то получится универсальное решение для проводника для любых случаев.

Код:
EnableExplicit

; [url=http://purebasic.mybb.ru/viewtopic.php?id=905]SendKey[/url]
XIncludeFile "SendKey.pbi"

Global hWnd_Find

Structure CtrlClass
	Control.i
	Class.s
EndStructure


; Поиск элемента по ID и классу
Procedure enumChildren0(hwnd, *ctcl.CtrlClass)
	Protected classText$
	If hwnd
    If GetDlgCtrlID_(hwnd) = *ctcl\Control
    	classText$ = Space(256)
    	GetClassName_(hwnd, @classText$, 256)
    	If classText$ = *ctcl\Class
        hWnd_Find = hwnd
        ProcedureReturn 0
    	EndIf
    EndIf
    ; Debug classText$
    ; Debug GetDlgCtrlID_(hwnd)
    ; OutputDebugString_(Str(GetDlgCtrlID_(hwnd)) + #TAB$ + classText$ + #TAB$ + Text$)
	EndIf
	ProcedureReturn 1
EndProcedure


Procedure GetActiveWindowExporer()
	Protected hWnd, classText$, Text$, Pos
	Protected ctcl.CtrlClass
	ctcl\Control = 1001
	ctcl\Class = "ToolbarWindow32"
	classText$ = Space(256)
	;   Protected RECT.RECT

	hWnd = GetForegroundWindow_()
	;   GetWindowRect_(Handle,@RECT.RECT)
	GetClassName_(hWnd, @classText$, 256)
	If classText$ = "CabinetWClass"
    ; OutputDebugString_(classText$)
    EnumChildWindows_(hWnd, @enumChildren0(), @ctcl)
    Text$ = Space(256)
    GetWindowText_(hWnd_Find, @Text$, 256)
    Pos = FindString(Text$, ": ")
    If Pos
    	Text$ = Mid(Text$, pos + 2)
    EndIf
    If FileSize(Text$) = -2
    	; высылает хоткей Ctrl + Insert
    	SendKey(#VK_INSERT, #MOD_LCONTROL)
    	Delay(30)
    	Text$ = GetClipboardText()
    	MessageRequester("", Text$)
    EndIf
    OutputDebugString_(Text$)

    ; Debug classText$
    ; MessageRequester("", classText$)
	EndIf

EndProcedure

GetActiveWindowExporer()

Нашёл решение  с DragQueryFile_()

Готовая программа Com2Selfiles

Обновление
теперь ini-файл может содержать несколько секций, а через ком-строку в Com2Selfiles передаётся имя секции, которую использовать. Так получается одна программа и куча семплов/пресетов.

Отредактировано AZJIO (14.12.2022 09:53:32)

0

2

Обновление
Добавлен параметр ini-файла Time = 200, задержка между эмуляцией Ctrl+Ins и началом сбора файлов
Добавлен параметр ini-файла CtrlIns = 1. Выбор способа эмуляции 1= Ctrl + Insert, 0 = Ctrl + C
Добавлен параметр ini-файла Clear = 0 (по умолчанию 1) для ручного копирования файлов.
Очистка буфера перед хоткеем Ctrl+C, чтобы не допустить использование старого буфера обмена.
Добавлен параметр ini-файла Class2 = TTOTAL_CMD,CabinetWClass или классы окна других файловых менеджеров.

0

3

Это  видели?Ссылка
Ссылка2
ps:там вроде есть про ini и директории.

Отредактировано Sergeihik (14.12.2022 16:34:30)

0

4

Sergeihik
мне mk-soft уже XML предложил, так как позволяет структуры, списка, массивы, карты сохранять одним движением, не придумывая секции и формат, то есть сохранение типов, всё автоматом.

0

5

AZJIO написал(а):

мне mk-soft уже XML предложил

Лучше JSON. Меньше размер файла.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Операции с выделенными файлами (?)