Pascal中如何调用exe文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pascal中如何调用exe文件相关的知识,希望对你有一定的参考价值。

求在Pascal中进行
文件删除 (追5分)
获取文件大小 (追5分)
获取修改时间 (追5分)

调用API (追5分)
启动别的EXE (追20分)
的方法(说话算数)。

在program xxx;后面写uses dos;
然后写下面过程:
procedure cmd(command:String);
begin
SwapVectors;
Exec(GetEnv('COMSPEC'), '/C ' + Command);
SwapVectors;
if DosError <> 0 then
WriteLn('Could not execute COMMAND.COM');
WriteLn;
end;
Pascal中如何调用exe文件
运行cmd('文件名');即可
文件删除 (追5分)
cmd('erase 文件名');
或者assign(f,filename);后用erase(f);
获取文件大小 (追5分) 获取修改时间 (追5分)
************************************************

Turbo Directory Demo
Copyright (c) 1985,90 by Borland International

************************************************

program DirDemo;
Demonstration program that shows how to use:

o Directory routines from DOS unit
o Procedural types (used by QuickSort)

Usage:

dirdemo [options] [directory mask]

Options:

-W Wide display
-N Sort by file name
-S Sort by file size
-T Sort by file date and time

Directory mask:

Path, Filename, wildcards, etc.



$I-,S-
$M 8192,8192,655360

uses Dos;

const
MaxDirSize = 512;
MonthStr: array[1..12] of string[3] = (
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

type
DirPtr = ^DirRec;
DirRec = record
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12];
end;
DirList = array[0..MaxDirSize - 1] of DirPtr;
LessFunc = function(X, Y: DirPtr): Boolean;

var
WideDir: Boolean;
Count: Integer;
Less: LessFunc;
Path: PathStr;
Dir: DirList;

function NumStr(N, D: Integer): String;
begin
NumStr[0] := Chr(D);
while D > 0 do
begin
NumStr[D] := Chr(N mod 10 + Ord('0'));
N := N div 10;
Dec(D);
end;
end;

$F+

function LessName(X, Y: DirPtr): Boolean;
begin
LessName := X^.Name < Y^.Name;
end;

function LessSize(X, Y: DirPtr): Boolean;
begin
LessSize := X^.Size < Y^.Size;
end;

function LessTime(X, Y: DirPtr): Boolean;
begin
LessTime := X^.Time > Y^.Time;
end;

$F-

procedure QuickSort(L, R: Integer);
var
I, J: Integer;
X, Y: DirPtr;
begin
I := L;
J := R;
X := Dir[(L + R) div 2];
repeat
while Less(Dir[I], X) do Inc(I);
while Less(X, Dir[J]) do Dec(J);
if I <= J then
begin
Y := Dir[I];
Dir[I] := Dir[J];
Dir[J] := Y;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then QuickSort(L, J);
if I < R then QuickSort(I, R);
end;

procedure GetCommand;
var
I,J: Integer;
Attr: Word;
S: PathStr;
D: DirStr;
N: NameStr;
E: ExtStr;
F: File;
begin
WideDir := False;
@Less := nil;
Path := '';
for I := 1 to ParamCount do
begin
S := ParamStr(I);
if S[1] = '-' then
for J := 2 to Length(S) do
case UpCase(S[J]) of
'N': Less := LessName;
'S': Less := LessSize;
'T': Less := LessTime;
'W': WideDir := True;
else
WriteLn('Invalid option: ', S[J]);
Halt(1);
end
else
Path := S;
end;
Path := FExpand(Path);
if Path[Length(Path)] <> '\' then
begin
Assign(F, Path);
GetFAttr(F, Attr);
if (DosError = 0) and (Attr and Directory <> 0) then
Path := Path + '\';
end;
FSplit(Path, D, N, E);
if N = '' then N := '*';
if E = '' then E := '.*';
Path := D + N + E;
end;

procedure FindFiles;
var
F: SearchRec;
begin
Count := 0;
FindFirst(Path, ReadOnly + Directory + Archive, F);
while (DosError = 0) and (Count < MaxDirSize) do
begin
GetMem(Dir[Count], Length(F.Name) + 10);
Move(F.Attr, Dir[Count]^, Length(F.Name) + 10);
Inc(Count);
FindNext(F);
end;
end;

procedure SortFiles;
begin
if (Count <> 0) and (@Less <> nil) then
QuickSort(0, Count - 1);
end;

procedure PrintFiles;
var
I, P: Integer;
Total: Longint;
T: DateTime;
N: NameStr;
E: ExtStr;
begin
WriteLn('Directory of ', Path);
if Count = 0 then
begin
WriteLn('No matching files');
Exit;
end;
Total := 0;
for I := 0 to Count-1 do
with Dir[I]^ do
begin
P := Pos('.', Name);
if P > 1 then
begin
N := Copy(Name, 1, P - 1);
E := Copy(Name, P + 1, 3);
end else
begin
N := Name;
E := '';
end;
Write(N, ' ': 9 - Length(N), E, ' ': 4 - Length(E));
if WideDir then
begin
if Attr and Directory <> 0 then
Write(' DIR')
else
Write((Size + 1023) shr 10: 3, 'k');
if I and 3 <> 3 then
Write(' ': 3)
else
WriteLn;
end else
begin
if Attr and Directory <> 0 then
Write('<DIR> ')
else
Write(Size: 8);
UnpackTime(Time, T);
WriteLn(T.Day: 4, '-',
MonthStr[T.Month], '-',
NumStr(T.Year mod 100, 2),
T.Hour: 4, ':',
NumStr(T.Min, 2));
end;
Inc(Total, Size);
end;
if WideDir and (Count and 3 <> 0) then WriteLn;
WriteLn(Count, ' files, ', Total, ' bytes, ',
DiskFree(Ord(Path[1])-64), ' bytes free');
end;

begin
GetCommand;
FindFiles;
SortFiles;
PrintFiles;
end.
启动别的EXE (追20分)
cmd('文件名');

参考资料:Turbo Pascal样例程序

参考技术A 这个要用DOS库,sysutils 库
具体看api
几个相关的过程或函数
DeleteFile
GetFAttr
GetFTime
FileAge
FileGetDate
... 有好多相似功能的 用法不同 具体请看帮助
\doc\units.pdf

VC中如何调用exe文件?

我现在有一个.exe文件,想用Visual C++调用,依次 输入一个1-100的数,exe运行后得到的结果要用txt文件保存。
PS .exe运行后输入一个数会给出一个结果。

请教大虾如何写这个程序。从打开VC后的“新建”开始,谢谢。
我现在只有这个exe文件,没有源程序.
exe是一个大数分解的。
调用exe之后要应用这个程序输入数据,怎么写代码?

这种也可以
#include<stdio.h>
#include<stdlib.h>
void main()
//将结果缓存到本地文件里,然后解析 结果文件
char* libvar="call test.exe >c:\testresult.txt";
system("type c:\testresult.txt");


或者:

将exe文件的处理过程修改为动态库dll 然后再新工程里调用动态库
参考技术A WinExec("E:\\KuGou\\KuGou2010\\KUGOO.EXE", SW_SHOWMAXIMIZED);这是一个例子,你换一下路径,再试试你的。 参考技术B 这个好像弄不起吧?

是什么功能的EXE啊?重新写一个就好了。
参考技术C WinExec
Shell

以上是关于Pascal中如何调用exe文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在C语言中调用exe文件

VC中如何调用exe文件?

delphi调用外部程序~~~~~~~~~~~~

在Delphi如何将exe文件加入到资源文件中,如何进行调用?

如何在 C# 中调用 .exe 文件 [重复]

delphi 如何把其他exe文件加入dll中,并调用