Работа с ярлыками, формат файла арлыка
Здравствуйте, нужна помощь с написание проги на асме. Нужно написать программу чтоб выводила информацию о формате файла .lnk(ярлык) Как это можно сделать не используя интерфейсы. Пробовала через смещения т.е. высчитывать в hex но смогла только вывести рабочий киталог и путь к иконке, а нужно еще как отображается окно при старте приложения и сочетание горячих клавишь ну и сам номер иконки но я не могу понять где они находятся. Может кто знает подскажите! :confused:
спасибо за ссылки но то что меня интересовало я не нашла в документации я не совсем понимаю они советуют делать черз интерфейс IShellLink но я вообще незнаю как им пользоваться можно как нибудь по другому?
Вы, вообще, по ссылкам ходили? Хотя бы по первым двум. Нормально расписан формат .lnk безо всяких интерфейсов.
конечно ходила но я же написала что по этой документации не совсем поняла как сделать!
Если есть конкретные вопросы, пожалуйста.
Вы уж извините плохо разбираюь в этом можно поподробнее и как это будет выглядеть приметно?
http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf . Создаём файл *.LNK записывает туда данные согласно этому документу и смотрим что получилось. Если всё как надо, значит вы отлично усвоили этот формат.
смотрим этот документ
Цитата: Vov4ick
Создаём файл *.LNK, пишем в него что нужно согласно документации, закрываем файл.
Если есть конкретные вопросы, пожалуйста.
Если есть конкретные вопросы, пожалуйста.
что писать согласно документации не пойму напишите хоть один пример дальше попробую разобраться. Пожалуйста!
.model flat, stdcall
option casemap:none
include C:/masm32/include/windows.inc
include C:/masm32/include/kernel32.inc
include C:/masm32/include/user32.inc
include C:/masm32/include/masm32.inc
include C:/masm32/include/comdlg32.inc
includelib C:/masm32/lib/kernel32.lib
includelib C:/masm32/lib/user32.lib
includelib C:/masm32/lib/masm32.lib
includelib C:/masm32/lib/comdlg32.lib
.data
ofn OPENFILENAME <>
FilterString db "File format LNK (*.lnk)",0,"*.lnk",0,0
AppName db "Format LNK",0
FileError db "Error open",0
hCons dd 0
b1 db "Format LNK file: ",17h,0
b2 db 0ah,0
b3 db "Flags: ",20h,0
b5 db "File attributes: ",20h,0
b6 db "File length: ",20h,0
b7 db "Icon number: ",20h,0
b8 db "ShowWnd value: ",20h,0
b9 db "Hot key:",20h,0
b10 db "Patch to Icon: ",15h,0
b11 db "Rabochaya papka: ",17h,0
b12 db "Description: ",13h,0
buffer db 512 dup(?)
dwFileSize dd 0
hFile dd 0
.code
start:
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hCons,eax
mov ofn.lStructSize,SIZEOF ofn
mov ofn.lpstrFilter,OFFSET FilterString
mov ofn.lpstrFile, OFFSET buffer
mov ofn.nMaxFile, 512
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
invoke GetOpenFileName, offset ofn
.if eax!=TRUE
invoke MessageBox, 0, offset FileError,offset AppName,MB_OK+MB_ICONERROR
invoke ExitProcess,0
.endif
invoke CreateFile, offset buffer, GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
.if eax==INVALID_HANDLE_VALUE
invoke MessageBox, 0, offset FileError,offset AppName,MB_OK+MB_ICONERROR
invoke ExitProcess,0
.endif
mov hFile, eax
invoke GetFileSize,hFile,0
mov dwFileSize,eax
invoke ReadFile,hFile,offset mass,dwFileSize,offset cWritten,NULL
invoke CloseHandle, hFile
invoke ExitProcess,0
end start
вот этот кусок открывает файл формата lnk и в переменных написано какую инфу нужно вывести? что дальше делать чем пользоваться
ну так сдесь ничего и не написано
Katarinka, впринципе у вас есть все: создайте масси размером в 1024 байта (для надежности), ну а потом запихните туда файл спомощью функции ReadFile, ну а потом последователь читайте из массива необходимыее для вас поля и выводите их хоть спомощью MessageBox)
спасибо!! попробую!)
invoke ReadFile,hFile,offset mass,dwFileSize,offset cWritten,NULL
читаем файл затем чтобы вывести сообщение можно использовать функцию WriteConsole примерно так:
invoke WriteConsole,hCons,addr b3,7,addr cWritten,NULL
вот а как теперь вывести то что там лежит? Помогите пожалуйста!
нужно выводить массив mass, а вы выводите cWritten. Но только это вам ни чего не даст, нужно в начале обработать сам массив, т.е прочитать из него необходимые поля, преобразовать их, и только после этого выводить эти поля)
ндаааааа, не понять мне похоже как это сделать ну спасибо за помощь)