Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.11.29;
Скачать: CL | DM;

Вниз

рабочий стол 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
9-1195943145
Тул
2007-11-25 01:25
2015.11.29
GLScene Как с помощью компонента TGLCustomBitmapFont вывести текс


15-1428565202
ВладОшин
2015-04-09 10:40
2015.11.29
Чудеса какие то в отладке


15-1428347344
Кто б сомневался
2015-04-06 22:09
2015.11.29
Для чего браузеры создают множество процессов?


15-1428496087
Pavelnk
2015-04-08 15:28
2015.11.29
Какой размер экрана телефонов


15-1428130841
brother
2015-04-04 10:00
2015.11.29
получить иконки из imageres.dll