Размер
AHK: Определить процесс выделенного файла и закрыть его (Страница 1 из 2)
Play

AHK: Определить процесс выделенного файла и закрыть его (Страница 1 из 2)

Доброго времени суток . Помогите определить процесс выделенного файла и закрыть его . Приведённый ниже скрипт работает, на активное окно.

2 Ответ от teadrinker 2014-03-08 10:43:11
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А какой конкретно файл — exe, скрипт, или другой какой?

3 Ответ от Ядрён 2014-03-08 15:40:17 (изменено: Ядрён, 2014-03-08 15:42:04)
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Здравствуйте, а можно два варианта и exe и ahk. Но если очень трудно, то только exe.

4 Ответ от teadrinker 2014-03-08 17:57:46
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Сегодня не получится уже, завтра.

5 Ответ от Ядрён 2014-03-08 18:06:51
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Сегодня не получится уже, завтра.

Завтра , значит завтра.

6 Ответ от teadrinker 2014-03-09 20:21:45
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Так примерно, но особо не тестировал:

Работает со множественным выделением.

7 Ответ от Ядрён 2014-03-09 22:58:37
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Здравствуйте teadrinker ваш скрипт не работает.

8 Ответ от teadrinker 2014-03-09 23:02:55
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А как вы пробовали?

9 Ответ от Ядрён 2014-03-09 23:18:54 (изменено: Ядрён, 2014-03-09 23:32:34)
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Не работает с ярлыками программ и на рабочем столе не работает , а так работает. Большое спасибо и извините за путаницу. А можно как нибудь сделать что бы на рабочем столе работало?

10 Ответ от teadrinker 2014-03-09 23:28:49
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Не работает с ярлыками программ и на рабочем столе не работает

А, да, забыл предупредить. Посмотрю, как на рабочем столе можно путь получить.

11 Ответ от Ядрён 2014-03-09 23:33:33
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Не работает с ярлыками программ и на рабочем столе не работает

А, да, забыл предупредить. Посмотрю, как на рабочем столе можно путь получить.

Было бы неплохо если бы работало на рабочем столе.

12 Ответ от teadrinker 2014-03-10 02:05:47
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Вот так должно работать на рабочем столе и с ярлыками:

13 Ответ от Ядрён 2014-03-10 02:43:00
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Огромное вам спасибо teadrinker.Скрипт надо бы в коллекцию закинуть.

14 Ответ от teadrinker 2014-03-10 03:10:47
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Скрипт надо бы в коллекцию закинуть.

Не знаю, способ получения выделенных файлов с рабочего стола — посыл Ctrl + C — считается "кривым", но лучшего не обнаружил, может, подскажет кто.

15 Ответ от Ядрён 2014-03-10 03:46:45 (изменено: Ядрён, 2014-03-10 23:55:48)
  • Ядрён
  • Участник
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Скрипт надо бы в коллекцию закинуть.

Не знаю, способ получения выделенных файлов с рабочего стола — посыл Ctrl + C — считается "кривым", но лучшего не обнаружил, может, подскажет кто.

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

16 Ответ от многобанофф 2014-03-10 09:14:52
  • многобанофф
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]
Re: AHK: Определить процесс выделенного файла и закрыть его

Скрипт надо бы в коллекцию закинуть.

Не знаю, способ получения выделенных файлов с рабочего стола — посыл Ctrl + C — считается "кривым", но лучшего не обнаружил, может, подскажет кто.

Скорее всего напишу глупость, но самому немного интересно. При выделении файла на рабочем столе в c:\Documents and Settings\Username\Рабочий стол\ что-нибудь меняется? И если нет, то чем исчерпывается соответствие - только наличием объектов?

17 Ответ от teadrinker 2014-03-11 14:35:37
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Выделение объекта в окне имеет отношение только к отображению этого объекта в данном окне, на сам объект и на отображение его в других окнах никак не влияет.

18 Ответ от serzh82saratov 2014-03-21 23:41:09
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Скрипт надо бы в коллекцию закинуть.

Не знаю, способ получения выделенных файлов с рабочего стола — посыл Ctrl + C — считается "кривым", но лучшего не обнаружил, может, подскажет кто.

Мне такая библиотека помогает:

19 Ответ от teadrinker 2014-03-24 05:06:17
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Мне такая библиотека помогает

Не отличает ярлык на рабочем столе от обычного файла.

20 Ответ от stealzy 2014-03-24 18:50:50 (изменено: stealzy, 2014-03-25 18:38:12)
  • stealzy
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

определить процесс выделенного файла и закрыть его

Для ручного использования советую Unlocker 1.8.7 или IObitUnloker (может не знает человек)

21 Ответ от teadrinker 2014-03-24 19:13:17
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

stealzy, а как здесь Unlocker поможет?

22 Ответ от teadrinker 2014-03-25 08:34:03
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

У меня с Unlocker`ом так выглядит:

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

23 Ответ от serzh82saratov 2014-05-24 17:40:14
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Скрипт надо бы в коллекцию закинуть.

Не знаю, способ получения выделенных файлов с рабочего стола — посыл Ctrl + C — считается "кривым", но лучшего не обнаружил, может, подскажет кто.

Возможно придумал способ, но банально не могу проверить наличие %info% в %Selected%, у строк почему то разная длинна, и так и эдак перекодировал строки, не понятно.

24 Ответ от serzh82saratov 2014-05-24 23:25:03 (изменено: serzh82saratov, 2014-05-25 00:43:48)
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Без сравнения дат работает, по идее оно и не обязательно, повтора быть не должно. Определяет и папки и ярлыки. Активность или видимость окна Program Manager не требуется.

Но конечно очень любопытно, почему в контексте этого кода, тут ложь:

25 Ответ от teadrinker 2014-05-25 01:10:14
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

serzh82saratov, интересно, посмотрю подробнее и добавлю попозже.

26 Ответ от teadrinker 2014-05-25 03:31:27
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

не могу проверить наличие %info% в %Selected%, у строк почему то разная длинна

Там в ListSelected ещё какие-то непечатные символы добавлены перед датой и между её цифрами:

27 Ответ от serzh82saratov 2014-05-25 04:19:30
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Видимо в SysListView так забито.

28 Ответ от teadrinker 2014-05-25 13:57:29
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

В смысле, пробелы между строчками убрал?

29 Ответ от serzh82saratov 2014-05-25 14:05:35
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Убрал определение папки, лишнее получение объекта.Заменил Program Manager ahk_class Progman ahk_exe explorer.exe на более простое % "ahk_id" DllCall("GetShellWindow").Кстати может лучше так:

30 Ответ от teadrinker 2014-05-25 14:16:15
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Не принципиально, лишь бы работало. А что за "Win+D mode"? Там класс окна меняется?

31 Ответ от serzh82saratov 2014-05-25 14:25:13
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А что за "Win+D mode"? Там класс окна меняется?

Сначала сделал просто Program Manager ahk_class Progman ahk_exe explorer.exe.Потом заметил что если свернуть все окна кнопкой TrayShowDesktopButtonWClass1 справа внизу оно же Win+D, то не работает. Потом подсмотрел в библиотеке Explorer.Почему класс меняется - одну Биллу известно, сначала думал что задача определить хэндл ListView более тривиальна.

32 Ответ от teadrinker 2014-05-25 14:42:35
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Только что заметил, что objFolder.ParseName(A_LoopFileName) не все ярлыки видит. У меня есть один ярлык, созданный самой программой при установке (IE HTML Element Spy), его в упор не замечает.

33 Ответ от serzh82saratov 2014-05-25 14:47:44 (изменено: serzh82saratov, 2014-05-25 14:48:40)
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

В смысле его нет как файла в Loop, %A_Desktop%\*.*, 1, или GetDetailsOf пустое.И как он выглядит в ListSelected.

34 Ответ от teadrinker 2014-05-25 14:49:43
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Ага, точно, его нет в папке рабочего стола:

Зато он есть в папке C:\Users\Public\Desktop (общий рабочий стол):

Наверное, и её проверять нужно.

35 Ответ от serzh82saratov 2014-05-25 15:05:09
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его 36 Ответ от teadrinker 2014-05-25 15:20:33
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Ага, так работает.

37 Ответ от serzh82saratov 2014-05-25 15:22:29
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Не совсем, если 2 файла одинаковых в этих папках Сейчас подумаю.

38 Ответ от serzh82saratov 2014-05-25 15:32:17
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Если оба файла скрыты, то видимо ничего не поделаешь.

39 Ответ от teadrinker 2014-05-25 16:00:20
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Не совсем понял. Если они скрыты, то как их можно выделить?

40 Ответ от serzh82saratov 2014-05-25 19:05:32
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Я про атрибут "скрытый". Вообщем не важно. Можно всё таки добавить сравнение дат, останется только вероятность что одинаковые файлы изменены в одну секунду.

41 Ответ от teadrinker 2014-05-25 21:09:47
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Можно, придётся сравнивать дату по частям.

42 Ответ от serzh82saratov 2014-05-25 23:29:07 (изменено: serzh82saratov, 2014-05-25 23:29:42)
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Зачем по частям, можно привести ListSelected в "порядок", правда не очень симпатяшно:

43 Ответ от serzh82saratov 2014-05-25 23:44:34
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его 44 Ответ от serzh82saratov 2014-05-26 00:04:17 (изменено: serzh82saratov, 2014-05-26 00:45:40)
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Check the command list exposed to SAPI by Windows Explorer. This may be a good candidate to solve with a file association if explorer exposes verbs from file associations.

Anyway, if you want to launch a program to find currently selected desktop items, you can use IFolderView2::GetSelectedItem on the desktop shell view to get the selected indices, then call IShellItem::GetDisplayName with SIGDN_FILESYSPATH on each item from IFolderView2::GetItem. On XP you can try send the undocumented WM_GETISHELLBROWSER message to the desktop window, then call IShellFolders::GetDisplayName on the items returned from IShellFolderView::GetSelectedObject.

Но примера создания объекта IFolderView2, нигде не видел.

45 Ответ от teadrinker 2014-05-26 00:45:56
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его 46 Ответ от serzh82saratov 2014-05-26 00:47:40
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Смеёшься, нет конечно, на тебя вся надежда.

47 Ответ от teadrinker 2014-05-26 00:49:05
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его 48 Ответ от serzh82saratov 2014-05-26 12:38:39
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его 49 Ответ от teadrinker 2014-05-26 12:45:33
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Да нет, не поможет. То, о чём шла речь в той подсказке, не является "Scriptable Shell Objects". Это так называемые Raw Com-интерфейсы, использовать в скриптах которые можно только после некоторых танцев с бубнами. И я не уверен, что подсказка верная, никакой информации, как получить IFolderView2-интерфейс для рабочего стола не нашёл. Всё же, речь идёт о Shell-интерфейсах, а окно рабочего стола Shell-объектом не является, вроде.

50 Ответ от serzh82saratov 2014-05-26 13:40:37
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Странно что упоминаний про IFolderView2 нет на офф форуме. Здесь может по теме - http://www.autohotkey.com/board/topic/5 … ntry434509

51 Ответ от serzh82saratov 2014-05-26 13:44:11 (изменено: serzh82saratov, 2014-05-26 13:52:55)
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его 52 Ответ от serzh82saratov 2014-05-26 13:48:46
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Тут вроде тоже мучаются с IFolderView2.

53 Ответ от YMP 2014-05-26 14:04:00
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А зачем мучиться, если можно почитать описание интерфейса?

54 Ответ от serzh82saratov 2014-05-26 14:16:15
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

YMP Можете привести пример получения объекта IFolderView2, и работы с ним?

55 Ответ от teadrinker 2014-05-26 14:27:21
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Так там речь, я так понимаю, не об окне "Рабочий стол", а о папке "Рабочий стол". Может, я ошибаюсь, конечно.

56 Ответ от serzh82saratov 2014-05-26 14:29:30
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Тебе виднее, а по ссылке из #50 ничего?

57 Ответ от teadrinker 2014-05-26 14:32:56
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Ещё подробно не смотрел, но не похоже.

58 Ответ от serzh82saratov 2014-05-26 14:37:33
  • serzh82saratov
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А это какое то отношение может иметь http://msdn.microsoft.com/en-us/library … s.85).aspx? Может где то в памяти процесса искать.

59 Ответ от teadrinker 2014-05-26 14:40:55
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А зачем мучиться, если можно почитать описание интерфейса?

К сожалению, в описаниях интерфейса ничего не сказано, как его получать.

60 Ответ от YMP 2014-05-26 15:12:56
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Любой COM-объект имеет интерфейс IUnknown, а у него первый метод — QueryInterface, как раз для получения других интерфейсов.

61 Ответ от teadrinker 2014-05-26 15:25:45
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Так вопрос даже не столько в том, как его просто получить, а как привязать к конкретному объекту, в данном случае к окну рабочего стола (если это возможно, конечно).

62 Ответ от YMP 2014-05-26 15:50:22
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Что значит привязать?

63 Ответ от teadrinker 2014-05-26 16:02:48
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Нас сейчас интересует интерфейс IFolderView2. У него есть методы GetSelectedItem и GetSelection. Нужно, чтобы они отражали состояние объектов окна Рабочий стол.

64 Ответ от YMP 2014-05-26 18:14:53
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Да, это не скриптовый интерфейс. Кроме того он доступен только начиная с Висты. До этого использовался IShellFolderView, но он уже не работает в 7. В принципе методы можно вызывать через DllCall, но, конечно, возни больше, чем со скриптовыми объектами.

65 Ответ от teadrinker 2014-05-26 20:24:28
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

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

66 Ответ от YMP 2014-05-26 21:39:13
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Вот так вроде удаётся получить указатель на IFolderView2. Дальше копать пока не стал, спать охота.

67 Ответ от ypppu 2014-05-26 22:18:49
  • ypppu
  • Модератор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Ядрён сумел напрячь умы лучших AHK-кодеров форума!

68 Ответ от teadrinker 2014-05-26 23:11:07
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Дальше копать пока не стал, спать охота.

Мне тоже, уже завтра посмотрю.

69 Ответ от YMP 2014-05-27 09:36:42
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

Попробовал вызывать методы — возвращают E_FAIL. Причина пока непонятна.

70 Ответ от YMP 2014-05-27 13:22:21
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

В общем, это всё фигня, наверно. Просто новый экземпляр объекта создаётся. То же самое, как открыть одну папку в двух окнах Проводника. Если в одном окне что-то выделить, другое об этом ничего не узнает.

71 Ответ от teadrinker 2014-05-28 00:29:42
  • teadrinker
  • Администратор
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А ты вообще уверен, что вызывая

ты получаешь pShellFolder для окна рабочего стола, а не для папки "Рабочий стол"? И если да, то почему?

72 Ответ от YMP 2014-05-28 07:24:22 (изменено: YMP, 2014-05-28 07:29:45)
  • YMP
  • Разработчик
  • Неактивен
Re: AHK: Определить процесс выделенного файла и закрыть его

А что такое ShellFolder для окна Рабочего стола? Насколько я понял описательную часть, если программа хочет отобразить содержимое какой-то папки оболочки, она получает объект ShellFolder этой папки, создаёт окно и в нём отображает с помощью этого объекта содержимое папки. Вот это и делает Проводник на Рабочем столе.

Если ты в другом процессе (AutoHotkey) тоже получишь объект ShellFolder для этой папки, то это будет лично твой экземпляр объекта. Ты его можешь использовать для тех же целей, но никакой связи с тем экземпляром, что использует Проводник, у него нет, и, соответственно, тебе никак через него не узнать, что там у Проводника выделено. Поскольку в самой папке это выделение никак не отражается.

А если ты каким-то образом узнаешь указатель на объект, используемый Проводником, то что ты с ним будешь делать? Это адрес в адресном пространстве Проводника, а не в процессе AutoHotkey.

📎📎📎📎📎📎📎📎📎📎