Questione : Necessità di trovare un tasto su un'applicazione e su un monotor è testo

Ho using VB6sp6 potuto individuare un tasto e controllarlo è cambiamento titolo/del testo Using le chiamate di api. Ora sono incaricato con l'aggiornamento del mio programma a VB.NET (sto usando VS2008). Ho convertito il mio app in VB.NET using lo stregone in VS2008 ma come potete immagine che imparate appena VB.NET io sono poco un confuso. Gradico capire che che cosa fare differente ed impara poichè sono.

Let me menzione il tasto è su un'applicazione devo controllare e trasmette una bandierina una volta che si abbottona stato in quella condizione per 90 secondi. Potevo fare questo in VB6 ma posso; la t sembra ottenerla che funziona nel

I di VB.NET in grado di trovare la finestra ma incapace di ottenere il passato che indica e trova il tasto sul Application.

Here è che cosa ho finora; il

Here è le funzioni che di api sto usando. il
Public dichiara il movimento di liberazione “user32.dll„ altrimenti detto “FindWindowA„ di FindWindow di funzione (lpClassName di ByVal come lpWindowName di ByVal, della stringa come stringa) come Integer

Public dichiara il movimento di liberazione “user32.dll„ di EnumWindows di funzione (lpEnumFunc di ByVal come lParam di ByVal, di numero intero come numero intero) come Integer

Public dichiara il movimento di liberazione “user32.dll„ di EnumChildWindows di funzione (ByVal hWndParent come lpEnumFunc di ByVal, di numero intero come lParam di ByVal, di numero intero come numero intero) poichè Integer


This è che cosa uso per l'individuazione della finestra….
'Set che finestra per cercare il
vHwnd = il

I di FindWindow (“ClassName„, vbNullString) possono fornire più se bisogno ma… Penso una volta che ottengo il passato che quanto sopra ottengono allora a chiamata su EnumChildWindows con il seguente code
During la conversione mi ha avvertito questo durante l'aggiornamento ed essere onesto io stanno avendo difficoltà ottenere la mia mente intorno al
di concetto… " aggiungere un delegato per funzione FIND_RELEASE del

Public di AddressOf EnumChildProc " () come Boolean
Dim FoundRelease come Object
Dim OKButtonHwnd come Object
Dim i come Object
HwndCount = 0 'inizializza il counter
FoundReleaseButton = 'insiemi falsi si abbottona non a found
RetVal = EnumChildWindows (VoipHwnd, AddressOf EnumChildProc, CInt (0))
'Looks del
per il
For i = 0 del tasto di ricollegamento (tasto della stretta) a HwndCount - inglese di 1
'Search per cercare il button
If di ricollegamento metà di (AppClass (i), 1, 6) = “tasto„ e metà di (AppText (i), 1, 9) = “ricollega„ e FoundRelease = falso allora 'cerca il button
OKButtonHwnd = AppHwnd (i) 'deposito il handle
FoundRelease = 'vibrazione allineare il i
Dim FlashForm del found
End If
Next del tasto di interruttore come frmFlash
If FoundRelease = Then
FoundReleaseButton = True
timHold.Enabled = True
ChangeTrayIcon (me, (Me.Image3.Image))exHoldTime del
'Seeing
If = CDbl (“90„) Then
ChangeTrayIcon (me, (Me.Image4.Image))il
FlashForm = nuovo
FlashForm.ShowDialog ()/>FlashForm = Nothing
End If
Exit Function
End If
End Function


c'è ne aiuta o gli indicatori a che cosa devo leggere sarebbero grande… ora che cercano una coppia di days.


class= del

Risposta : Necessità di trovare un tasto su un'applicazione e su un monotor è testo

La prima cosa che suggerirei sta spostando il vostro servizio dell'esecutore fuori del ciclo.  Dovete realmente soltanto generare una volta quello.  Secondo la vostra esecuzione, potete potere rendergli una variabile del codice categoria, l'una o l'altra un'elettricità statica che è ripartita da tutti i casi di questo codice categoria o di un membro riservato se ogni codice categoria ha bisogno del relativo proprio stagno del filetto.  Il uno o il altro senso, finchè non chiudete il servizio giù, potrete riutilizzare quei filetti invece di subire le spese generali di iniziarli sempre.  Se le chiamate multiple a questo metodo debbano funzionare simultaneamente, spostare la creazione di servizio dell'esecutore nuovamente dentro il metodo, ma fuori del ciclo.

Inoltre assomiglia voi sta generando 10 stagni del filetto, con 10 filetti ciascuno per procedare ogni ordine.  Il codice che ho attaccato è ripreso per procedare tutto ha fornito gli ordini 10 filetti.
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:
codice categoria pubblico ClearDownService {
    filetti riservati di int;
    executorService riservato di ExecutorService;

    ClearDownService pubblico (filetti di int) {
        se (filetti < 1="">= 1. “);
        }
        this.threads = filetti;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // I ha modificato il vostro codice di ripetizione per presupporre che aveste certa accumulazione degli oggetti di OrderModel
    // che state usando per ottenere il iterator.  Poiché state usando il JDK 1.5+, relativo molto più
    // leggibile e mantenibile usare i Generics invece di lanciare il ritorno di iterator.next ().
    // I inoltre ha modificato il vostro codice di ripetizione per usare la costruzione incorporata del foreach.
    checkOrders vuoti del pubblico (ordini di accumulazione) {
        // inizializza il fermo per il numero totale degli ordini, anziché i filetti.
        // questo assicura che tutti gli ordini siano procedati prima che questo metodo completi
        startLatch finale che di CountDownLatch = nuovo CountDownLatch (orders.size ());

        // poiché state usando il JDK 1.5+, più facile leggere ed effettuare se usate i generics
        // e il foreach incorporato anziché il iterator
        per (modello finale di OrderModel: ordini) {
            executorService.submit (nuovo praticabile () {
                vuoto del pubblico funzionato () {
                    prova {
                        Calendario ora = Calendar.getInstance (TimeZone.getTimeZone (“Europa/Londra„));
                        se (isEligibleForClearDown (modello, master.getCleardownFields () .getClearDownReqFrom (), ora)) {
                            se (model.getOrderFields () .hasParentOrderId ()) {
                                // aggiunge tutti gli ordini del bambino al risultato finale
                                results.add (modello);
                            } altrimenti {
                                // aggiunge gli ordini del genitore alla lista di genitore
                                parentOrders.add (modello);
                            }
                        }
                    } infine {
                        // che mette questo infine in un blocco assicura che ottenga denominato con noncuranza
                        // di qualsiasi eccezioni che si presentano nel corpo del metodo
                        startLatch.countDown ();
                    }
                }
            });
        }
        prova {
            startLatch.await (); aspettare di // tutti gli oggetti all'elaborazione completa
        } fermo (InterruptedException e) {
            LOGGER.error (“eccezione interrotta mentre aspettando il fermo di conto alla rovescia a end.");
        }
    }
}
Altre soluzioni  
 
programming4us programming4us