Gracias
Lo del parametro con espacio ya me habia dado cuenta, es mas lo vi en tu
revision dentro de portalfox
Igualmente me sirvio otra rutina que habia ahi que para lo que necesito es lo
ideal
Gracias x tu tiempo
Saludos
PabloC
----- Original Message -----
From: Pablo Pioli
To: GUFA List Member
Sent: Monday, December 10, 2007 5:31 PM
Subject: [GUFA] ShellExecute
De MSDN. Si estas pasando parametros fijate que lo pega sin agregarle el
espacio de separacion. Es como el bug de Replace cuando estas en EOF(). Ya paso
a ser una caracteristica de diseño :->
Saludos
Pablo Pioli
----- Original Message -----
From: PabloC
To: GUFA List Member
Sent: Monday, December 10, 2007 5:11 PM
Subject: [GUFA] ShellExecute
Lo probe
Me devuelve un error #267
Solo tenes documentados el 2,3 y 87
De donde puedo sacar info de los errores??
Saludos
PabloC
----- Original Message -----
From: Pablo Pioli
To: GUFA List Member
Sent: Monday, December 10, 2007 4:58 PM
Subject: [GUFA] ShellExecute
Esta es la funcion que yo uso, podes evitar el loop inifinito un algunas
modificaciones.
***
* Function ShellWait
* Ejecuta un proceso y espera a que finalice
***
Function ShellWait(cEXEFile, cCommandLine, nWindow)
Local cStartupInfo, cProcInfo, nProcess
* defines
#define STARTF_USESHOWWINDOW 1
#define m0 256
#define m1 65536
#define m2 16777216
* Validaciones
If Type("nWindow") <> "N"
nWindow = SW_SHOWMAXIMIZED
Endif
* Declare WinAPI Functions
Declare Short CreateProcess in WIN32API ;
String lpszModuleName, ;
String @lpszCommandLine, ;
String lpSecurityAttributesProcess, ;
String lpSecurityAttributesThread, ;
Short bInheritHandles, ;
Integer dwCreateFlags, ;
String lpvEnvironment, ;
String lpszStartupDir, ;
String @lpStartInfo, ;
String @lpProcessInfo
Declare Integer WaitForSingleObject in kernel32 ;
Integer hHandle,;
Integer dwMilliseconds
Declare Integer CloseHandle in kernel32 ;
Integer hObject
Declare Integer GetLastError in kernel32
* Incializar estructuras
cStartupInfo = num2dword(68) + ;
num2dword(0) + num2dword(0) + num2dword(0) + ;
num2dword(0) + num2dword(0) + num2dword(0) + num2dword(0)
+ ;
num2dword(0) + num2dword(0) + num2dword(0) + ;
num2dword(STARTF_USESHOWWINDOW) + ;
num2word(nWindow) + ;
num2word(0) + num2dword(0) + ;
num2dword(0) + num2dword(0) + num2dword(0)
cProcInfo = Replicate(Chr(0), 16)
* Ejecutar comando
If !Empty(cCommandLine)
cEXEFile = cEXEFile + cCommandLine
Endif
If CreateProcess(0, cEXEFile, 0, 0, 0, 0, 0, JustPath(cEXEFile),
@cStartupInfo, @cProcInfo) == 0
* Posibles errores
* 2 = The system cannot find the file specified
* 3 = The system cannot find the path specified
* 87 = ERROR_INVALID_PARAMETER
MessageBox("Error número: " + LTrim(Str(GetLastError())), 64, "Error")
else
* Esperar a que termine
nProcess = buf2dword(SUBSTR(cProcInfo, 1, 4))
WaitForSingleObject(nProcess, -1)
CloseHandle(nProcess)
Endif
EndFunc
***
* Function num2dword
* Funcion auxiliar a ShellWait
***
Function num2dword(nValue)
Local b0, b1, b2, b3
b3 = Int(nValue/m2)
b2 = Int((nValue - b3 * m2)/m1)
b1 = Int((nValue - b3*m2 - b2*m1)/m0)
b0 = Mod(nValue, m0)
Return(Chr(b0) + Chr(b1) + Chr(b2) + Chr(b3))
***
* Function num2word
* Funcion auxiliar a ShellWait
***
Function num2word(nValue)
Return(Chr(Mod(nValue, 256)) + Chr(Int(nValue / 256)))
***
* Function buf2dword
* Funcion auxiliar a ShellWait
***
Function buf2dword(cBuffer)
Return(Asc(SubStr(cBuffer, 1, 1)) + ;
Asc(SubStr(cBuffer, 2, 1)) * 256 + ;
Asc(SubStr(cBuffer, 3, 1)) * 65536 + ;
Asc(SubStr(cBuffer, 4, 1)) * 16777216)
----- Original Message -----
From: PabloC
To: GUFA List Member
Sent: Monday, December 10, 2007 1:34 PM
Subject: [GUFA] ShellExecute
Gracias Jose
Puedo tener control sobre el proceso externo, pero no queria llegar a
eso, x que puede ser un loop infinito si ese archivo por algun motivo no se
creo y deberia tambien controlar eso.
Pensaba en algo mas eficiente
Saludos
PabloC
----- Original Message -----
From: Jose Cardaropoli
To: GUFA List Member
Sent: Monday, December 10, 2007 1:31 PM
Subject: [GUFA] ShellExecute
Si tenes control del proceso externo , podes decir que cree una
archivo culaquiera "esperando.txt" y de este lado mantener la aplicación
mientras este archivo exista, antes de finalizar aquel proceso lo elimina y
libera la aplicación de este lado.
Si no tenes control sobre el proceso externo, no sé, porque son
procesos asincronicos...
Saludos
José Cardaopoli
----- Original Message -----
From: PabloC
To: GUFA List Member
Sent: Monday, December 10, 2007 12:49 PM
Subject: [GUFA] ShellExecute
Gente
Como puede con el ShellExecute disparar un proceso externo y
esperar a que termine para seguir?
Saludos
PabloC
__________ Información de NOD32, revisión 2712 (20071209) __________
Este mensaje ha sido analizado con NOD32 antivirus system
http://www.nod32.com
__________ NOD32 2713 (20071210) Information __________
This message was checked by NOD32 antivirus system.
http://www.eset.com
__________ NOD32 2714 (20071210) Information __________
This message was checked by NOD32 antivirus system.
http://www.eset.com