Power Builder - PB 10.5

 
Vista:

PB 10.5

Publicado por Marcelo C. (8 intervenciones) el 09/04/2007 01:33:55
Amigos foristas, gracias de antemano. Acabo de migrar de la versión 9 a la 10.5 y no pudo obtener el numero del disco, estaba utilizando la función externa [Public Function Long ShellExecute (Long hWnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library "shell32.dll" Alias For "ShellExecuteA;Ansi"] que en versiones anteriores funcionaban perfectamente pero a partid de las 10.5 dejo de funcionar. Alguien me puede ayudar o decir de que manera capturar el numero de disco de la PC.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

RE:PB 10.5

Publicado por Leopoldo Taylhardat (710 intervenciones) el 09/04/2007 19:26:56
Saludos desde Maracay, Venezuela.

Prueba con esto y me dices que tal funciona...

GetVolumnInformationA( )
This function returns information about the harddrive.

Global External Function:
FUNCTION boolean GetVolumeInformation(ref string lpRootPathName,ref string lpVolumeNameBuffer,ulong nVolumeNameSize,ref ulong lpVolumeSerialNumber,ref ulong lpMaximumComponentLength,ref ulong lpFileSystemFlags,ref string lpFileSystemNameBuffer,ulong nFileSystemNameSize) Library "kernel32.dll"

Script:
boolean rtn
string lprootpathname = "c:"
string lpVolumeNameBuffer = space(256)
ulong nVolumeNameSize = 256
ulong lpVolumeSerialNumber
ulong lpMaximumComponentLength
setnull(lpVolumeSerialNumber)
lpMaximumComponentLength = 256
ulong lpFileSystemFlags
setnull(lpFileSystemFlags)
string lpFileSystemNameBuffer = space(256)
ulong nFileSystemNameSize = 256

rtn = GetVolumeInformationA(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,&
lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags,&
lpFileSystemNameBuffer, nFileSystemNameSize)
sle_1.text = lprootpathname
sle_2.text = lpVolumeNameBuffer
sle_3.text = string(nVolumeNameSize)
sle_4.text = string(lpVolumeSerialNumber)
sle_5.text = string(lpMaximumComponentLength)
sle_6.text = string(lpFileSystemFlags)
sle_7.text = string(lpFileSystemNameBuffer)
sle_8.text = string(nFileSystemNameSize)

Espero que sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PB 10.5

Publicado por Marcelo C (8 intervenciones) el 09/04/2007 21:19:01
Muchas gracias Leopoldo, pero se me presentaron dos problemas que seguramente estoy haciendo algo mal. En primer lugar tengo una Global External Function: con el siguiente nombre: (GetVolumeInformation)

FUNCTION boolean GetVolumeInformation(ref string lpRootPathName,ref string lpVolumeNameBuffer,ulong nVolumeNameSize,ref ulong lpVolumeSerialNumber,ref ulong lpMaximumComponentLength,ref ulong lpFileSystemFlags,ref string lpFileSystemNameBuffer,ulong nFileSystemNameSize) Library "kernel32.dll"

Y luego la estoy llamando en el script con este nombre: (GetVolumeInformationA)

rtn = GetVolumeInformationA(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,&
lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags,&
lpFileSystemNameBuffer, nFileSystemNameSize)

Lo que hice es crear la Global External Function con el nombre GetVolumeInformationA( …)
Y de esta manera me compilo bien pero no con el resultado esperado. Tanto la variable string(lpVolumeSerialNumber) como la variable string(lpFileSystemFlags) me retornaron vacías y justamente lpVolumeSerialNumber es la que necesito para saber el numero del disco.
Nuevamente muchas gracias y si se te ocurre donde esta el problema te lo voy a agradecer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PB 10.5

Publicado por Jorge (900 intervenciones) el 09/04/2007 22:35:44
Hola.

Espero ayudarte , esto esta funcionado en PB 10.5

// PB 10 / 10.5
//Declare de la Funcion

function long GetVolumeInformationA( ref string ls_RootPath, ref string ls_VolName, long ll_VolLen, ref string ls_volserial, long ll_maxcomplen, long ll_systemflags, ref string ls_SystemName, long ll_SystemLen ) Library 'kernel32' alias for "GetVolumeInformationA;Ansi"


//Scrip

String ls_Volume
String ls_Drive, ls_FileSys, ls_Flags, ls_Serial
Long ll_Max, ll_Flags, ll_RC, ll_FileSys
Long ll_Volume
cunidad=mid(cunidad,3,1)+":\"

ls_Drive = "C:\" //as_Volume
ls_Volume = Space(32)
ls_FileSys = Space(32)
ls_Serial = Space(32)
ll_Volume = Len( ls_Volume )
ll_FileSys = Len( ls_Filesys )
ll_RC = GetVolumeInformationA( ls_Drive, ls_Volume, ll_Volume, ls_Serial, ll_Max, ll_Flags, ls_FileSys, ll_FileSys )

If ll_RC = 0 Then
ls_Volume = ''
Else
ls_Volume = Trim( ls_Volume )
End If
cserial = ls_Serial

//
Integer nalargo, NoSerie[]
Integer posi
nalargo = len(trim(cserial))

For posi = 1 To nalargo
NoSerie[ (nalargo + 1) - posi] = ASC(string(mid (cserial , posi,1) ) )
Next

//Convertido a Hexa -- Yo no lo convierto.
//FOR posi = 1 TO nalargo
// st_serial.text+= f_longtohex(NoSerie[ posi ],2)
// if posi=2 then st_serial.text+="-"
//NEXT
//Long a String

For posi = 1 To nalargo
st_serial.text+=String(NoSerie[ posi ])
Next

Nro_Registro=st_serial.text

Saludos desde Argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PB 10.5

Publicado por Marcelo C. (8 intervenciones) el 10/04/2007 15:04:35
Muchas gracias Jorge, lo probé y me muestra un numero que supuestamente es el de disco, pero no se porque motivo utilizando el PB 90 (que es el que utilizaba antes de migrar y con el cual registré todas las maquinas) me muestra otro número en algunas PC.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PB 10.5

Publicado por Jorge (900 intervenciones) el 10/04/2007 17:34:31
Hola

Supuestamente ese numero lo estas grabando en la registry
y esta grabando diferente pb 10.5 que el 9
Tambien me paso que luego de migrar no levataba el mismo
numero grabado anteriormente.
No me complique mucho la existencia regrabe la registry
y segui.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PB 10.5

Publicado por Marcelo C. (8 intervenciones) el 10/04/2007 19:05:07
Gracias Jorge por tu consejo, me parece que voy a hacer lo mismo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha disminuido 1 puesto en Power Builder (en relación al último mes)
Gráfica de Power Builder

PB 10.5

Publicado por guido (46 intervenciones) el 29/01/2016 18:07:51
Hola a todos.
Pues este problema es porque a partir de PW 10.5 se usa codificación de archivos UNICODE en vez de ASCII que lo hacían las versiones anteriores.
Entonces para solucionar lo único que tienes que cambiar es en el alias:
function ulong ShellExecuteA(ulong hwnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, long nShowCmd) library "shell32.dll"
Por:
function ulong ShellExecuteW(ulong hwnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, long nShowCmd) library "shell32.dll"
La A por la W y listo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar