APIS desde FoxPpro

Hola de nuevo aquí molestando con mis dudas.
Lo que pasa es queahora me pidieron manejar funciones de windows desde vfp tales como apagar el sistema, bajar el volumen, etc.
Y quisiera ejemplos o una lista de apis para manejar, y si me explicas muicho mejor
de antemano mucas gracias.

1 respuesta

Respuesta
1
Un ejemplo del uso de API's es determinar si se ejecutan otras aplicaciones o varias instancias de una aplicación. Puedes utilizar llamadas a API de Windows para determinar qué ejecutan aplicaciones en cualquier momento dado. El código siguiente muestra uso de funciones de API de Windows para determinar eso:
La aplicación almacena los nombres de todas las aplicaciones en el campo de tipo memo de la tabla Runapps.dbf que se ejecutan.
LOCAL awin_apps, vfp_handle, ln_current_window,ln_window_count
* Se dimensiona el arreglo awin_apps para almacenar las a´plicaciones
DIMENSION awin_apps[1]
* Se inicializa para guardar la aplicación actual
vfp_handle=0
* Se declaran las funciones API
DECLARE INTEGER FindWindow ;
    IN win32api ;
    INTEGER nullpointer, ;
    STRING cwindow_name
DECLARE INTEGER GetWindow ;
    IN win32api ;
    INTEGER ncurr_window_handle, ;
    INTEGER ndirection
DECLARE INTEGER GetWindowText ;
    IN win32api ;
    INTEGER n_win_handle, ;
    STRING @ cwindow_title, ;
    INTEGER ntitle_length
* Fin de la declaración
* Se obtiene el controlador de a aplicación actual
vfp_handle=findwindow(0,_SCREEN.CAPTION)
* Se guarda el ID del controlador en una variable
ln_current_window=vfp_handle
* Se inicia la cuenta de las aplicaciones actuales
ln_window_count=0
DO WHILE ln_current_window>0
    *  Para el título
    lc_window_title=SPACE(255)
    * Se obttiene con GetWindowText el título de la aplicación
    ln_length=getwindowtext(ln_current_window, ;
    @lc_window_title,LEN(lc_window_title))
    * Noto que la variable lc_window_title es usada como almacenamiento temporal
* para recibir el texto de la función GetWindowText
    IF ln_length>0
        lc_window_title=STRTRAN(TRIM(lc_window_title),CHR(0),"")
    ELSE
        lc_window_title=""
    ENDIF
    IF ln_current_window>0 .AND. !EMPTY(lc_window_title)
        * Se incrementa la cuenta y se redimensiona el arreglo de
        * aplicaciones en ejecución
        ln_window_count=ln_window_count+1
        DIMENSION awin_apps(ln_window_count)
        awin_apps[ln_Window_Count]=lc_window_title
    ENDIF
    * Se usa la función GetWindow para obtener los ID's de los controladores.
    ln_current_window=getwindow(ln_current_window,2)
ENDDO
CREATE TABLE runapps (appname m)
IF ALEN(awin_apps,1)>0
    SELECT runapps
    APPEND BLANK
    FOR i=1 TO ALEN(awin_apps,1)
        REPLACE appname WITH awin_apps+CHR(13) ADDITIVE
    NEXT
Endif
MODIFY MEMO appname NOEDIT
De la misma manera puedes utilizar cualquier función API
Por ejemplo, el siguiente código es para obtener el formato de la fecha corta del sistema:
Declare INTEGER GetLocaleInfo in Win32API LONG Locale, ;
  LONG LCType, STRING @LpLCData, INTEGER cchData
Declare LONG GetSystemDefaultLCID in Win32API
Declare SetLocaleInfo in Win32API LONG Locale, LONG LCType, ;
  STRING @LpLCData
dwLCID = GetSystemDefaultLCID()
Locale = 2048              && For English language.
LpLCData = space(255)      && Address of buffer information.
cchData = LEN(LpLCData)    && Size of buffer, LpLCData.
nretval = 0                && Number returned from API call.
cShortdate= ""             && Hold original short date format.
* VFP 3 usa solo decimales, el resto de las versiones hexadecimales
IF "3.00"$VERSION()
  LCType = 31   
ELSE
  LCType = 0x1f 
ENDIF
nretval = GetLocaleInfo(Locale, LCType, @LpLCData, cchData)
If nretval = 0 Then
    =MessageBox ("No se pudo obtener información.")
Else
    =MessageBox (LpLCData, 32, "Formato de fecha corto")
    cShortdate = LpLCData
EndIf
cNewshortdate = "MM/dd/yy"
setdate = SetLocaleInfo(dwLCID, LCType, cNewshortdate)
nretval = GetLocaleInfo(Locale, LCType, @LpLCData, cchData)
=MessageBox (LpLCData, 32, "Actualizado el formato corto")
cNewshortdate = cShortdate
setdate = SetLocaleInfo(dwLCID, LCType, cNewshortdate)
nretval = GetLocaleInfo(Locale, LCType, @LpLCData, cchData)
=MessageBox (LpLCData, 32, "Formato original")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas