Модераторы: bartram, Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реакция exe-щника на перетаскивание на него файла 
V
    Опции темы
BuShaRt
Дата 5.3.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Думаю не для кого не секрет, что в Windows (xp точно), при "перетаскивание", на пример, php скрипта на exe-шник NotePad++, автоматически происходит открытие этого скрипта в NotePad++.

Так вот, очень хотелось бы узнать, какой алгоритм при этом отрабатывается? Ведь по логике программа должна каким-то образом получить информацию (в данном случае путь к файлу) и, воспользовавшись им открыть этот файл. Т.е. обработчик такого события должен быть заранее заложен в программу.

Для чего мне это надо? У меня есть ARG-архиватор (хотя можно в примере привести даже RAR-архиватор), думаю API у них идентичны, если говорить о бинарниках. Я хочу сделать так, чтоб при перетаскивание файла на exe-шник или другой, доработанный файл архиватора, автоматически создавался архив с таким же именем, что и у архивируемого файла. В случае с ARG, есть возможность доработки когда т.к. код открытый.

Если кто к объяснению работы этих алгоритм предложение и конкретный пример реализации приведенной задачи, буду благодарен вдвойне. Так же не побрезгую качественным чтивом по этому вопросу.
PM MAIL   Вверх
bartram
Дата 5.3.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 12
Всего: 29



Цитата(BuShaRt @  6.3.2010,  01:53 Найти цитируемый пост)
Так вот, очень хотелось бы узнать, какой алгоритм при этом отрабатывается? Ведь по логике программа должна каким-то образом получить информацию (в данном случае путь к файлу) и, воспользовавшись им открыть этот файл. Т.е. обработчик такого события должен быть заранее заложен в программу.

Программа получает имя файлы в качестве первого переданного параметра. А винда этот параметр передает при перетаскивания файла на exe'шник. Вот поэтому получается, что
Цитата(BuShaRt @  6.3.2010,  01:53 Найти цитируемый пост)
при "перетаскивание", на пример, php скрипта на exe-шник NotePad++, автоматически происходит открытие этого скрипта в NotePad++.




--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
BuShaRt
Дата 6.3.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Цитата(bartram @  5.3.2010,  23:57 Найти цитируемый пост)
Программа получает имя файлы в качестве первого переданного параметра. А винда этот параметр передает при перетаскивания файла на exe'шник. Вот поэтому получается, что


Я могу ошибаться, но полагаю, что имя файла совсем скудная информация для обработки и моя версия про путь к файлу, больше похожа на правду. Если так, получается надо переписывать исходный код программы?
PM MAIL   Вверх
bartram
Дата 6.3.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 12
Всего: 29



Цитата(BuShaRt @  6.3.2010,  02:06 Найти цитируемый пост)
Я могу ошибаться, но полагаю, что имя файла совсем скудная информация для обработки и моя версия про путь к файлу, больше похожа на правду.

Вам только кажется, что передается только имя файла, на самом деле и путь тоже передается ;-)

Добавлено через 35 секунд
Цитата(BuShaRt @  6.3.2010,  02:06 Найти цитируемый пост)
Если так, получается надо переписывать исходный код программы? 

Вы о чем?


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
BuShaRt
Дата 6.3.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Я о третьем абзаце, как это реализовать?
PM MAIL   Вверх
jhonyxakep
Дата 6.3.2010, 04:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

Репутация: 3
Всего: 8



Цитата(BuShaRt @  5.3.2010,  23:53 Найти цитируемый пост)
Для чего мне это надо? У меня есть ARG-архиватор (хотя можно в примере привести даже RAR-архиватор), думаю API у них идентичны, если говорить о бинарниках. Я хочу сделать так, чтоб при перетаскивание файла на exe-шник или другой, доработанный файл архиватора, автоматически создавался архив с таким же именем, что и у архивируемого файла. В случае с ARG, есть возможность доработки когда т.к. код открытый.

Батник написать можноsmile 
%1 1-ый переданный аргумент, если хочется архива с таким же именем, то надо на параметр, с выходным файлом(архивом) передать путь, архив положится в ту же папку, только надо заставить архиватор всегда прибавлять свое расширение (*.rar и тд)
PM MAIL ICQ   Вверх
BuShaRt
Дата 6.3.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Ясно, в первом переданном аргументе мы имеем путь к файлу и можем написать следующий пакетный файл, учитывая что бинарник ARJ лежит в корне диска C.

Код

cd c:\
arj a test.arj %1
pause


Пол дела сделано, теперь встает вопрос, как узнать конкретно имя передаваемого файла, причем желательно без расширения, ведь передавать в качестве имени архива путь к файлу как-то не корректно.

Добавлено через 5 минут и 50 секунд
Пока разбирался понял уже точно как это работает, после прочтения статьи с сайта System Engineering. 
Получается имя файла мы так просто не получим. Пойду искать как bat-ник может работать со строками.

Добавлено через 12 минут и 19 секунд
Еще накопал встроенные в Windows справочники по командным строкам. (открываются через выполнить)

XP Prof "hh ntcmds.chm"  
XP home "hh ntcmds.chm::/ntcmds.htm"
w2k "hh windows.chm::/ntcmds.htm" 
PM MAIL   Вверх
BuShaRt
Дата 6.3.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Прочел, если верить источнику, полный список команд, среди них не нашел не одного намека на работу со строками. Пойду думать, как решить этот вопрос написанием консольного приложения на Delphi.
PM MAIL   Вверх
BuShaRt
Дата 6.3.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Вот что у меня получилось.
С rar-ом работает отлично, а вот с arj бывают проблемы: порой отказывается работать в некоторых каталогах. На сколько я понимаю это проблема самого arj.

Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  path, filename, command : string;

function ExtractFileNameEx(FileName: string; ShowExtension: Boolean): string;
//Функция взята с http://www.delphisources.ru/pages/faq/base/extract_file_name.html

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение имени файла из пути без или с его расширением.

Зависимости: нет
Автор:       VID, [email protected], ICQ:132234868, Махачкала
Copyright:   VID
Дата:        18 апреля 2002 г.
***************************************************** }

//ВХОДНЫЕ ПАРАМЕТРЫ
//FileName - имя файла, которое надо обработать
//ShowExtension - если TRUE, то функция возвратит короткое имя файла
// (без полного пути доступа к нему), с расширением этого файла, иначе,возвратит
// короткое имя файла, без расширения этого файла.
var
  I: Integer;
  S, S1: string;
begin
  //Определяем длину полного имени файла
  I := Length(FileName);
  //Если длина FileName <> 0, то
  if I <> 0 then
  begin
    //С конца имени параметра FileName ищем символ "\"
    while (FileName[i] <> '\') and (i > 0) do
      i := i - 1;
    // Копируем в переменную S параметр FileName начиная после последнего
    // "\", таким образом переменная S содержит имя файла с расширением, но без
    // полного пути доступа к нему
    S := Copy(FileName, i + 1, Length(FileName) - i);
    i := Length(S);
    //Если полученная S = '' то фукция возвращает ''
    if i = 0 then
    begin
      Result := '';
      Exit;
    end;
    //Иначе, получаем имя файла без расширения
    while (S[i] <> '.') and (i > 0) do
      i := i - 1;
    //... и сохраням это имя файла в переменную s1
    S1 := Copy(S, 1, i - 1);
    //если s1='' то , возвращаем s1=s
    if s1 = '' then
      s1 := s;
    //Если было передано указание функции возвращать имя файла с его
    // расширением, то Result = s,
    //если без расширения, то Result = s1
    if ShowExtension = TRUE then
      Result := s
    else
      Result := s1;
  end
    //Иначе функция возвращает ''
  else
    Result := '';
end;


begin
  //Определяем путь каталога сбора архивов. В данном случае это каталог, в котором находиться консольное приложение.
  path := ExtractFilePath(ParamStr(0));
  //Определяем имя файла
  filename := ExtractFileNameEx(ParamStr(1), FALSE);
  //Составляем команду со всеми необходимыми параметрами (следует предварительно поместить бинарник в system32
  command := 'rar a -e "' + path + filename + '.rar" "' + ParamStr(1) + '"';
  //Запуск команды
  WinExec (PChar(command), SW_SHOW);
  readln(path);
end.


Это сообщение отредактировал(а) BuShaRt - 6.3.2010, 16:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Windows"
December
bartram
Akella

Запрещается!

1. Обсуждать взлом и делиться кряками

2. Способствовать созданию и распространению вирусов

  • Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Windows | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.