Форум: "Прочее";
Текущий архив: 2015.11.29;
Скачать: [xml.tar.bz2];
Внизрабочий стол x64 винды под x32 программой Найти похожие ветки
← →
brother © (2015-03-23 18:02) [0]Всем доброго времени суток. Есть код получения надписи иконок рабочего стола:
...
Res := WriteProcessMemory(ProcessHandle, RemoteProcData, @Data, SizeOf(Data), PLongWord(nil)^); If not Res Then RaiseLastOSError;
SEndMessage(LV, LVM_GETITEMTEXT, I, LPARAM(@RemoteProcData^.Item));
...
понятно, что для x64 это работать не будет.
Можно ли как то извратиться и получить LVM_GETITEMTEXT под x32 приложением? может вынести это все в x64 библиотеку и подгрузить ее из x32 приложения?
← →
brother © (2015-03-23 18:03) [1]зы подобная проблемма: http://www.programmersforum.ru/showthread.php?t=77925
← →
Кто б сомневался © (2015-03-23 18:37) [2]Слушай, а может проще сделать?
Зайти в папку Desktop да забрать имена прямо с ярлыков через OLE?fLink: IShellLink;
function TShortcutWork.LoadLink(const ALinkPath: string): boolean;
var
vBuf: array [0..300] of char;
begin
Assert(ALinkPath <> "");
ResetFields;
Result := true;
try
OleCheck( (fLink as IPersistFile).Load(Pchar(ALinkPath), STGM_READ) );
TargetPath := GetRealPath(ALinkPath);
OleCheck( fLink.GetArguments(@vBuf[0], Length(vBuf)) );
if vBuf[0] <> #0 then // much faster if empty
Arguments := vBuf;
OleCheck( fLink.GetWorkingDirectory(@vBuf[0], Length(vBuf)) );
if vBuf[0] <> #0 then
WorkPath := vBuf;
except
Result := false;
end;
end;
← →
brother © (2015-03-23 18:40) [3]приношу извинения не скопировал все, что показывает проблемму:
SEndMessage(LV, LVM_GETITEMTEXT, I, LPARAM(@RemoteProcData^.Item));
SEndMessage(LV, LVM_GETITEMRECT, I, LPARAM(@RemoteProcData^.ItemRect));
те получаю связку: имя-расположение на рабочем столе...
← →
Кто б сомневался © (2015-03-23 18:40) [4]Точнее это даже не имена, а внутренности ярлыков. Имена ярлыков - это имена ярлыков :)
← →
brother © (2015-03-23 18:41) [5]ну кэпшн...
← →
brother © (2015-03-23 18:44) [6]те делаю виртуальный рабочий стол, надо получить расположения, иконки и кэпшены объектов рабочего стола
← →
brother © (2015-03-23 18:47) [7]эх, знать бы структуру ItemPos:
reg.OpenKey("Software\Microsoft\Windows\Shell\Bags\1\Desktop", false);
if reg.GetDataInfo("ItemPos1920x1080x96(1)", Info) then
begin
SetLength(Buffer, Info.DataSize);
Reg.ReadBinaryData("ItemPos1920x1080x96(1)", Buffer[0], Info.DataSize);
end;
былоб идеально...
← →
Кто б сомневался © (2015-03-23 18:51) [8]Я б сделал x64 exe с командной строкой - он еще пригодится в этом деле.
И оттуда бы перебрасывал к себе через WM_COPYDATA и не парился бы.
← →
brother © (2015-03-23 18:53) [9]вот видимо так и буду делать...
← →
Кто б сомневался © (2015-03-23 19:11) [10]
> И оттуда бы перебрасывал к себе через WM_COPYDATA и не парился
> бы.
Даже лучше через пайп - прям с консоли прочитать:
http://www.sql.ru/forum/887984/zapustit-s-delphi-konsolnoe-prilozhenie-i-schitat-ego-vyvod
← →
Кто б сомневался © (2015-03-24 20:07) [11]
> brother © (23.03.15 18:47) [7]
>
> эх, знать бы структуру ItemPos:
Не, структуру при желании можно разобрать, тем более она небольшая, это не проблема.
Просто она может легко поменяться в Win10 например.
← →
brother © (2015-03-25 04:15) [12][11] я честно пытался, как то там все "мутно"...
← →
Кто б сомневался © (2015-03-26 18:52) [13]
> brother © (25.03.15 04:15) [12]
>
> [11] я честно пытался, как то там все "мутно"...
Поискал бы хоть.
http://www.williballenthin.com/forensics/shellbags/
← →
brother © (2015-03-26 19:59) [14]афигеть! Честно искал, не нашел! Может заюзаю... большое спасибо!
← →
KSergey © (2015-03-27 09:58) [15]О! неужели я наконец-то узнал как и где хранится это долбанное расположение иконок рабочего стола?!
Вот спасибо! Меня 20 лет мучил этот вопрос
← →
Кто б сомневался © (2015-03-27 14:40) [16]
> Меня 20 лет мучил этот вопрос
Да ладно, тогда еще рабочий стол был деревянный.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2015.11.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c