Question : Le besoin de trouver un bouton sur une application et un monotor c'est texte

J'ai using VB6sp6 pu localiser un bouton et le surveiller est changement des textes/légende Using des appels d'api. Maintenant je suis chargé avec mettre à jour mon programme à VB.NET (j'emploie VS2008). J'ai converti mon $$etAPP en VB.NET using le magicien dans VS2008 mais comme vous pouvez image apprenant juste VB.NET je suis peu un confus. J'aime comprendre que ce qu'il faire différent et apprennent car je suis. le

Let je mention le bouton est sur une application que je dois surveiller, et envoie un drapeau une fois qui se boutonnent été dans cet état pendant 90 secondes. Je pouvais faire ceci dans VB6 mais peux ; t semblent l'obtenir fonctionnant dans le

I AM de VB.NET capable trouver la fenêtre mais incapable est d'obtenir le passé qui dirigent et trouvent le bouton sur l'Application.

Here ce que j'ai jusqu'ici ; le

Here est les fonctions d'api que j'emploie. le
Public déclarent la bibliothèque « user32.dll » dit « FindWindowA » de FindWindow de fonction (lpClassName de ByVal comme lpWindowName de corde, de ByVal comme corde) comme Integer

Public déclarent la bibliothèque « user32.dll » d'EnumWindows de fonction (lpEnumFunc de ByVal comme lParam de nombre entier, de ByVal comme nombre entier) comme Integer

Public déclarent la bibliothèque « user32.dll » d'EnumChildWindows de fonction (ByVal hWndParent comme lpEnumFunc de nombre entier, de ByVal comme lParam de nombre entier, de ByVal comme nombre entier) car est Integer


This ce que j'emploie pour la conclusion de la fenêtre….
'Set quelle fenêtre pour rechercher le
vHwnd =

I de FindWindow (« ClassName », vbNullString) peuvent fournir plus si le besoin mais… Je pense une fois que j'ai le passé où ce qui précède obtiennent alors à faire appel à EnumChildWindows avec le code
During la conversion il m'a donné cet avertissement pendant la mise à niveau et pour être honnête j'ai l'ennui obtenir mon esprit autour du
de concept… " ajouter un délégué pour la fonction FIND_RELEASE du

Public d'AddressOf EnumChildProc " () comme Boolean
Dim FoundRelease comme Object
Dim OKButtonHwnd comme Object
Dim i comme Object
HwndCount = 0 'initialisent le counter
FoundReleaseButton = 'les ensembles faux se boutonnent pas au found
RetVal = EnumChildWindows (VoipHwnd, AddressOf EnumChildProc, CInt (0))
'Looks du
pour le
For i = 0 à HwndCount - l'anglais de 1
'Search pour rechercher le button
If de rebranchement mi (AppClass (i), 1, 6) = « bouton » et mi (AppText (i), 1, 9) = « rebranchent » et FoundRelease = faux alors 'recherchent le button
OKButtonHwnd = AppHwnd (i) 'magasin le handle
FoundRelease = 'chiquenaude vraie l'i
End If
Next de bouton de commutateur/>Dim FlashForm comme frmFlash
If FoundRelease = Then
FoundReleaseButton = True
timHold.Enabled = True
ChangeTrayIcon (je, (Me.Image3.Image))exHoldTime du
'Seeing
If = CDbl (« 90 ») Then
ChangeTrayIcon (je, (Me.Image4.Image))le
FlashForm = nouveau
FlashForm.ShowDialog ()/>FlashForm = Nothing
End If
Exit Function
End If
End Function


en aident ou les indicateurs à ce que je dois lire seraient grands… recherchant maintenant deux ou trois days.


class= de

Réponse : Le besoin de trouver un bouton sur une application et un monotor c'est texte

La première chose que je recommanderais déplace votre service d'exécuteur en dehors de de la boucle.  Vous devez vraiment seulement créer cela une fois.  Selon votre exécution, vous pouvez pouvoir lui faire une variable de classe, l'une ou l'autre une charge statique qui est partagée par tous les exemples de cette classe ou d'un membre privé si chaque classe a besoin de sa propre piscine de fil.  L'une ou l'autre manière, tant que vous ne fermez pas le service, vous pourrez réutiliser ces fils au lieu d'encourir les frais généraux de les commencer chaque fois.  Si les appels multiples à cette méthode devront fonctionner simultanément, déplacer la création de service d'exécuteur de nouveau dans la méthode, mais en dehors de de la boucle.

Elle ressemble également à vous créent 10 piscines de fil, avec 10 fils chacun pour traiter chaque ordre.  Tout le code que j'ai attaché est retouché pour traiter a fourni à des ordres 10 fils.
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 :
classe publique ClearDownService {
    fils privés d'international ;
    executorService privé d'ExecutorService ;

    ClearDownService public (fils d'international) {
        si (fils < 1="">= 1. « ) ;
        }
        this.threads = fils ;
        this.executorService = Executors.newFixedThreadPool (this.threads) ;
    }

    // I a modifié votre code d'itération pour supposer que vous avez une certaine collection d'objets d'OrderModel
    // que vous employez pour obtenir l'iterator.  Puisque vous employez JDK 1.5+, son beaucoup plus
    // lisible et maintenable pour employer des médicaments génériques au lieu de mouler le retour d'iterator.next ().
    // I a également modifié votre code d'itération pour employer la construction intégrée de foreach.
    checkOrders vides de public (ordres de collection) {
        // initialisent le verrou pour tout le nombre d'ordres, au lieu des fils.
        // que ceci s'assure que tous les ordres sont traités avant que cette méthode accomplisse
        startLatch final de CountDownLatch = nouveau CountDownLatch (orders.size ());

        // puisque vous employez JDK 1.5+, plus facile de lire et maintenir si vous employez des médicaments génériques
        // et le foreach intégré au lieu de l'iterator
        pour (modèle final d'OrderModel : ordres) {
            executorService.submit (nouveau praticable () {
                vide de public couru () {
                    essai {
                        Calendrier maintenant = Calendar.getInstance (TimeZone.getTimeZone (la « Europe/Londres »));
                        si (isEligibleForClearDown (modèle, master.getCleardownFields () .getClearDownReqFrom (), maintenant)) {
                            si (model.getOrderFields () .hasParentOrderId ()) {
                                // ajoutent tous les ordres d'enfant au résultat final
                                results.add (modèle) ;
                            } autrement {
                                // ajoutent des ordres de parent à la liste de parent
                                parentOrders.add (modèle) ;
                            }
                        }
                    } finalement {
                        // mettant ceci dans finalement un bloc s'assure qu'il obtient appelé sans se soucier
                        // de toutes exceptions qui se produisent dans le corps de la méthode
                        startLatch.countDown () ;
                    }
                }
            }) ;
        }
        essai {
            startLatch.await () ; attente de // tous les objets au traitement complet
        } crochet (InterruptedException e) {
            LOGGER.error (« exception interrompue tout en attendant le verrou de compte à rebours à end.") ;
        }
    }
}
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us