Archivo de CategoríasAPI
Desarrollo & API & Ideas & Trucos 08 Ago 2007 01:43 pm
Obteniendo el nombre corto de una ruta o archivo
Hace poco me tope con la necesidad de saber la ruta corta de un archivo (o ruta DOS), al decir ruta corta me refiero a la ruta que manejaba el DOS antiguo, que a diferencia de windows cada archivo solo puede tener 8 caracteres en el nombre del archivo y 3 en la extensión. es decir
C:\Mis Archivos\Juan Pérez y Pérez.xls una aplicación DOS lo encontraría así: C:\Misarc~1\JUANPR~1.XLS.
Esta Función permite obtener ese nombre corto:
Function GetDosFileName(lcfile As String) As String
**http://fox.desdeguate.com/?p=77
**Autor: Jorge Mota
**Devuelve la ruta corta (DOS) de una ruta o un archivo.
Declare Long GetShortPathName In "kernel32" String lpszLongPath,;
String lpszShortPath, Long lBuffer
lcFileName=Replicate(Chr(0),254)
lnTotal=GetShortPathName(lcfile, @lcFileName, Len(lcFileName))
Return Substr(lcFileName,1,lnTotal)
Endfunc
Ejemplos de uso:
Archivo:
?lcfile = GetDosFileName([C:\Juan Pérez y Pérez.xls])
Directorio:
lcDir = GetDosFileName([C:\Archivos de Programa\])
Retornará una cadena vacía si el directorio o archivo no existe.
Hasta la próxima.
API, archivos de programa, Desarrollo, fox, Ideas, kernel32, la ruta, ruta corta archivo, Trucos vfp
Desarrollo & API & Ideas 22 Feb 2007 05:04 pm
Creando aplicaciones de modo consola desde VFP
Bueno, esto es un código viejo que tengo desde hace rato por publicar, pero no por eso no util
Recuerdo que en unos de mis primeros contactos con el mundo linux, ví una aplicación para grabar cd’s, que al entrar a modo debug, mostraba una ventana al estilo D.O.S en el que íba indicando que método llamaba y que parámetros estaba usando, también el valor que retornaba, y me gusto mucho la idea, pero nunca realmente lo implemente, hasta hace poco que necesitaba en un proceso que se invoca desde otra estación para ejecutarse en el servidor, saber en que método se quedaba exactamente, ya que el proceso era asíncronico, pues bien, allí fue donde se me ocurrio tener desde vfp la manera de poder crear una de estas ventanitas:

Pero en este ejemplo aún no les mostrare como usar la emulación de la consola de comandos, nada más les brindo una aplicación que les permitira agregar comandos en un dbf y ejecutarlos desde la ventana en cuestión:
al ejecutar “vfp_console.prg” veran la pantalla negra en cuestión (también es configurable el color de fondo y color de la letra, como aprenderemos en la próxima publicación), puede escribir “ayuda” y presionar enter, lo que le mostrará una lista de comandos disponibles, también podrá escribir Ayuda Comando (donde Comando es el comando del que quiere obtener ayuda) para mostrar información acerca del mismo, por ejemplo Ayuda hora
El proyecto incluye un dbf llamado “Comandos” donde puede establecer que x Comando VFP no sea permitido ejecutar (Wait window, quit, cancel, debug, etc) solo debe establecer el valor del campo “Permitido” a .f. en el registro.
Para descargar el proyecto: http://fox.desdeguate.com/descargas/vfp/vfp_console.zip clic acá
Saludos y hasta la próxima cuando revisaremos y veremos más a detalle estas funciones API.
Desarrollo & API 29 Ene 2007 06:53 am
Descargar un archivo de internet y sin mostrar nada
Hace algún tiempo publique una API para descargar un archivo de internet, aunque tiene el inconveniente que muestra un dialogo al usuario para seleccionar el nombre del archivo, lo cual no siempre vamos a necesitar. Así que ahora traigo la solución, que nos permite indicar la ruta en la que queremos almacenar el archivo:
Local lcUrl, lcFileName
lcUrl = [http://fox.desdeguate.com/favicon.ico]
lcFileName = [C:miIcono.ico]
Declare Long URLDownloadToFile In "urlmon" Long hCall, String cUrl, String cFileName, Long dwReserved, Long lpfnCB
URLDownloadToFile(0,lcUrl,lcFilename,0,0)
Únicamente debemos pasar en el segundo y tercer parametro respectivamente, el URL y el nombre (incluyendo la ruta completa) con el que queremos almacenar el archivo.
Saludos y hasta la próxima ![]()
Desarrollo & API & Trucos 17 Ene 2007 02:12 pm
Administrando las declaraciones de las funciones API (iDeclare)
Esta vez les presento una función que nos permite administrar nuestro código de declaración de las API, permitiendonos centrarlo en una sola tabla, y a su vez, permitirnos declarar la función una sola vez.
El ejemplo se compone de 2 funciones iDeclare y iCheckDll, que básicamente hacen lo siguiente:
- iDeclare: Recibe como parámetro el nombre de la función que queremos declarar y revisa en la tabla iDeclare.dbf sí existe su definición, si la encuentra, invoca a iCheckDll para averiguar si ya ha sido declarada, en caso de ser afirmativo retorna .T., en caso de ser negativo, ejecutara el código para declarar nuestra función dll.
- iCheckDLL: Esta función hace uso de aDLLS y aScan (introducidas en VFP 7) para obtener una matriz de las dll declaradas y buscar en la misma la declaración de la función que nos interesa.
Un breve ejemplo usando iDeclare sería:
=iDeclare([GetActiveWindow])
lnHandle = GetActiveWindow()
Sí no queremos usar iDeclare y poder declarar nosotros la función según necesitemos podemos hacerlo así:
If !iCheckDLL([GetActiveWindow])
Declare Long GetActiveWindow In user32
Endif
lnHandle = GetActiveWindow()
Para descargar la función: http://fox.desdeguate.com/descargas/vfp/iDeclare.zip
Saludos y hasta la próxima
.
Desarrollo & API 04 Ene 2007 01:22 pm
Simular una Falla en el sistema
Para esas ocasiones en las que por una u otra razón queremos terminar la aplicación abruptamente (detectamos una licencia pirata, falta de pago, etc.), nada mejor que un fallo general en la aplicación, y para no llamar mucho la atención, usamos un error de Windows.
Declare FatalAppExit IN kernel32 long uAction , string lpMessageText
FatalAppExit(0, "Lo siento, ha efectuado una operacion no valida...")
y listo, veran un bonito cuadro de Windows :), curiosamente quizá hasta desaparezca el menú, al verla en el administrador de tareas mostrara el estado: “No Responde”
Saludos y hasta la próxima ![]()
Desarrollo & API 01 Dic 2006 02:28 am
Reiniciar la máquina al realizar un cambio
Algunas veces, luego de que modificamos una configuración en Windows, nos aparece el típico mensaje de “para que la configuración surta efecto debe reiniciar su máquina, desea reiniciar ahora”, aunque también nos aparece al instalar algun programa, para lograr el mismo efecto en nuestras aplicaciones la función API que tenemos que usar es SetupPromptReboot del dll setupApi.dll de windows, acá una función que si la llamamos sin parametros mostrará el dialogo en cuestión, si le pasamos .t. reiniciara sin preguntar:
Function Reiniciar(luNoPreguntar)
Declare SetupPromptReboot In setupapi.Dll Long FileQueue, Long Owner, Long ScanOnly
If !luPreguntar
SetupPromptReboot (0, _Screen.HWnd, 0)
Else
SetupPromptReboot(0, _Screen.HWnd, 1)
Endif
Endfunc
Hasta la próxima.
Desarrollo & API 30 Nov 2006 02:00 am
Crear Formularios Redondos con VFP
Para cuando quieran crear formularios un poco diferentes a los típicos cuadrados
Public oFrm
oFrm = Createobject('Form_Redondo')
oFrm.Show()
Return
Define Class Form_Redondo As Form
Procedure Load
Local hRgn
Declare Integer SetWindowRgn In user32 ;
integer HWnd, Integer hRgn , Integer bRedraw
Declare Long CreateEllipticRgn In "gdi32" Long X1, Long Y1, Long X2, Long Y2
hRgn = CreateEllipticRgn(22,20,This.Width,This.Height)
SetWindowRgn(This.HWnd, hRgn, 1)
EndProc
EndDefine
Desarrollo & API 29 Nov 2006 07:06 pm
Cerrar Sesión de windows desde VFP
Bueno, pues volvemos a la carga, esta vez para mostrar un API de windows no documentada
Declare Long FreeLibrary In "kernel32" Long hLibModule
Declare Long LoadLibrary In "kernel32" String lpLibFileName
Declare Long GetProcAddress In "kernel32" Long hModule, Long lpProcName
Declare Long CallWindowProc In "user32" Long lpPrevWndFunc, Long handle, String Msg , Long wParam, String Lparam
On Error ?''
Local lb As Long
Local pa As Long
lb = LoadLibrary("Shell32")
pa = GetProcAddress(lb, 60)
?CallWindowProc(pa+2, _Screen.HWnd, "Cerrar Sesion", 1, "0")
FreeLibrary(lb)
On Error
Si no quieren pedir la confirmación, en Portalfox.com existe un artículo al respecto, y en uno de los comentarios esta la rutina
Hasta la próxima
API, api de windows, cerrar sesion, Desarrollo, hwnd, kernel32, portalfox, user32 vfp
API 24 Nov 2006 06:10 am
Descargar un Archivo desde Internet
El código necesario para descagar un archivo desde internet, es usando el API de windows:
Declare DoFileDownload IN shdocvw.dll STRING lpszFile
DoFileDownload(STRCONV("http://fox.desdeguate.com/favicon.ico",12))
Esto mostrará el cuadro de dialogo Guardar como… de Internet Explorer.

Saludos.
API 01 Ago 2005 12:37 am
Obteniendo información de un video
Hace un tiempo en el news publico de foxpro de Microsoft alguien pregunto como traducir una código que usaba API de Visual Basic a VFP, Aca Pueden ver el código que nos da mucha información sobre el video, tal como Tamaño, altura, longitud, etc., a ver si le es de utilidad a alguno.
Seguir leyendo »


