Бред

Ответить в тред Ответить в тред
Check this out!
Аноним 29/03/21 Пнд 18:34:02 2434156611
image.png 958Кб, 1000x667
1000x667
image.png 1488Кб, 1200x800
1200x800
14084127web1Get[...].jpg 192Кб, 1200x800
1200x800
Снимок.JPG 108Кб, 1343x909
1343x909
Здравствуйте.

Мне сказали, что это анонимный форум, где собираются программисты.
Мне сказали, что правильно здороваться здесь словами САП ДВАЧЬ.

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

Документация майкрософтов говорит мне, что нужно работать с winuser.h, SystemParametersInfo и ICONMETRICSA.

Но я не понимаю, как это сделать.

До этого я работал с С++ на уровне "написать утилиту, программно меняющую wallpaper."
(Там тоже использовалось SystemParametersInfo).

Знаю, что вроде есть некие хендлы к каждому элементу интерфейса, но как получить к ним доступ - не понимаю.

Хелп.
Аноним 29/03/21 Пнд 18:38:44 2434159272
bump();
Аноним # OP 29/03/21 Пнд 18:47:07 2434164133
bump();
Аноним 29/03/21 Пнд 18:50:44 2434166424
>>243415661 (OP)
>Мне сказали, что это анонимный форум, где собираются программисты.

Уже давно нет. засилие детей и быдла. тебе в 2008-2012
Аноним # OP 29/03/21 Пнд 18:59:49 2434171795
>>243416642
А если попробовать на башорг написать?
Там вроде тоже были программисты.
Когда-то они многое знали и умели - говорят, они даже умели пропатчить kde2 под freebsd.

Не троллю, я пришёл сюда наудачу, вдруг мне встретится кто-то знающий. Документация майков написана дюже нечеловеколюбиво. Или я не умею её читать.
Аноним # OP 29/03/21 Пнд 19:10:41 2434178616
>>243417679
Тян, помоги мне решить задачу по программированию.
Иначе ты бесполезная пизда и вообще ТНН БИЧ.
Аноним # OP 29/03/21 Пнд 19:19:28 2434183727
bump(); //памагити
Аноним # OP 29/03/21 Пнд 19:27:53 2434188798
бамп. ну что же вы...
Аноним 29/03/21 Пнд 19:28:07 2434188899
>>243418372
Бро, тут же одни дауны. Иди туда где прогеры сидят. VC какой-нить, Хабр, я думаю даже от сраных групп в ВК можно получить больше пользы, чем от двача.
Аноним 29/03/21 Пнд 19:38:20 24341956210
Аноним 29/03/21 Пнд 19:39:52 24341966211
>>243417179
В меру упитанно, молодец.
Аноним # OP 29/03/21 Пнд 19:42:04 24341980812
>>243418889
Ну вдруг.
Я же регулярно вижу здесь кучу сеньоров-помидоров с 300к в пикосекунду.
Вдруг не все они программируют в html кодах.
Аноним 29/03/21 Пнд 19:42:36 24341984413
Аноним 29/03/21 Пнд 19:43:30 24341991814
>>243417179
Вчера такой же приходил, дебич
Аноним # OP 29/03/21 Пнд 19:48:12 24342022715
Снимок.JPG 117Кб, 1655x941
1655x941
>>243419844
Спасибо, бро.

Но это делфи, а я ищу С++.
У дельфятников своя особая магия, я в неё не умею.

К тому же это решение подходит только для версий винды от 95 до 2000-й.
То есть даже для ХР уже не подойдёт.
Не говоря уже о семёрке.
Аноним # OP 29/03/21 Пнд 19:50:01 24342036316
image.png 7034Кб, 3000x2025
3000x2025
>>243419662
>молодец
Холодец.

Помоги мне найти координаты ярлыка.
Аноним 29/03/21 Пнд 19:50:59 24342043917
>>243415661 (OP)
Вам нужен вишмастер последней версии. Решает проблему на ура.
Аноним # OP 29/03/21 Пнд 19:52:24 24342053318
>>243420439
Солнышко, я утилиты на крестах пишу. Ты рамсы не попутал ли вишмастеров мне советовать?
Аноним 29/03/21 Пнд 19:53:24 24342060519
>>243420533
А че ты мозги ебёшь? Про файловые дискрипторы слышал?
Аноним 29/03/21 Пнд 19:54:15 24342065620
bef261478460164[...].jpg 14Кб, 300x222
300x222
>>243420605
И как тут всрались дескрипторы?
Аноним 29/03/21 Пнд 19:54:35 24342068421
>>243420605
В операционной системе Windows для получения дескриптора файла его необходимо открыть функцией CreateFile. Затем полученный дескриптор (или handle) можно использовать для работы с этим файлом. Если это драйвер, то дескриптор будет использоваться в функции DeviceIoControl.
Аноним 29/03/21 Пнд 19:55:13 24342072822
>>243420656
через костыли хуярь братан как обычно
Аноним 29/03/21 Пнд 19:56:07 24342079223
bump();
Аноним 29/03/21 Пнд 19:57:10 24342087324
При создании файловой системы создаются также и структуры данных, содержащие информацию о файлах. Каждый файл имеет свой индексный дескриптор, идентифицируемый по уникальному номеру (часто называемому 'i-номером' или 'айнодом'), в файловой системе, в которой располагается сам файл.

Индексные дескрипторы хранят информацию о файлах, такую как принадлежность владельцу (пользователю и группе), режим доступа (чтение, запись, запуск на выполнение) и тип файла. Существует определённое число индексных дескрипторов, которое указывает максимальное количество файлов, допускаемое определённой файловой системой. Обычно при создании файловой системы примерно 1 % её объёма выделяется под индексные дескрипторы.

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

Номер индексного дескриптора заносится в таблицу индексных дескрипторов в определённом месте устройства; по номеру индексного дескриптора ядро системы может считать содержимое айнода, включая указатели данных и прочий контекст файла.
Номер индексного дескриптора файла можно посмотреть используя команду ls -i, а команда ls -l покажет информацию, хранящуюся в индексном дескрипторе.
Файловые системы, не относящиеся к традиционным ФС UNIX, такие как ReiserFS, могут обходиться без таблицы индексных дескрипторов, но должны хранить аналогичную информацию схожим способом, обеспечивающим эквивалентную функциональность. Такие данные могут называться статистической информацией, по аналогии со stat — системным вызовом, поставляющим информацию программам.

Имена файлов и содержимое каталогов:

индексные дескрипторы не хранят имена файлов, только информацию об их содержимом;
каталоги в Unix являются списками 'ссылочных' структур, каждая из которых содержит одно имя файла и один номер индексного дескриптора;
ядро должно просматривать каталог в поисках имени файла, затем конвертировать это имя в соответствующий номер индексного дескриптора, в случае успеха;
содержимое файлов располагается в блоках данных, на которые ссылаются индексные дескрипторы.

Представление ядром этих данных в памяти называется struct inode (структурным айнодом) (в ОС Linux). В BSD системах используется термин vnode, буква v в котором указывает на виртуальную файловую систему уровня ядра.
Аноним 29/03/21 Пнд 19:58:50 24342097925
Аноним 29/03/21 Пнд 20:00:15 24342109126
В бтрфс вообще удобно там метаинформацию можно прямо у конкретных файлов прочитать. Но ты же пользуешься спермос
Аноним 29/03/21 Пнд 20:03:10 24342127327
>>243420873
Так.
Файловые системы. Особенно файловые системы UNIX.
Это всё конечно, хорошо.

Но как это поможет мне запихнуть в SystemParametersInfoA function (winuser.h) вот эту аццкую поебень:

typedef struct tagICONMETRICSA {
UINT cbSize;
int iHorzSpacing;
int iVertSpacing;
int iTitleWrap;
LOGFONTA lfFont;
} ICONMETRICSA, PICONMETRICSA, LPICONMETRICSA;

Аноним 29/03/21 Пнд 20:04:50 24342137928
>>243421273
Множество программ, используемых системными администраторами в операционной системе (ОС) UNIX, часто использует номера индексных дескрипторов для обозначения файлов. Популярная встроенная программа проверки жестких дисков fsck или команда pfiles могут послужить в данном случае примерами, так как у них есть необходимость естественным образом конвертировать номера индексных дескрипторов в пути файлов и обратно. Это может быть дополнено использованием программы поиска файлов find с ключом -inum или командой ls с соответствующим ключом (которым на большинстве платформ является -i).

https://ru.wikipedia.org/wiki/Inode
Аноним 29/03/21 Пнд 20:05:08 24342139729
>>243421091
Какую, блядь, метаинформацию, и у каких, блядь, файлов ты собрался читать?
Мне нужно вызвать функцию, которая должна вернуть мне значения Х и Y конкретного отдельно взятого ярлыка на рабочем столе.
В каком файле ты собрался это искать?
Аноним 29/03/21 Пнд 20:06:27 24342148830
>>243421397
Ну так ебеныть, ты блядь как его вызывать хочешь? У него есть свой айнод.
Аноним 29/03/21 Пнд 20:07:53 24342158831
>>243421379
Мне не нужно работать с файлами.

Мне нужно заставить функцию SystemParametersInfoA каким-то образом обратиться к ярлыку на столе и узнать его координаты.
Аноним 29/03/21 Пнд 20:08:51 24342166732
>>243421588
Ты либо дурак, либо прикалываешься. Как он нахуй тебе его найдет?
Аноним 29/03/21 Пнд 20:10:40 24342179533
Ладно короче я съебал бухать с подружкой, а ты не пукай
Аноним 29/03/21 Пнд 20:10:50 24342181034
image.png 454Кб, 1343x909
1343x909
>>243421667
Ты ОПпост не смотрел?
Вглядись в пикчу, она супер-стронгли-релейтед.

Внезапно, винда умеет оперировать такой информацией.
Аноним 29/03/21 Пнд 20:13:14 24342199235
>>243421810
Тупорылый скот, если тебе надо этот ярлык он же сука файл находить на рандомных машинах, так вот попробуй его в метаинформации искать
Аноним # OP 29/03/21 Пнд 20:18:35 24342232936
>>243421992
Ярлыку не нужно искать файл. Ярлык, запускающий мою программу, должен ссылаться сам на себя. На свои собственные координаты. Ему не нужно себя искать где-то на компе.

Теоретически, можно привязать координаты происходящей после запуска магии к координатам курсора мыши. Но это костыли, и довольно убогие, и я так не хочу, мне так не нравиться.
Аноним # OP 29/03/21 Пнд 20:22:27 24342260637
>>243421992
Представь себе программу, которая делает нечто визуальное именно в месте (в координатах на экране), где находится ярлык этой программы. После клика на этот ярлык.
Аноним # OP 29/03/21 Пнд 20:34:54 24342345438
bump(); / ? /
Аноним 29/03/21 Пнд 20:37:17 24342363139
>>243415661 (OP)
Да никак, скорее всего. Отображением и сортировкой ярлаков занимается собственная программа винды (вроде shell32.dll) и открытого апи к ней нет. Нужно будет ее ломать, что бы выудить значения переменных. iconmenricsa, это просто структура, которая содержит параметры настройки ярлыков - отступы, шрифт подписи и т.п. и изменения в ней действую на всю сетку ярлыков.
Может быть возможно с помощью какого-нить cheat engine найти в памяти адрес координат конкретного ярлыка и потом сделать указатель на этот адрес. Но тогда это будет работать только на твоем компе.
Аноним 29/03/21 Пнд 20:39:31 24342377540
Учи html+css
Аноним # OP 29/03/21 Пнд 20:43:20 24342403641
>>243423775
Пнятненько.

Шутки шутить изволите?
Аноним 29/03/21 Пнд 20:54:19 24342469542
Вот, почитай, как ломали explorer.exe, что бы понять, почему он 20 сек ярлыки сортирует. Просто для понимания того, в какую залупу надо залезть, что бы получить координаты ярлыков. Это нифига не открытый апи.
https://habr.com/ru/company/vdsina/blog/544218/
Аноним # OP 29/03/21 Пнд 20:54:24 24342470043
Снимок.JPG 122Кб, 1651x606
1651x606
>>243423631
Да не. Вроде есть возможность.
Только я пока не понимаю, как к ней подобраться.
Аноним 29/03/21 Пнд 20:55:49 24342478544
>>243415661 (OP)
Кодить на крестах - удел пидарасов.
Аноним # OP 29/03/21 Пнд 20:58:27 24342495745
>>243424785
Кодить пидарасов - удел на крестах.
Школоло, ты взрослого дяденьку троллить решил?
Аноним # OP 29/03/21 Пнд 21:08:49 24342563846
>>243423631
Смотри. На делфях же как-то делают ребята!
Почему мы, сишники, не можем делать так же?

Должен быть, должен быть способ!

Цитата:



Можно и без всяких хуков и библиотек:
////////////////////////////////////////////////////////////////////////////////
//
//
// Unit Name : RemoteSysListView32
// Purpose : Демо работы с удаленным SysListView32
// Author : Александр (Rouse_) Багель
// Copyright : © Fangorn Wizards Lab 1998 - 2007
// Version : 1.01
// Home Page : http://rouse.drkb.ru
// ********
//

program RemoteSysListView32;

{$APPTYPE CONSOLE}

uses
Windows,
SysUtils,
CommCtrl;

var
hwndRemoteSysListView: HWND = 0;
hProcess: THandle = 0;
dwProcessID: DWORD = 0;
dwBytesWriten: DWORD;
nItemCount: Integer = 0;
I, nTextLength: Integer;
cchTextMax: Integer = 255;
plviRemoteLVItem: PLVItem = nil;
lviRemoteLVItem: LV_ITEM;
pszText: PChar = nil;
svText: ShortString;
ARect: TRect;
pRemoteRect: Pointer = nil;

function GetFirstChild(hwndValue: HWND): HWND;
begin
Result := GetWindow(hwndValue, GW_CHILD);
end;

function Translate(Value: String): String;
begin
SetLength(Result, Length(Value));
AnsiToOem(@Value[1], @Result[1]);
end;

begin
// Ищем SysListView32 рабочего стола
hwndRemoteSysListView := GetFirstChild(GetFirstChild(FindWindow("ProgMan", nil)));
if hwndRemoteSysListView = 0 then ExitProcess(GetLastError);

// Получаем количество элементов (ярлыков на рабочем столе)
nItemCount := ListView_GetItemCount(hwndRemoteSysListView);

// Получаем ID процесса, которому принадлежит найденное окно
GetWindowThreadProcessId(hwndRemoteSysListView, &dwProcessID);
if dwProcessID = 0 then ExitProcess(GetLastError);

// Открываем процесс
hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwProcessID);
if hProcess = 0 then ExitProcess(GetLastError);

// Выделяем в нем память под текстовый буффер
pszText := VirtualAllocEx(hProcess, nil, cchTextMax,
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if GetLastError <> 0 then ExitProcess(GetLastError);

// Выделяем в нем память под структуру LVITEM
plviRemoteLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if GetLastError <> 0 then ExitProcess(GetLastError);

// Заполняем структуру
ZeroMemory(@lviRemoteLVItem, SizeOf(LV_ITEM));
lviRemoteLVItem.mask := LVIF_TEXT;
lviRemoteLVItem.pszText := pszText;
lviRemoteLVItem.cchTextMax := cchTextMax;

// Пишем ее в память удаленного процесса
if not WriteProcessMemory(hProcess, plviRemoteLVItem, @lviRemoteLVItem,
SizeOf(LV_ITEM), dwBytesWriten) then ExitProcess(GetLastError);

// Выделяем в нем память под структуру TRect
pRemoteRect := VirtualAllocEx(hProcess, nil, SizeOf(TRect),
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if GetLastError <> 0 then ExitProcess(GetLastError);

// Получаем текст со всех элементов
for I := 0 to nItemCount - 1 do
begin
// Отправляем сообщение с указателем на выделенный буффер под LVITEM
nTextLength := SendMessage(hwndRemoteSysListView, LVM_GETITEMTEXT,
I, Integer(plviRemoteLVItem));

// Читаем результат
ZeroMemory(@svText, cchTextMax);
ReadProcessMemory(hProcess, lviRemoteLVItem.pszText,
@svText[1], nTextLength, dwBytesWriten);

// Чтобы получить координаты каждого элемента нужно подготовить структуру
ZeroMemory(@ARect, SizeOf(TRect));
ARect.Left := LVIR_ICON;
if not WriteProcessMemory(hProcess, pRemoteRect, @ARect,
SizeOf(TRect), dwBytesWriten) then ExitProcess(GetLastError);

// Посылаем сообщение для получения координат каждого элемента
SendMessage(hwndRemoteSysListView, LVM_GETITEMRECT,
I, Integer(pRemoteRect));

// Читаем результат
ReadProcessMemory(hProcess, pRemoteRect,
@ARect, SizeOf(TRect), dwBytesWriten);

Writeln(Translate(PChar(@svText[1])));
Writeln(Translate(
Format("- координаты: Left = %d, Top = %d, Right = %d, Bottom = %d",
[ARect.Left, ARect.Top, ARect.Right, ARect.Bottom])));

end;

// Освобождаем ранее выделенную память
VirtualFreeEx(hProcess, pszText, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, plviRemoteLVItem, 0, MEM_RELEASE);

// Закрываем описатель процесса
CloseHandle(hProcess);

Readln;
end.
Аноним # OP 29/03/21 Пнд 21:13:29 24342597047
>>243423631
Глубоко копают.

I will write a sample for you to demonstrate how to get the desktop icon locations.
First, actually the desktop is a large ListView, if you use SPY++ to see the handle of the desktop, you will find that there is a window with the title Program Manager, under which is another window of SHELLDLL_DefView type without title, below it is a window of SysListView32 type with caption of FolderView. So, we can use the FindWindow and FindWindowEx API to get the ListView which host the desktop icons, and use SendMessage API to send LVM_GETITEMPOSITION message to get the icon positions, however, since each process has its own memory, we can't steal program's memory directly from one process to another, we need some trick, we can allocate memory in the address space of the desktop ListView and read from that, this can be done by VirtualAllocEx() API. Now, the problem is to get the process handle of the ListView, we can use GetWindowThreadProcessId API to get the PID of the desktop window process, and use OpenProcess() to get a handle to the process.
Аноним # OP 29/03/21 Пнд 21:22:42 24342663648
Бампий пресвятой
Аноним 29/03/21 Пнд 21:22:51 24342665349
>>243425638
Ну так хули, здесь идет граб данных окна. Подключение к окну "эксплорер" и пиздинг его данных. Это, походу, какая-то старая запись, не факт что сейчас сработает. Когда-то в винде была такая архитектура, что любой процесс, это окно, со своим ID. Я не работаю с винапи, но мне кажется, что это уже давно не так. Ну, а если и так, то я помню, что когда-то (лет 12 назад) делал тоже самое с помощью стандартных инструментов визуал студии. У нее есть в меню какие-то утилиты для обнаружения окон, их ID и т.п. Ну были, по крайней мере 12 лет назад. Я с тех пор на с++ и не писал ничего, не знаю, что там сейчас и как.

Как по мне, так проще свой рабстол написать и можешь пиздячить в него что душе угодно. Поставишь в автозапуск и все.
Аноним # OP 29/03/21 Пнд 21:33:13 24342746650
Путь-к-папке-ав[...].png 629Кб, 1000x800
1000x800
>>243426653
Ладно. Кароч. Я тебе расскажу саму суть своей идеи.

Вот смотри. Есть у винды семёрки значки в быстром запуске.
Я хочу, чтобы при клике на один из этих значков разворачивалась ещё одна панель быстрого запуска, вертикальная.

Чтобы оптимизировать быстрый запуск.

Существующие сейчас решения мне не нравятся. Одно уёбищней другого.

Вот и вижу я только одну возможность - написать такое самому.

При этом я не хочу переписывать весь рабочий стол - всё прочее меня вполне устраивает.

Типа вот так чтоб могло быть:
Аноним 29/03/21 Пнд 21:59:21 24342953251
Бампий великомученицкий.

ОП, плашка потеряна, теперь в треде не будет ни одного сообщения с плашкой ОПа
Аноним 29/03/21 Пнд 21:59:47 24342956252
Аноним 29/03/21 Пнд 22:04:43 24342990153
>>243429562
Грешновато это всё - дрочить и тогдалие.

ОП недавно ради практики написал на джаве граббер, выкачивающий весь визуальный контент выбранного фап-треда. Да, я знаю, что уже существуют решения с похожим функционалом. Задача была именно написать такое своими руками.
Аноним 29/03/21 Пнд 22:25:25 24343127254
bump();
Аноним 29/03/21 Пнд 22:35:03 24343197255
Бамп равноапостольский.
Аноним 29/03/21 Пнд 22:42:10 24343248656
>>243415661 (OP)
давно не смотрел, забыл уже эту ботву. в какой-то винде это был просто listview и иконки шевелились через его апи.
а дальше хз - там оно вроде через com дергалось, не было прямых простых функций.
ну или отреверси explorer.exe и посмотри че там и как внутри.
Аноним 29/03/21 Пнд 22:58:15 24343362357
>>243425638

Что за хуйня здесь происходит?

мимо php senior developer
Аноним 29/03/21 Пнд 23:04:31 24343407558
>>243433623
Ты сеньёр, ты и скажи, что здесь происходит.
Аноним 29/03/21 Пнд 23:08:55 24343441159
Так, я оп, я устал, я мухожук спать.
Пропади всё пропадом! Сгорел сарай - гори и хата!
Аноним 29/03/21 Пнд 23:10:01 24343449660
Аноним 29/03/21 Пнд 23:16:23 24343495361
>>243434496
Чё сказать-то хотел?
Тебе, убогонькому, невдомёк, что люди увлекающиеся программированием иногда допиливают утилиты под свои нужды?
В стандартной панели быстрого запуска виндоуз7 отсутствует возможность создавать папки ярлыков (как например в анройде).
Отсутствует такая возможность искаропки.
Вот я и решил её запилить.
Аноним 29/03/21 Пнд 23:23:11 24343544062
Настройки X
Ответить в тред X
15000
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов