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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2009, 21:48   #1
VVVadim
Пользователь Подтвердите свой е-майл
 
Аватар для VVVadim
 
Регистрация: 28.03.2007
Сообщений: 60
По умолчанию Application.ExeName на винапи

Привет всем. Если не трудно подскажите плиз аналог Application.ExeName на винапи. Заранее спасибо!
VVVadim вне форума Ответить с цитированием
Старый 09.02.2009, 21:51   #2
goblinyara
Форумчанин
 
Аватар для goblinyara
 
Регистрация: 02.01.2009
Сообщений: 340
По умолчанию

хмм... ну насколько я знаю - paramstr(0)... но на чистом винапи я не писал ещё, так что не знаю, к чему точно относится эта процедура
DelphiWorld 6. Скачай, поставь, и будет тебе счастье=)
Программирование, как и любовь -- одно слово, за которым скрывается бесконечное множество занятий.
goblinyara вне форума Ответить с цитированием
Старый 09.02.2009, 21:53   #3
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

и без WinApi в делфи встроена функция ParamStr()
с индексом ноль она возвращяет имя модуля.



.. немного опаздал
ViktorXP вне форума Ответить с цитированием
Старый 09.02.2009, 21:55   #4
VVVadim
Пользователь Подтвердите свой е-майл
 
Аватар для VVVadim
 
Регистрация: 28.03.2007
Сообщений: 60
По умолчанию

Пасиба!!! (блин ответ короткий пришлось всякую лабуду писать
VVVadim вне форума Ответить с цитированием
Старый 09.02.2009, 22:27   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Читаем MSDN очень внимательно
Код:
var
  Chars: array[0..255] of Char;
begin
  FillChar(Chars, SizeOf(Chars), 0);
  GetModuleFileName(HInstance, Chars, SizeOf(Chars));
  MessageBox(0, PCHAR(String(Chars)), 'Application.ExeName', 0);
end;
BOBAH13 вне форума Ответить с цитированием
Старый 09.02.2009, 22:42   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,568
По умолчанию

Цитата:
Сообщение от ViktorXP Посмотреть сообщение
и без WinApi в делфи встроена функция ParamStr()
с индексом ноль она возвращяет имя модуля.
ParamStr (0) может вернуть и не правильный путь, можно запустить программу, передав в ParamStr (0) всё, что угодно.
Arigato вне форума Ответить с цитированием
Старый 09.02.2009, 22:55   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Врятли это реально. Коммандная строка:

myprogram.exe -g -df

Три параметра... програмаа - 1й (он же нулевой) параметр, дальше 2й и 3й... если укажите 1й параметр что-то другое то и программа ваша не запустится
BOBAH13 вне форума Ответить с цитированием
Старый 10.02.2009, 00:00   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,568
По умолчанию

Цитата:
Врятли это реально.
Почему-то мне кажется, что это реально, но не везде. Например, я не смог этого добиться, возможно, из-за того, что стоит SP2.
Вот, что видим в хэлпе:
Цитата:
ParamStr(0) returns the command used to execute the program, without parameters (for example, ./myprogram). This behavior is dependent on information returned by the shell program and may not be consistent among all shells.
Неоднозначная запись. Я написал такую программку для тестов:
Код:
program Project2;

uses
  Dialogs;

var
  I: Integer;
  Str: string;

begin
  Str := '';
  for I := 0 to ParamCount do
    Str := Str + ParamStr (I) + ' ';
  ShowMessage (Str);
end.
А вот, какая попытка была предпринята:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ProcessInfo: TProcessInformation;
  StartUpInfo: TStartupInfo;
begin
  if OpenDialog1.Execute then
  begin
    FillChar (StartUpInfo, SizeOf (StartUpInfo), 0);
    StartUpInfo.cb := SizeOf (StartUpInfo);
    StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartUpInfo.wShowWindow := SW_SHOWNORMAL;
    CreateProcess (PChar (OpenDialog1.FileName), 'C:\WINDOWS\NOTEPAD.EXE the1st', nil, nil, False, 0,
      nil, 'C:\WINDOWS\', StartUpInfo, ProcessInfo);
  end; {if}
end;
Но выдавал он всё равно полный путь к ехе-файлу. Но ведь вторым параметром мы явно указываем все передаваемые параметры, начиная с 0, хотя, в итоге, он всё равно принимает значение полного пути и имени ехе-файла.
Может в других версиях ОС и удастся сделать подмену.

Последний раз редактировалось Arigato; 10.02.2009 в 00:03.
Arigato вне форума Ответить с цитированием
Старый 10.02.2009, 08:48   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от VVVadim Посмотреть сообщение
Если не трудно подскажите плиз аналог Application.ExeName на винапи.
Блин, почему все забывают про функцию GetCommandLine ?
rpy3uH вне форума Ответить с цитированием
Старый 10.02.2009, 09:14   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Блин, почему все забывают про функцию GetCommandLine ?
Действительно, тем паче что ParamStr вызывает GetCommandLine
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инфа по ВинАПИ mogul82 Win Api 6 28.10.2008 08:16
application.ProcessMessages; UROKSAN Общие вопросы Delphi 2 10.04.2008 13:32
Application.terminate GAGARIN-NEW Общие вопросы Delphi 11 09.03.2008 19:32
Application.ProcessMessages =LeonZone= Общие вопросы Delphi 11 27.01.2008 21:31
Application.ProcessMessages KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 11.08.2007 23:38