要求:
在我编的程序里执行另外一个exe文件(文件名是problem.exe),并测出problem.exe的运行时间。说明:
该exe文件是用Tubro C或Pascal环境编译生成的。
双击problem.exe图标,会读入problem.in文件(已经有了),生成problem.out文件。测试程序:
我已经尝试的方法:1、[Shell]
执行:shell "c:\problem.exe",vbHide结果:显示执行时间为10ms左右***但是*** c:\ 并没有生成problem.out(这个输出文件对我以后的工程很重要)2、[ShellExecute]
定义:Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1执行:ShellExecute Me.hwnd, vbNullString, "problem.exe", vbNullString, "c:\", SW_SHOWNORMAL 结果:显示执行时间为30ms左右
***但是*** c:\ 并没有生成problem.out3、[WinExec]
定义:Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
Const SW_SHOWNORMAL = 1执行:WinExec "c:\problem.exe", SW_SHOWNORMAL结果:显示执行时间为10ms左右
***但是*** c:\ 并没有生成problem.out4、[shell]-调用命令行
执行:Shell "command.com /c c:\problem.exe", vbHide
结果:显示执行时间为20ms左右***但是*** c:\ 并没有生成problem.out请问,
一、究竟怎么样才能使得效果完全像双击图标呢?(即一定要生成problem.out文件)
二、怎么样保证侧的时间为problem.exe完整执行完的时间?
在我编的程序里执行另外一个exe文件(文件名是problem.exe),并测出problem.exe的运行时间。说明:
该exe文件是用Tubro C或Pascal环境编译生成的。
双击problem.exe图标,会读入problem.in文件(已经有了),生成problem.out文件。测试程序:
我已经尝试的方法:1、[Shell]
执行:shell "c:\problem.exe",vbHide结果:显示执行时间为10ms左右***但是*** c:\ 并没有生成problem.out(这个输出文件对我以后的工程很重要)2、[ShellExecute]
定义:Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1执行:ShellExecute Me.hwnd, vbNullString, "problem.exe", vbNullString, "c:\", SW_SHOWNORMAL 结果:显示执行时间为30ms左右
***但是*** c:\ 并没有生成problem.out3、[WinExec]
定义:Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
Const SW_SHOWNORMAL = 1执行:WinExec "c:\problem.exe", SW_SHOWNORMAL结果:显示执行时间为10ms左右
***但是*** c:\ 并没有生成problem.out4、[shell]-调用命令行
执行:Shell "command.com /c c:\problem.exe", vbHide
结果:显示执行时间为20ms左右***但是*** c:\ 并没有生成problem.out请问,
一、究竟怎么样才能使得效果完全像双击图标呢?(即一定要生成problem.out文件)
二、怎么样保证侧的时间为problem.exe完整执行完的时间?
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End TypePrivate Sub command1_Click() Dim stStart As SYSTEMTIME
GetSystemTime stStart
Dim t As Currency
'ShellExecute Me.hwnd, vbNullString, "problem.exe", vbNullString, "c:\", SW_SHOWNORMAL '打开文件路径
'WinExec "c:\problem.exe", SW_SHOWNORMAL
'Shell "command.com /c c:\problem.exe", vbHide
'Shell "c:\problem.exe", vbHide
Dim stNow As SYSTEMTIME
GetSystemTime stNow
t = CLng(stNow.wHour - stStart.wHour) * 60 * 60 * 1000 + _
CLng(stNow.wMinute - stStart.wMinute) * 60 * 1000 + _
CLng(stNow.wSecond - stStart.wSecond) * 1000 + _
CLng(stNow.wMilliseconds - stStart.wMilliseconds)
MsgBox "本程序已运行:" & CStr(t) & "毫秒"
End Sub谢谢看贴,更谢回帖~~~
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As LongSub ShellWait(sCommandLine As String) '等到外部程序执行完成
Dim hShell As Long, hProc As Long, lExit As Long
hShell = Shell(sCommandLine, vbHide)
hProc = OpenProcess(&H400, False, hShell)
Do
GetExitCodeProcess hProc, lExit
DoEvents
Loop While lExit = &H103
End Sub
测试时间为300ms,和实际执行时间一样,之前10ms的不符合事实。
等到结贴时分一定送上,呵呵
可以的话请你留下你的mail
定速奉上~
555...I'm innocent..
我看了一下:右键文件图标,有7个选项卡,常规、程序、字体、内存、屏幕、其它、兼容性;
没有执行参数,只是problem.exe,没有像CS那种cs1.5.exe -console 那种。
常规的exe文件右键,(比如vb6.exe)显示三个选项卡,常规、版本、兼容性。
呵呵
想了一想,更可能是调用的问题。试试这样调用(xp下):
shell "cmd.exe /c c:\problem.exe",VbNormalFocus
一、sushu.c
在VC中新建一个C/C++的源文件,将以下代码粘进代码区// 程序功能为求出给定的两个整数之间所有素数之和
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>int ReadDat(int *,int*);
void WriteDat();
void sushu(int,int);
long result=0;void main()
{
int pm,pn;
if(ReadDat(&pm,&pn))
{
printf("OPEN sushu.in ERRO!\n\007");
return;
}
sushu(pm,pn);
WriteDat();
}int ReadDat(int *ppm,int *ppn)
{
FILE *fp;
if((fp=fopen("sushu.in","r"))==NULL) return 1;
fscanf(fp,"%d",ppm);
fscanf(fp,"%d",ppn);
fclose(fp);
return 0;
}void WriteDat(void)
{
FILE *fp;
fp=fopen("sushu.out","w");
fprintf(fp,"%ld",result);
fclose(fp);
}
void sushu(int m,int n)
{
int i,j; for(i=m;i<n+1;i++)
for(j=2;j<i+1;j++)
{ if (i==j) result=result+i;
if (i%j==0) break;
}
}
请build成sushu.exe文件二、sushu.in
新建记事本,文件名改为sushu.in
输入:
3 30000
保存即可(注意3he30000之间只有一个空格)将sushu.exe和sushu.in放在同一目录下,双击sushu.exe会自动生成sushu.out(内容为:45675862)
为什么同步执行(如上),缺得不到sushu.out呢?这几天一直抓狂中
大家的答案对我很重要,谢谢帮忙~~
[email protected]
http://www.netye.net/?p=45
我在开发一个评分系统,面向信息学奥赛de,
我的程序必须要执行选手做的.exe文件,生成.out文件,然后与我的测试.out文件比较,正确则给分
现在困惑的是得不到.out文件,那我也就无法比较评分啦~
(以上的c语言程序是一考生的答案,肯定效率不高了,呵呵)
所以,请帮忙哈~谢谢
我把你的压缩包解到c:\sushu里去,然后在程序中写:Private Sub Command1_Click()
Shell "cmd.exe /c c:\sushu\sushu.EXE", vbNormalFocus
End Sub生成exe,也放到c:\sushu里去,运行就看到结果了。。
现在看来,可能是你用的系统与我不同,我的是xp,你用的是不是win9x系列????如果是要改成这样:Private Sub Command1_Click()
Shell "command.com /c c:\sushu\sushu.EXE", vbNormalFocus
End Sub生成exe放到那个文件夹里再试试看。
问题解决,异常感谢,呵呵
一切原因出在我是在我一直没有将我编的程序生成exe文件,只是在vb里点执行的。
将编译生成的.exe文件,放到和sushu.exe,sushu.in文件同一目录,执行,ok,如期生成sushu.out
我太粗心了,再次感谢
准备结帐,送份
接好,哈哈