Вверх ↑
Этот топик читают: Гость
Ответов: 177
Рейтинг: 24
#1: 2015-01-04 23:59:57 ЛС | профиль | цитата

Вот задалась я такой мыслью; а можно ли каким нибудь способом получить данные о файле или ярлыке под курсором мыши?
Допустим данные об окне получить достаточно легко, а вот как быть с ярлыками?

code_34842.txt
карма: 1

0
файлы: 1code_34842.txt [631B] [160]
Ответов: 1343
Рейтинг: 31
#2: 2015-01-05 11:39:57 ЛС | профиль | цитата
Lora писал(а):
получить данные о файле или ярлыке под курсором мыши


а зачем это, может есть альтернативы для того что вы пытаетесь сделать.
------------ Дoбавленo в 11.39:
есть правда Тема о том как это можно сделать , но на скриптах, ну думаю не составит труда перевести скрипт Autoit в Hiasm, там всего то из важного надо отсылать сообщения окну.
карма: 2

0
Ответов: 177
Рейтинг: 24
#3: 2015-01-05 13:11:10 ЛС | профиль | цитата
Rysik писал(а):
а зачем это, может есть альтернативы для того что вы пытаетесь сделать.


На самом деле я делала опознавание окна под курсором. И сделала это достаточно быстро. А вот в процессе создания схемы возник интерес, а возможно ли распознавать и ярлыки на рабочем столе? Просто любопытство!
------------ Дoбавленo в 13.11:
Lora писал(а):
есть правда Тема о том как это можно сделать , но на скриптах, ну думаю не составит труда перевести скрипт Autoit в Hiasm, там всего то из важного надо отсылать сообщения окну.


Хмм, а есть способы запихнуть такой скрипт в схему hiasm? Я думаю очень интересны штучки можно будет делать с таким компонентом!!! У меня фантазия уже разыгралась неимоверно!!!
карма: 1

0
Ответов: 4630
Рейтинг: 749
#4: 2015-01-05 13:23:28 ЛС | профиль | цитата
Ярлыки на Рабочем столе находятся в окне типа ListView. Особенностью этого окна есть то, что получить свойства его элементов (например, надпись) может только тот процесс, который владеет данным окном. Единственный способ обойти это - отдельными функциями выделить память в чужом процессе, послать сообщение для получения нужной информации с помещением в указанную память, считать её содержимое и затем освободить. Что и делается по указанной ссылке. Достаточно нестандартно по сравнению с работой с другими типами окон путем посылки сообщений.

Обычными сообщениями можно получить некоторые общие свойства данного окна, например, количество элементов.

Lora, посмотри здесь, вроде есть готовые решения: [url]forum.html?q=3&p=271222#p271222[/url]
карма: 26

0
Ответов: 8926
Рейтинг: 823
#5: 2015-01-05 15:10:02 ЛС | профиль | цитата
Netspirit, а если в проводнике в Desktop-е мышку навести на ярлык, то, зараза, показывает в примечании расположение файла, ведь знает же!
карма: 19

0
Ответов: 4630
Рейтинг: 749
#6: 2015-01-05 16:23:19 ЛС | профиль | цитата
А с чего б ему не знать? В ярлыке есть путь к файлу, можно получить любые сведения. Сам отображает значки, сам и знает, над каким находится курсор. Тут суть в том, как стороннему приложению получить информацию из ListView.

карма: 26

0
Ответов: 177
Рейтинг: 24
#7: 2015-01-05 17:23:33 ЛС | профиль | цитата
Netspirit писал(а):
Lora, посмотри здесь, вроде есть готовые решения: forum.html?q=3&p=271222#p271222


что-то у меня не очень получается.

Я установила компонент Fbsl: http://hiasm.com//getfile/26850
Запихнула в папку с программой Fbsl.dll
Скопировала внутрь скрипт от Rysik. вот: http://forum.script-coding.com/viewtopic.php?id=5609

И ничего...

Вот такая схема у меня получилась:
code_34843.txt

Наверно я где-то что-то недопоняла или перепутала!
карма: 1

0
Ответов: 4630
Рейтинг: 749
#8: 2015-01-05 19:11:48 ЛС | профиль | цитата
Вот модифицированная последняя схема от andrestudio из той темы: code_34844.txt
Хендл нужно узнать с помощью какой-нибудь утилиты анализа окон (например, InqSoft Window Scanner). Либо использовать соответствующие компоненты для поиска окна.
карма: 26

0
файлы: 1code_34844.txt [9.1KB] [578]
Ответов: 5227
Рейтинг: 587
#9: 2015-01-05 20:10:40 ЛС | профиль | цитата
Чёт ваще туго соображаю причём тут Autoit и Fbs (разные скриптовые движки) большая надежда на Netspirit т.к промашек не даст, а моя голова того -> поглощает H2O
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 177
Рейтинг: 24
#10: 2015-01-05 21:36:40 ЛС | профиль | цитата
andrestudio писал(а):
Чёт ваще туго соображаю причём тут Autoit и Fbs (разные скриптовые движки) большая надежда на Netspirit т.к промашек не даст, а моя голова того -> поглощает H2O


Мдяяя! А я думала всё попроще будет. Печалька совсем....
карма: 1

0
Ответов: 1841
Рейтинг: 369
#11: 2015-01-05 23:05:25 ЛС | профиль | цитата
http://www.williballenthin.com/forensics/shellbags/
Как вариант
карма: 1
0
Ответов: 758
Рейтинг: 112
#12: 2015-01-06 14:16:08 ЛС | профиль | цитата
Вот мой пример получения названия активной иконки под курсором (последней выделенной)
Разработан по мотивам Статьи
Add(MainForm,2953706,245,70)
{
Width=462
Height=34
}
Add(InlineCode,13953824,196,70)
{
WorkPoints=#20:doGetLastActivePopup|
EventPoints=#20:onGetLastActivePopup|
DataPoints=#1:H|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|42:uses Windows, Messages, Kol, Share, Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|5: |9: public|17: H:THI_Event;|36: onGetLastActivePopup:THI_Event;|70: procedure doGetLastActivePopup(var _Data:TData; Index:word); |5: end;|0:|14:implementation|0:|4:type|18: LV_ITEM = record|15: mask: UINT;|19: iItem: Integer;|22: iSubItem: Integer;|16: state: UINT;|20: stateMask: UINT;|23: pszText: PWideChar;|24: cchTextMax: Integer;|20: iImage: Integer;|19: lParam: LPARAM;|21: iIndent: Integer;|60: |22: iGroupId: Integer;|43: cColumns: Integer;{ tile view columns }|21: puColumns: PUINT;|140: |25: //piColFmt: PInteger;|62: //iGroup: Integer;{ readonly. only valid for owner data. }|6: end;|0:|42:procedure THiAsmUnit.doGetLastActivePopup;|5:const|19: cchTextMax=255;|3:var|17: Win: THandle;|32: vItem, nTextLength: Integer;|20: LVItem: LV_ITEM;|22: pLVItem: ^LV_ITEM;|19: pszText: PChar;|24: svText: ShortString;|2: |21: vProcessId: UInt;|22: vProcess: Integer;|23: vPointer: ^Integer;|20: dwWriten: DWORD;|5:begin|27: // Поиск рабочего стола|52: Win := FindWindow('Progman', 'Program Manager');|55: Win := FindWindowEx(Win, 0, 'SHELLDLL_DefView', 0);|63: Win := FindWindowEx(Win, 0, 'SysListView32', 'FolderView');|38: // Получаем процесс рабочего стола|47: GetWindowThreadProcessId(Win, @vProcessId);|67: vProcess := OpenProcess(PROCESS_ALL_ACCESS, false, vProcessId);|4: |61: //vItemCount := SendMessage(Win, LVM_GETITEMCOUNT, 0, 0);|4: |49: // Выделяем в нем память под текстовый буффер|101: pszText := VirtualAllocEx(vProcess, nil, cchTextMax, MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|49: // Выделяем в нем память под структуру LVITEM|106: pLVItem := VirtualAllocEx(vProcess, nil, SizeOf(LV_ITEM), MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);|26: // Заполняем структуру|41: ZeroMemory(@LVItem, SizeOf(LV_ITEM));|29: LVItem.mask := LVIF_TEXT;|31: LVItem.pszText := @pszText;|36: LVItem.cchTextMax := cchTextMax;|25: LVItem.iSubItem := 0;|4: |52: vItem := SendMessage(Win, LVM_GETHOTITEM, 0, 0);|4: |44: // Пишем ее в память удаленного процесса|95: if not WriteProcessMemory(vProcess, pLVItem, @LVItem, SizeOf(LV_ITEM), dwWriten) then Exit;|78: nTextLength := SendMessage(Win, LVM_GETITEMTEXT, vItem, Integer(pLVItem));|4: |23: // Читаем результат|36: ZeroMemory(@svText, cchTextMax);|83: ReadProcessMemory(vProcess, LVItem.pszText, @svText[1], nTextLength, dwWriten);|5: |4: |4: |68: //vItemCount := SendMessage(Win, LVM_GETITEMTEXT, vItem, tItem);|55: //ListView_GetItemText(Win, vItem, 0, Text, 256);|4: |57: _hi_OnEvent(onGetLastActivePopup, PChar(@svText[1]));|4: |54: VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);|26: CloseHandle(vProcess);|9:end; |0:|4:end.|
link(onGetLastActivePopup,2953706:doCaption,[])
}
Add(Timer,9968603,147,70)
{
Interval=500
link(onTimer,13953824:doGetLastActivePopup,[])
}

Код не оптимальный - надеюсь гуру inline помогут. (Для каждого считывания запускается новый процесс )
Также, непонятно где хранится сама ссылка
------------ Дoбавленo в 14.16:
Да забыл сказать что иконки берутся с рабочего стола
карма: 1

0
Ответов: 4630
Рейтинг: 749
#13: 2015-01-06 17:44:09 ЛС | профиль | цитата
miver писал(а):
Для каждого считывания запускается новый процесс
Не запускается, а открывается для чтения/записи в его адресное пространство.
карма: 26

0
Ответов: 2059
Рейтинг: 132
#14: 2015-01-06 19:38:43 ЛС | профиль | цитата
Чего-то я наверное не догоняю.
У меня 7 стоит.
При наведении на иконку и так появляется всплывающая подсказка (жёлтенькая с чёрненькими буковками).
Там отображается путь, или информация из "свойства".
А схемка не подаёт визуальных признаков жизни.
Может быть на точку H:THI_Event надо подать хендл?
Что надо сделать и что должно получиться?
карма: 6

0
Ответов: 1343
Рейтинг: 31
#15: 2015-01-06 20:23:51 ЛС | профиль | цитата
miver писал(а):
Вот мой пример получения названия активной иконки под курсором (последней выделенной)


отлично работает на XP...
выдаёт имена файлов при наведении на них.
карма: 2

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)