PDA

Ver la Versión Completa : Detener aplicacion


trex2000
22-04-2005, 21:06:49
Saludos:
Tengo una aplicación que cuando esta empezando a cargar ejecuta la funcion Winexecandwait32 y funciona bien en windows 98 y windows 2000 pero en windows Xp no funciona ¿alguien me podria decir el porque de esta situacion y como corregirlo?

De antemano muchas gracias :confused:

roman
22-04-2005, 22:59:33
¿Es esta una función de la API de Windows? No he encontrado ninguna referencia a ella en el SDK de Windows.

// Saludos

marcoszorrilla
22-04-2005, 23:02:35
Yo he estado buscando y se trata de una función que utiliza algunas del api de Windows, por ejemplo en Torrys hay una, y he encontrad otras en otros sitios, unas son para Delphi2 y Win95....

Por lo que sería necesario ver el código que está utilizando para poderse hacer una idea de que es lo que falla.

Un Saludo.

marcoszorrilla
22-04-2005, 23:08:17
Aquí una muestra:

This unit is based upon the well-known and largely used WinExecAndWait function The former
WinexecAndWait function doesn't compile under Delphi 2.0 because the GetModuleUsage function is no longer
supported under Win95.

I have simply updated the previous code so that it works with Delphi 2.0 under Windows 95.
With this function you can call Windows-based applications as well as Dos-based commands.
That is 'c:\myapp\app32.exe' as well as command.com /c del *.bak'.

This new WinexecAndWait32 is intended for Delphi 2.0 Win95 only, it works for me but you use it at
your own risk:

http://www.delphifaq.com/images/e1.gif
http://www.delphifaq.com/images/e2.gif
unit WinExc32;
// Author : Francis Parlant (100113.3015@compuserve.com).
// Update : Bill Rinko-Gay (bill_rinko-gay@pcworld.com)
// Parameters:
// Path: a null terminated string with the command line
// Visibility: Windows SHOW constant such as WS_RESTORE
// Timeout: DWORD time in miliseconds or INFINITE to wait forever
//
// The previous version went into a loop, constantly checking to see
// if the exec'ed program had terminated. This version uses the Win95
// API call to WaitForSingleObject to block processing until the
// exec'ed program has terminated. The return value will be either
// an error code from the CreateProcess function, or the result
// of the wait.

interface

uses Windows;

function WinExecAndWait32(Path: PChar; Visibility: Word;
Timeout : DWORD): integer;

implementation

function WinExecAndWait32(Path: PChar; Visibility: Word;
Timeout : DWORD): integer;
var
WaitResult : integer;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
iResult : integer;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
{ you could pass sw_show or sw_hide as parameter: }
wShowWindow := visibility;
end;
if CreateProcess(nil,path,nil, nil, False,
NORMAL_PRIORITY_CLASS, nil, nil,
StartupInfo, ProcessInfo) then
begin
WaitResult := WaitForSingleObject(ProcessInfo.hProcess, timeout);
{ timeout is in miliseconds or INFINITE if
you want to wait forever }
result := WaitResult;
end
else
{ error occurs during CreateProcess see help for details }
result:=GetLastError;
end;

end.



Un Saludo.

roman
22-04-2005, 23:08:37
Sí, me imaginaba algo así por las búsquedas que había hecho pero no estaba seguro.

Al parecer WinExecAndWait32 es una función que publicó Peter Below
en los foros de Borland hace mucho tiempo y que más tarde actualizó
con WinExecAndWait32V2 (http://groups.google.com.mx/groups?hl=es&lr=&threadm=VA.0000a031.005b109f%40nomail.please&rnum=9&prev=/groups%3Fhl%3Des%26lr%3D%26q%3Dwinexecandwait32v2%26meta%3Dgroup%253Dborland.public.delphi.*) para corregir problemas que presentaba.

Quizá esta otra le sirva.

// Saludos