Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2012, 10:35   #1
Sambon_
Новичок
Джуниор
 
Регистрация: 28.08.2012
Сообщений: 2
Восклицание Функция SHGetSpecialFolderPath дубль 2

Я полный нуб в Pascal и функциях, так что...

У меня есть вот такая вот такой код для BAT'ника:
Код:
java -Xms1024m -Xmx1024m -cp "%APPDATA%\.minecraft\bin\*" 
-Djava.library.path="%APPDATA%\.minecraft\bin\natives" net.minecraft.client.Minecraft "Player" 78.46.135.94:25565
Я выразил эту команду на Pascal так:

Код:
ShellExecute(Form2.Handle, nil, 'java', 
'-Xms1024m -Xmx1024m -cp .\.minecraft\bin\* -Djava.library.path=.\.minecraft\bin\natives 
net.minecraft.client.Minecraft "Player"',
 PChar(SHGetSpecialFolderLocation(0, CSIDL_APPDATA, pidl)), SW_RESTORE);
Java открывается, а потом сразу же закрывается. Вопрос: что не так и почему не работает?

Последний раз редактировалось rpy3uH; 13.09.2012 в 15:42.
Sambon_ вне форума Ответить с цитированием
Старый 28.08.2012, 11:21   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Может так
Код:
ShellExecute(Form2.Handle, nil, 
'java -Xms1024m -Xmx1024m -cp .\.minecraft\bin\* -Djava.library.path=.\.minecraft\bin\natives net.minecraft.client.Minecraft 
"Player"', nil, 
PChar(SHGetSpecialFolderLocation(0, CSIDL_APPDATA, pidl)), SW_RESTORE);
Какая у Вас ОС? Про получение стандартных путей в различных версиях Windows GunSmoker писал у себя в блоге

Последний раз редактировалось rpy3uH; 13.09.2012 в 15:43.
astecenko вне форума Ответить с цитированием
Старый 28.08.2012, 11:46   #3
Sambon_
Новичок
Джуниор
 
Регистрация: 28.08.2012
Сообщений: 2
По умолчанию

Windows 7. Код который дали не заработал
Sambon_ вне форума Ответить с цитированием
Старый 28.08.2012, 17:55   #4
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Посмотрите статью от GunSmoker-а, и возьмите оттуда ф-цию получения путей к специальным папкам GetSpecialFolderLocation (ссылку я дал выше). Ф-ция SHGetSpecialFolderLocation в Win7 работать не будет, соответственно в качестве рабочего каталога у Вас что-то некорректное, как в этом случае ведет себя Ваша java-программа мне не ведомо, но может быть по-этому и не работает.
astecenko вне форума Ответить с цитированием
Старый 28.08.2012, 18:29   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
SHGetSpecialFolderLocation
она и не нужна. ENVIROMENT VARIABLES для этого придуманы.

Код:
function ExpandEnvironmentVar(AStr: string): string;
var
  Buff: array[0..MAX_PATH] of Char;
  rSize: DWORD;
begin
  rSize := ExpandEnvironmentStrings(PChar(aStr), Buff, SizeOf(Buff));
  Result := Copy(Buff, 1, rSize);
end;
пример:
Код:
var sAppDataPath:string;
begin
 sAppDataPath:= ExpandEnvironmentVar('%APPDATA%');
 
end;
Человек_Борща вне форума Ответить с цитированием
Старый 29.08.2012, 20:35   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

А куда 78.46.135.94:25565 пропало?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.08.2012, 20:58   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

"PChar(SHGetSpecialFolderLocati on" - о, да это ж вообще ультра-код :D (подсказка: SHGetSpecialFolderLocation возвращает HRESULT)

Надо вот так:

Код:
uses
  ShlObj;

function GetSpecialFolderLocation(const AFolder: Integer): String;
var
  FolderPath: PChar;
begin
  FolderPath := AllocMem((MAX_PATH + 1) * SizeOf(Char));
  try
    SetLastError(Cardinal(SHGetFolderPath(0, AFolder, 0, 0, FolderPath)));
    Win32Check(GetLastError = ERROR_SUCCESS);
    Result := FolderPath;
  finally
    FreeMem(FolderPath);
  end;

  if Result <> '' then
    Result := IncludeTrailingPathDelimiter(Result);
end;

...

ShellExecute(..., PChar(GetSpecialFolderLocation(CSIDL_APPDATA)), ...);
Цитата:
Ф-ция SHGetSpecialFolderLocation в Win7 работать не будет
Неправда, будет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция SHGetSpecialFolderPath FaTaL Общие вопросы Delphi 3 11.02.2010 13:13
Дубль Гис плагин ildusfm Фриланс 1 06.12.2009 12:06
Вопрос по Делфи (дубль 2) MasterX Общие вопросы Delphi 4 06.03.2009 21:43