Access - Alguien que me pueda ayudar con esta funcion

   
Vista:
Imágen de perfil de Alejandro

Alguien que me pueda ayudar con esta funcion

Publicado por Alejandro (98 intervenciones) el 25/05/2014 18:23:11
Nose en que parte pongo la funcion
Quisiera poner esta funcion a funcionar pero la verdad que no lo logro.
la estoy poniendo al presionar la tecla F8, se trata de que si la calculadora de windows esta abierta no se vuelva abrir pero si esta cerrada que solo que pase a primer plano, pero si esta cerrada se abra.
La funcion se llama IsAppOpen aqui le dejo el enlace para que puedan leer la explicacion

http://accessvbafaq.mvps.org/item.asp?pagina=80
---------------------------------------------------------------------------------------------------------------

Tengo este dato que me proporciono un amigo


copia la función que ponen allí y que empieza por

'--------------------------------------------------------- '
' IsAppOpen '
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
........
.........

No la reproduzco aqui entera porque no tengo permiso del autor, pero si para trabajar con ella

Una vez copiada pegala en un modulo que ya tengas o uno nuevo

Despues en el formulario pegas en el evento al pulsar una tecla

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF8 Then

If IsAppOpen("SciCalc") Then
exit sub
End If



Shell "c:\windows\system32\calc.exe"
End If

End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Alguien que me pueda ayudar con esta funcion

Publicado por Jefferson (381 intervenciones) el 25/05/2014 21:19:47
Hola Alejandro

Dependiendo de la version de Windows el Nombre de la Clase varia, para ello deberias tener instalado spy++ tool para conocer el nombre de la clase.
Ahora bien, puede que conociendo el nombre de la clase el usuario abra la calculadora en ventana cientifica o avanzada, ahi tambien varia el nombre de la clase..

que haria yo en tu caso.....?
Usaria la misma API FindWindow, solo que cambiaria la function

creo una funcion nueva basandome en la API
como no conozco la clase la declaro optional
de igual forma declaro optional la ventana

1
2
3
Function EstaAbierta(Optional LaClase As String, Optional LaVentana As String) As Long
EstaAbierta = IIf(FindWindow(LaClase, LaVentana) = 0, 0, 1)
End Function


para llamarla haria lo siguiente
en un boton comando, la tecla F8, un etiqueta.....

Como no conozco la clase la coloco nula, pero si conozco la ventana porque uso Windows 7 (en español)

1
2
3
4
Select Case EstaAbierta(vbNullString, "Calculadora")
Case 0: MsgBox "la calculadora esta cerrada"
Case 1: MsgBox "la calculadora esta abierta"
End Select



y Listo deberia funcionar

Desde Venezuela
Jefferson Jimenez
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

Alguien que me pueda ayudar con esta funcion

Publicado por Jefferson (381 intervenciones) el 26/05/2014 00:07:32
Por cierto, y releyendo un poco tu pregunta ....

Saque este extracto de Codigo de Recursos Visual Basic

Si esta abierta la calculadora y deseas traerla al frente (OJO no es que vas a abrir otra nueva, pues cambiarias el Hwnd de la ventana)

Copia y Pega este codigo en un modulo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
'Udt para guardar el texto de la barra de titulo y el hwnd
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Type t_Info
    HwndWin As Long
    captionWin As String
End Type
 
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Declare Sub SetWindowPos Lib "User32" ( _
    ByVal hWnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal X As Long, _
    ByVal Y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long)
 
 
 
'Declaraciones Api
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
Declare Function FindWindow Lib "User32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
 
 
 Declare Function IsWindowVisible Lib "User32" (ByVal hWnd As Long) As Long
 
 Declare Function EnumWindows Lib "User32" (ByVal lpEnumFunc As Any, ByVal _
                                                        lParam As Long) As Long
 
 Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" _
                                    (ByVal hWnd As Long, ByVal lpString As String, _
                                                            ByVal cch As Long) As Long
 
 Declare Function SetForegroundWindow Lib "User32" (ByVal hWnd As Long) As Long
 
 
'Variables
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
Public Info() As t_Info
Public Procesos As Integer
Public ret As Long
 
 
'Función que enumera las ventanas visibles de windows
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
Public Function Listar_Ventanas(ByVal Handle As Long, _
                                ByVal lParam As Long) As Boolean
 
    ' Buffer para el captionde la ventana
    Dim buffer As String * 256
    Dim l As Long
 
    Procesos = Procesos + 1
    'redimensiona el vector
    ReDim Preserve Info(1 To Procesos)
 
    With Info(Procesos)
        ' Guarda el Handle
        .HwndWin = Handle
        ' Recupera el título de la ventana
        l = GetWindowText(Handle, buffer, Len(buffer))
        .captionWin = Replace(buffer, Chr(0), vbNullString)
 
    End With
 
    ' Sigue listando las demás ventanas
    Listar_Ventanas = 1
End Function
 
Public Sub AbreCalculadora()
Dim i As Integer
Dim ret As Long
 
    Erase Info
    Procesos = 0
    'Callback : Ejecuta Enumwindows para listar las ventanas de windows
    EnumWindows AddressOf Listar_Ventanas, 0
 
    For i = 1 To Procesos
 
        With Info(i)
 
              If .captionWin = "Calculadora" Then
                    ' Verifica si la ventana es visible
                    If IsWindowVisible(.HwndWin) Then
 
                       ' Pone la ventana en primer plano, pasándole el Hwnd
                           ret = SetForegroundWindow(.HwndWin)
 
                    End If
             End If
 
        End With
    Next
 
 
End Sub
 
Function EstaAbierta(Optional LaClase As String, Optional LaVentana As String) As Long
EstaAbierta = IIf(FindWindow(LaClase, LaVentana) = 0, 0, 1)
End Function

Y para llamarlo, seria algo asi como:

1
2
3
4
5
6
Select Case EstaAbierta(vbNullString, "Calculadora")
Case 0
    Shell "calc.exe"
Case 1
AbreCalculadora
End Select
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Alejandro

Alguien que me pueda ayudar con esta funcion

Publicado por Alejandro (98 intervenciones) el 26/05/2014 18:17:26
Muchas gracias Jefferson Jimenez me fuciono perfectamente
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