Форум: "WinAPI";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизКак получить имя файла Найти похожие ветки
← →
Dot (2005-07-27 11:30) [0]Приветсвую вас Мастера!.
Собственно сабж.
Как проще всего получить программе свое собственное имя.
Просто от этого зависят процедуры, а если переименовать файл то все идет коту под хвост..
Думал paramstr(0) но это неприемлимо, ибо мне не полный путь нужен а просто имя файла
← →
Плохиш © (2005-07-27 11:34) [1]Мда, ExtractFileName(ParamStr(0));
← →
GLFox © (2005-07-27 11:34) [2]ExtractFileName(ParamStr(0))
← →
Dot (2005-07-27 11:38) [3]А через Апи никак ? Чтобы sysutils не подгружать?
← →
GLFox © (2005-07-27 11:44) [4]А код функции ExtractFileName в SysUtils посмотреть лень? Возьми и выдери ее оттуда.
← →
Antonn © (2005-07-27 11:56) [5]const EmptyString: string = "";
DirDelimiters: PChar = ":\";
procedure EAX2PChar;
asm
TEST EAX, EAX
JNZ @@exit
MOV EAX, offset[EmptyString]
@@exit:
end;
function __DelimiterLast(Str: PChar; Delimiters: PChar): PChar;
asm
PUSH ESI
CALL EAX2PChar
MOV ESI, EDX
MOV EDX, EAX
@@tolast:
CMP byte ptr [EAX], 0
JZ @@next1
INC EAX
JMP @@tolast
@@next1:
PUSH EAX
@@next:
LODSB
TEST AL, AL
JZ @@exit
PUSH EDX
XCHG EDX, EAX
CALL StrRScan
POP EDX
TEST EAX, EAX
JZ @@next
POP ECX
CMP byte ptr [ECX], 0
JZ @@next1
CMP EAX, ECX
JG @@next1
PUSH ECX
JLE @@next
@@exit: POP EAX
POP ESI
end;
function ExtractFileName(const Path: string): string;
asm
PUSH EDX
PUSH EAX
MOV EDX, [DirDelimiters]
CALL __DelimiterLast
POP EDX
CMP byte ptr [EAX], 0
JZ @@1
XCHG EDX, EAX
INC EDX
@@1: POP EAX
CALL System.@LStrFromPChar
end;
(С) не мое, говорят из КОЛ выдернули
← →
Плохиш © (2005-07-27 12:08) [6]
> Dot (27.07.05 11:38) [3]
> А через Апи никак ? Чтобы sysutils не подгружать?
Возможности для извращений безграничны
FindFirstFile
и никаких SysUtils ;-)
← →
Dot (2005-07-27 13:06) [7]Да спасибо, сам извратился +)
function ExFileName: string;
var
bufstr: string;
i: integer;
fn: string;
count: integer;
begin
fn:=paramstr(0);
for i:=1 to length(fn) do
begin
if Copy(fn,i,1)="\" then
count:=i;
end;
for i:=count+1 to length(fn) do
begin
bufstr:=bufstr+Copy(fn,i,1);
end;
ExFileName:=bufstr;
end;
← →
begin...end © (2005-07-27 13:33) [8]> Dot (27.07.05 13:06) [7]
function ExFileName: string;
var
L: Integer;
begin
Result := ParamStr(0);
L := Length(Result);
while (L > 0) and (Result[L] <> "\") do Dec(L);
Result := Copy(Result, L + 1, MaxInt)
end.
← →
Antonn © (2005-07-27 14:38) [9]а у меня трава лучше...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c