Возникла даннная задача,но так и не смог разобраться как создаётся ярлык. немного поискав по форуму находил примеры,но так не смог сделать в нём автоматичекское определение папки автозагрузка. P.s исходник умер вместе с виртуалбоксом при пересносе винды из-за моего недосмотра. P.p.s нашёл другой
Jura спасибо. как получить положение самой папки автозагрузка,я разобрался: Код (Text): .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\shell32.inc include \masm32\include\ole32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\ole32.lib .data? buffer db 256 dup(?) .data var dd 0 text db "autostart folder is in:" .code start: invoke SHGetSpecialFolderLocation, 0, CSIDL_STARTUP, addr var .if eax==0 invoke SHGetPathFromIDList, var, addr buffer .if eax!=0 invoke MessageBox,0, addr buffer ,addr text,MB_OK .endif invoke CoTaskMemFree,var .endif invoke ExitProcess,0 end start проблема в другом,в силу малого опыта я не могу это совместить с тем кодом.
статьи про использование COM в masm32 \masm32\com\docs\ примеры использования COM в masm32 \masm32\com\examples\ конкретно создание ярлыка к программе \masm32\com\examples\shortcut\
как бы пример оттуда и весит в аттаче к первому сообщению... я к нему не могу прикрутить автоопределение папки автозагрузка для создания ярлыка...
shore это делается для автозапуска приложения ? Почему бы тогда не воспользоваца реестром ? Код (Text): format PE GUI 4.0 entry Main include 'win32a.inc' section '.data' data readable writeable szAutoName db 'fftp',0 exename db '\fftp.exe',0 szAutoPath db 'Software\Microsoft\Windows\CurrentVersion\Run',0 SystemDir db 260 dup(?) hKey dd ? section '.code' code readable executable proc Main invoke GetSystemDirectoryA,SystemDir,MAX_PATH invoke lstrcatA,SystemDir,exename invoke RegOpenKeyExA,HKEY_CURRENT_USER,szAutoPath,0,KEY_WRITE,hKey invoke lstrlenA,SystemDir invoke RegSetValueExA,[hKey],szAutoName,0,REG_SZ,SystemDir,eax invoke RegCloseKey,[hKey] invoke ExitProcess,0 endp section '.idata' import data readable library kernel,'KERNEL32.DLL',\ advapi,'ADVAPI32.DLL' import kernel,\ ExitProcess,'ExitProcess',\ GetSystemDirectoryA,'GetSystemDirectoryA',\ lstrlenA,'lstrlenA',\ lstrcatA,'lstrcatA' import advapi,\ RegOpenKeyExA,'RegOpenKeyExA',\ RegSetValueExA,'RegSetValueExA',\ RegCloseKey,'RegCloseKey' Программа добавляет в автозагрузку программу fftp.exe находящуюся в \Windows\system32\ , создает ключ в реестре fftp
fragment ресстром,можно,но не всегда программе дают доступ к реестру(нет прав доступа из-за групповой политики) да фолсы от антивируса есть шанс получить... а это самый легальный способ....
Так в чём проблема-то? Получить путь к папке Автозагрузка, как описано выше, соединить с именем ярлыка, потом взять функцию создания ярлыка из MakeLink.asm и воспользоваться ею.
Да что ж там сложного-то? Буквально пару строчек. Вот: Код (Text): invoke SHGetSpecialFolderLocation, 0, CSIDL_STARTUP, addr AutorunFolderID invoke SHGetPathFromIDList, AutorunFolderID, addr LinkPath invoke lstrcat, addr LinkPath, addr ShortCutName invoke CoInitialize, 0 invoke CoCreateLink, addr AppName, addr LinkPath invoke CoUninitialize где в LinkPath получаем путь к папке Автозагрузка, ShortCutName - имя ярлыка, AppName - имя программы, на которую создавать ярлык.
Jura спасибо. но скомпилированный файл,так не создаёт ярлык. Код (Text): .386 .model flat, stdcall option casemap :none include include\windows.inc include include\user32.inc include include\kernel32.inc include include\shell32.inc include include\ole32.inc include include\oleaut32.inc include com\include\oaidl.inc include com\include\shlobj.inc includelib lib\user32.lib includelib lib\kernel32.lib includelib lib\shell32.lib includelib lib\ole32.lib CoCreateLink PROTO :DWORD, :DWORD IPersistFile STRUCT DWORD IPersistFile_QueryInterface comethod3 ? IPersistFile_AddRef comethod1 ? IPersistFile_Release comethod1 ? IPersistFile_GetClassID comethod2 ? IPersistFile_IsDirty comethod1 ? IPersistFile_Load comethod3 ? IPersistFile_Save comethod3 ? IPersistFile_SaveCompleted comethod2 ? IPersistFile_GetCurFile comethod2 ? IPersistFile ENDS .data AutorunFolderID dd 0 ShortCutName db "MakeLink.lnk" AppName BYTE MAX_PATH DUP(?) LinkPath BYTE MAX_PATH DUP(?) hInstance HINSTANCE ? Pos DWORD ? .code start: invoke GetModuleHandle, NULL mov hInstance, eax invoke GetModuleFileName, NULL, ADDR AppName, MAX_PATH invoke lstrcpy, ADDR LinkPath, ADDR AppName mov edx, OFFSET LinkPath mov ecx, edx .REPEAT mov al, BYTE PTR [edx] .IF al == 92; "\" mov ecx, edx .ENDIF inc edx .UNTIL al == 0 mov BYTE PTR [ecx+1], 0 invoke lstrcpy, ADDR AppName, ADDR ShortCutName invoke SHGetSpecialFolderLocation, 0, CSIDL_STARTUP, addr AutorunFolderID invoke SHGetPathFromIDList, AutorunFolderID, addr LinkPath invoke lstrcat, addr LinkPath, addr ShortCutName invoke CoInitialize, 0 invoke CoCreateLink, addr AppName, addr LinkPath invoke CoUninitialize invoke ExitProcess,0 CoCreateLink PROC pszPathObj:DWORD, pszPathLink:DWORD LOCAL pwsz :DWORD LOCAL psl :DWORD LOCAL ppf :DWORD LOCAL hResult :DWORD LOCAL hHeap :DWORD .data CLSID_ShellLink GUID sCLSID_ShellLink IID_IShellLink GUID sIID_IShellLink IID_IPersistFile GUID {00000010bH, 00000H, 00000H, \ {0C0H, 000H, 000H, 000H, 000H, 000H, 000H, 046H}} .code invoke GetProcessHeap mov hHeap, eax invoke HeapAlloc, hHeap, NULL, MAX_PATH * 2 mov pwsz, eax invoke CoCreateInstance, ADDR CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, ADDR IID_IShellLink, ADDR psl mov hResult, eax test eax, eax .IF SUCCEEDED coinvoke psl, IShellLink, QueryInterface, ADDR IID_IPersistFile, ADDR ppf mov hResult, eax test eax, eax .IF SUCCEEDED coinvoke psl, IShellLink, SetPath, pszPathObj mov hResult, eax coinvoke psl, IShellLink, SetIconLocation, pszPathObj, 0 mov hResult, eax invoke MultiByteToWideChar, CP_ACP, 0, pszPathLink, -1, pwsz, MAX_PATH coinvoke ppf, IPersistFile, Save, pwsz, TRUE mov eax, hResult coinvoke ppf, IPersistFile, Release mov hResult, eax .ENDIF coinvoke psl, IShellLink, Release mov hResult, eax .ENDIF invoke HeapFree, hHeap, NULL, pwsz mov eax, hResult ret CoCreateLink ENDP end start
кстате вот http://lists.gnu.org/archive/html/dotgnu-pnet-commits/2003-12/msg00015.html парсер линков на сях
shore От имени администрации: Действительно, быдл замечены периодические глюки этого движка неизвестной природы, выражающиеся в кажущемся развоении/растроении/итд поста. Если присмотреться к времени и Post ID в ссылках, становится очевидно, что это один и тот же пост, просто отображенный несколько раз. В случае обнаружения такого поведения движка не требуется ничего делать, оно пропадает после перелогина или с течением времени. Так же, как и нет способа это исправить со стороны администрации. Выявлять причину бага на данный момент нет возможности ввиду недостатка свободного времени.
Может, вот так будет лучше: Код (Text): .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc include ole32.inc include shell32.inc include oaidl.inc include shlobj.inc includelib shell32.lib includelib kernel32.lib includelib ole32.lib CoCreateLink PROTO :DWORD, :DWORD IPersistFile STRUCT DWORD IPersistFile_QueryInterface comethod3 ? IPersistFile_AddRef comethod1 ? IPersistFile_Release comethod1 ? IPersistFile_GetClassID comethod2 ? IPersistFile_IsDirty comethod1 ? IPersistFile_Load comethod3 ? IPersistFile_Save comethod3 ? IPersistFile_SaveCompleted comethod2 ? IPersistFile_GetCurFile comethod2 ? IPersistFile ENDS .data AppName db MAX_PATH dup(0) LinkPath db MAX_PATH dup(0) ShortCutName db '\Shortcut.lnk',0 AutorunFolderID dd 0 .code start: invoke GetModuleFileName, 0, addr AppName, MAX_PATH invoke SHGetSpecialFolderLocation, 0, CSIDL_STARTUP, addr AutorunFolderID invoke SHGetPathFromIDList, AutorunFolderID, addr LinkPath invoke lstrcat, addr LinkPath, addr ShortCutName invoke CoInitialize,0 invoke CoCreateLink, addr AppName, addr LinkPath invoke CoUninitialize invoke ExitProcess, 0 CoCreateLink PROC pszPathObj:DWORD, pszPathLink:DWORD LOCAL pwsz :DWORD LOCAL psl :DWORD LOCAL ppf :DWORD LOCAL hResult :DWORD LOCAL hHeap :DWORD .data CLSID_ShellLink GUID sCLSID_ShellLink IID_IShellLink GUID sIID_IShellLink IID_IPersistFile GUID {00000010bH, 00000H, 00000H, \ {0C0H, 000H, 000H, 000H, 000H, 000H, 000H, 046H}} .code invoke GetProcessHeap mov hHeap, eax invoke HeapAlloc, hHeap, NULL, MAX_PATH * 2 mov pwsz, eax invoke CoCreateInstance, ADDR CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, ADDR IID_IShellLink, ADDR psl mov hResult, eax test eax, eax .IF SUCCEEDED coinvoke psl, IShellLink, QueryInterface, ADDR IID_IPersistFile, ADDR ppf mov hResult, eax test eax, eax .IF SUCCEEDED coinvoke psl, IShellLink, SetPath, pszPathObj mov hResult, eax coinvoke psl, IShellLink, SetIconLocation, pszPathObj, 0 mov hResult, eax invoke MultiByteToWideChar, CP_ACP, 0, pszPathLink, -1, pwsz, MAX_PATH coinvoke ppf, IPersistFile, Save, pwsz, TRUE mov eax, hResult coinvoke ppf, IPersistFile, Release mov hResult, eax .ENDIF coinvoke psl, IShellLink, Release mov hResult, eax .ENDIF invoke HeapFree, hHeap, NULL, pwsz mov eax, hResult ret CoCreateLink ENDP end start