Показать сообщение отдельно
Старый 24.05.2010, 03:42   #47
Alex.D.
Оператор ЭВМ
 
Регистрация: 02.11.2008
Сообщений: 27
Написано 12 полезных сообщений
(для 24 пользователей)
Ответ: Некорректная работа Blitz3D на win7.

Сообщение от SBJoker Посмотреть сообщение
1. Приложение может писать в собственную папку в локали пользователя, получать через винапи функцию, константа что-то вроде AppData, лень искать точное название.
Угу, можно из переменной среды дернуть или через shell32:

Function EnvironmentVariable$(name$)
	Local result$, length%, buffer%
	result = ""
	length = GetEnvironmentVariable(name, 0, 0)
	If length > 0 Then
		buffer = CreateBank(length)
		If buffer Then
			length = GetEnvironmentVariableA(name, buffer, length)
			While length > 0
				length = length - 1
				result = Chr(PeekByte(buffer, length)) + result
			Wend
			FreeBank(buffer)
		EndIf
	EndIf
	Return result
End Function

Const S_OK% = 0
Const MAX_PATH% = 260
Const CSIDL_APPDATA% = 26

Function FolderPath$(folder%)
	Local result$, buffer%, i%, b%
	result = ""
	buffer = CreateBank(MAX_PATH)
	If buffer Then
		If SHGetFolderPathA(0, folder, 0, 0, buffer) = S_OK Then
			For i = 0 To MAX_PATH - 1
				b = PeekByte(buffer, i)
				If b Then result = result + Chr(b) Else Exit
			Next
		EndIf
		FreeBank(buffer)
	EndIf
	Return result
End Function

Print EnvironmentVariable("APPDATA")
Print FolderPath(CSIDL_APPDATA)

WaitKey()

End
деклс:

.lib "kernel32.dll"
GetEnvironmentVariable%(name$, buffer%, length%):"GetEnvironmentVariableA"
GetEnvironmentVariableA%(name$, buffer*, length%)

.lib "shell32.dll"
SHGetFolderPathA%(window%, folder%, token%, flags%, buffer*)
ЗЫ
Лучше конечно библиотечку набросать, все же через банки как-то извращенски Ну и в либе можно будет юникодовый вариант дернуть и перевести в анси для блица.
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Alex.D. за это полезное сообщение:
Arles (24.05.2010), Arton (24.05.2010), BlackOut (24.05.2010), impersonalis (24.05.2010), Randomize (24.05.2010), SBJoker (24.05.2010)