Страница: 1 |
Страница: 1 |
Вопрос: Как сохранить данные в .ехе файле?
Добавлено: 20.11.06 17:42
Автор вопроса: appolinari
Имется ли возможнозность сохранить данные в ехешник?
Например у меня есть форма с кучей текстовых окошек. И я хочу, чтобы тот текст, который я ввожу в текстовые окна сохранялся при выходе из программы. Не сильно хочется запоминать всё в отдельный файл и считывать при запуске.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 20.11.06 19:27
А лучше именно так.
Номер ответа: 2
Автор ответа:
appolinari
Вопросов: 10
Ответов: 30
Профиль | | #2
Добавлено: 20.11.06 21:15
В смысле сохранить в отдельный файл и считывать при запуске программы? А чем это лучше?(простите ламера великодушно!!!)
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 20.11.06 22:34
Ну а чем хуже?
Номер ответа: 4
Автор ответа:
Shark
ICQ: 284036855
Вопросов: 35
Ответов: 155
Web-сайт:
Профиль | | #4
Добавлено: 20.11.06 23:10
Этот файл можно легко подредактировать, перенести куда нибудь, программу удалить, а файл останется. Когда ты, исправил ошибку в программе сделал новый exe заново вводить не надо
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 20.11.06 23:29
Ну ок, на те...
' |
' = = = = = = = M A D E B Y H A C K E R = = = = = = |
' icq: 334479038, mail: no_detect@mail.ru |
'==========================================================|
Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Function FindResourceEx Lib "kernel32" Alias "FindResourceExA" (ByVal hModule As Long, ByVal lpType As String, ByVal lpName As String, ByVal wLanguage As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function LockResource Lib "kernel32" (ByVal hResData As Long) As Long
Private Declare Function SizeofResource Lib "kernel32" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Private Declare Function LoadResource Lib "kernel32" (ByVal hInstance As Long, ByVal hResInfo As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Sub WriteRES(sFile As String, sData As String, sType As String, sName As String)
Dim h As Long
h = BeginUpdateResource(sFile, 0)
Call UpdateResource(h, sType, sName, 1049, ByVal sData, Len(sData)) '1049 - язык
Call EndUpdateResource(h, 0)
End Sub
Public Function ReadRES(sFile As String, sType As String, sName As String) As String
Dim txt As String
Dim hgRes As Long
hLib = LoadLibrary(sFile)
hRes = FindResourceEx(hLib, ByVal sType, ByVal sName, 1049)
hLRes = LoadResource(hLib, hRes)
hgRes = LockResource(hLRes)
lenRes = SizeofResource(hLib, hRes)
txt = Space(lenRes)
CopyMemory ByVal txt, ByVal hgRes, lenRes
FreeLibrary hLib
ReadRES = txt
End Function
exe в который записуешь не должен быть запущен!
Хотя вы неправы... Нормальные люди держат настройки в ini файлах, или в реестре... Но писать в exe - изврат...
Номер ответа: 6
Автор ответа:
appolinari
Вопросов: 10
Ответов: 30
Профиль | | #6
Добавлено: 21.11.06 07:53
возможнозно вы правы.A куда этот .ini лучше спрятать,так чтобы глаза не мозолил?
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 21.11.06 09:15
Тем что в работающий exe ты не сможешь внести изменнеия, и тем что у тебя может не оказаться прав вообще писать туда куда ты хочешь!
Писать нужно в специальн опредназначеные для этого папки - вроде, Documents And Settings\UserName\ApplicationData - не конкретно такой путь, а как-то через переменные окружения или АПИ нужно узнавать куда писать, я сам не совсем хорошо это помню - нужно посмотреть Guidance.
Так у тебя будет гарантия, что туда, куда ты собираешься писать, у тебя будет доступ (если ну будет, то юзер сам себе злобный буратина и значит у него и так весь софт глючит).
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 21.11.06 23:04
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 21.11.06 23:14
Как? А в ресурсы? (пример выше )
Ну я понял что в ресурсы, но что, они изменяются в РАБОТАЮЩЕМ EXE??? Отказываюсь в это верить!