Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Έλεγχος ανοικτού προγράμματος (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1534-elegxos-anoiktoi-programmatos.html)

pdhmos 14-12-11 15:20

Έλεγχος ανοικτού προγράμματος
 
Καλησπερα και καλές εορτές σε ολα τα μέλη του φόρουμ.

Εχω ενα προβλημα στην εφαρμογη που δουλευω στο μαγαζι μου και θα παρακαλουσα για την βοηθεια σας.

Μερικες φορες κλεινουμε κατα λαθος το φορολογικο προγραμα και εκδιδουμε παραστατικα χωρις συμβολοσειρα και (το προστιμο της εφοριας ειναι αρκετα καλο !!!!)
Το προβλημα θα λυνονταν κατα την γνωμη μου εαν μπορουσα να ελενξω πριν εκτυπωθει ενα παραστατικο εαν το προγραμα της φορολογικης μηχανης ειναι ανοικτο (δεν ξερω πως να το κανω ομως) η εαν υπαρχει αλλος τροπος.

Ευχαριστω.

Δημος

Tasos 14-12-11 18:10

Καλησπέρα σε όλους!

Αγαπητέ Δήμο, για να ελέγξεις αν μια εφαρμογή είναι ανοιχτή θα πρέπει να γνωρίζεις:
  • είτε τον τίτλο του παραθύρου της εφαρμογής
  • είτε το όνομα της διεργασίας της (Process)
Για να βρεις το όνομα της διεργασίας μιας εφαρμογής:
  • Άνοιξε το παράθυρο Διαχείρισης εργασιών των Windows
    εξί κλικ στη γραμμή εργασιών > Εκκίνηση Διαχείρισης εργασιών).
  • Στην καρτέλα "Εφαρμογές" κάνε δεξί κλικ στο όνομα της εφαρμογής και επίλεξε "Μετάβαση στη διεργασία".
    Θα μεταφερθείς αυτόματα στην επόμενη καρτέλα όπου θα δεις το (επιλεγμένο) όνομα της διεργασίας (στη στήλη Όνομα εικόνας).
Υπάρχουν αρκετές προσεγγίσεις για να ελέγξεις αν μια εφαρμογή είναι ανοικτή.

Παρακάτω παρουσιάζω 3 από αυτές:

1) Αν γνωρίζεις τον τίτλο του παραθύρου της εφαρμογής, ο κώδικας που μπορείς να χρησιμοποιήσεις είναι:


Κώδικας:

Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Function IsRunning(WindowTitle As String) As Boolean
    IsRunning = FindWindow(vbNullString, WindowTitle) <> 0
End Function

Sub test()
    If IsRunning("My Application window title") Then  ' Εδώ θα βάλεις τον τίτλο του παραθύρου της εφαρμογής.
        ' Ο κωδικας σου...
        '...............
        '...............
    Else
        MsgBox "Application Is not running!", vbCritical
    End If
End Sub

Προσοχή! Ο κώδικας δεν θα λειτουργήσει σωστά αν ο τίτλος του παραθύρου είναι διαφορετικός κάθε φορά.

2) Αν γνωρίζεις το όνομα της διεργασίας της εφαρμογής, ο κώδικας που μπορείς να χρησιμοποιήσεις είναι:

Κώδικας:

Function IsProcessRunning(strProcess As String) As Integer
    Dim Process, ProcessList, strComputer, objWMIService
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set ProcessList = objWMIService.ExecQuery _
            ("Select * from Win32_Process Where Name = '" & strProcess & "'")
    IsProcessRunning = ProcessList.Count
End Function

Sub test1()
    If IsProcessRunning("MyApp.exe") Then    ' Εδώ θα βάλεις το όνομα της διεργασίας της εφαρμογής.
        ' Ο κωδικας σου...
        '...............
        '...............
    Else
        MsgBox "Application Is not running!", vbCritical
    End If
End Sub

Ίσως ο παραπάνω κώδικας μπορεί να μην λειτουργήσει αν ο λογαριασμός χρήστη των Windows έχει περιορισμένα δικαιώματα.

3) Υπάρχει και η εντολή VBA AppActivate title[, wait] αλλά... δεν είναι ότι καλύτερο. Θα την παρουσιάσω όμως:

Κώδικας:

Function AppIsRunning(WindowTitle As String) As Boolean
    On Error Resume Next
    AppActivate WindowTitle
    AppIsRunning = Err = 0
    On Error GoTo 0
End Function

Sub test2()
    If AppIsRunning("My Application window title") Then    ' Εδώ θα βάλεις τον τίτλο του παραθύρου της εφαρμογής.
        ' Ο κωδικας σου...
        '...............
        '...............
    Else
        MsgBox "Application Is not running!", vbCritical
    End If
End Sub

Τάσος

pdhmos 15-12-11 18:01

Καλησπερα σε ολους

Τασο σε ευχαριστω δοκιμασα την δευτερη μεθοδο και δουλευει αψογα
(Γλυτωσα μερικα προστιμα)

Καλες εορτες


Η ώρα είναι 14:45.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2