Fråga : Behov att finna en knäppas på en applikation och en monotor det är text

Jag har using vara VB6sp6 kompetent att lokalisera en knäppas, och att övervaka den är text/förser med text ändring Using API-appeller. Mig nu förmiddag tasked med att uppdatera mitt program till VB.NET (I-förmiddag using VS2008). Jag har konverterat min app till VB.NET using trollkarlen i VS2008 men som dig kan avbilda lära precis förmiddag för VB.NET I ett lite förvirrat. Jag gillar för att förstå att vad den att göra som är olikt och lärer som I-förmiddagsjälven taught.

Let mig omnämnande, knäppas är på en applikation som jag behöver att övervaka och överför en sjunka en gång som knäppas vart statlig för 90 understöder däri. Jag var kompetent att göra detta i VB6 men kan; t verkar för att få den funktionsduglig i förmiddagen för VB.NET-

I är kompetent att finna fönstret, men oförmöget att få förgånget, som pekar och finner, knäppas på Application.
Here är vad jag har så långt;

Here är APIEN fungerar I-förmiddag using.
Public förklarar fungerar pseudonymen ”FindWindowA” för den FindWindow liben ”user32.dll” (ByVal lpClassName som stränger, ByVal lpWindowName som stränger) som Integer

Public förklarar fungerar den EnumWindows liben ”user32.dll” (ByVal lpEnumFunc som heltal-, ByVal lParam som heltal) som Integer

Public förklarar fungerar den EnumChildWindows liben ”user32.dll” (ByVal som är hWndParent som heltal-, ByVal lpEnumFunc som heltal-, ByVal lParam som heltal) som Integer


This är vad jag använder för finna fönstret….,
'Set vilket fönster som söker efter
vHwnd = FindWindow (”ClassName” som vbNullString)

I kan leverera mer, om behov men…, Funderare I, när jag får förgånget det ovannämnt, får därefter appellen på EnumChildWindows med efter codeDuring omvandlingen som den gav mig denna varning under förbättring, och att vara ärliga I-förmiddagen som den har, besvära att få mitt varar besvärad runt om den begrepps… , " tillfoga en delegat för AddressOf EnumChildProc "

Public fungerar FIND_RELEASE () som Boolean
Dim FoundRelease som Object
Dim OKButtonHwnd som Object
Dim i, som Object
HwndCount = 0 'initialiserar handtagcounterFoundReleaseButton = falska 'uppsättningar knäppas till inte found
RetVal = EnumChildWindows (VoipHwnd, AddressOf EnumChildProc, CInt (0))
'Looks för
för återinkopplingen knäppas (hållen knäppas),
For i = 0 till HwndCount - engelska för 1
'Search som söker efter den mitt- återinkopplingsbuttonIf (AppClass (I), 1, 6) = ”knäppas”, och mitt- (AppText (I), 1, 9) = ”återinkoppla”, och FoundRelease = falskt 'söker därefter för den ok buttonOKButtonHwnd = AppHwnd (I) 'lager som oken knäppas handle
FoundRelease = den riktiga 'flipen, koppla knäppas i
Dim FlashForm för found
End If
Next som frmFlash
If FoundRelease = riktiga Then
FoundReleaseButton = True
timHold.Enabled = True
ChangeTrayIcon (mig, (Me.Image3.Image))exHoldTime för
'Seeing
If = CDbl (”90”) Then
ChangeTrayIcon (mig, (Me.Image4.Image))
FlashForm = ny
FlashForm.ShowDialog ()/>FlashForm = Nothing
End If
Exit Function
End If
End Function


några hjälper, eller pekare till vad jag behöver att läsa skulle, är stort… som nu söker för en koppla ihop av days.


" klar "

Svar : Behov att finna en knäppas på en applikation och en monotor det är text

Första ting som jag skulle rekommenderar är röra din tjänste- executor förutom kretsa.  Du behöver egentligen endast att skapa det en gång.  Beroende av ditt genomförande du kan vara kompetent att göra det en klassificeravariabel som är antingen en statisk elektricitet alla som delas av anföra som exempel av denna klassificerar, eller en privat medlem, om varje klassificerar behov dess egna tråd slår samman.  Endera långt, så länge som du inte stänger det tjänste-, besegrar, dig ska är kompetent att återanvända de trådar, i stället för att åsamka sig fast utgift av start dem varje tid.  Om multipelappeller till denna ska metod behöver att köra samtidigt, flyttningen den tjänste- skapelsebaksidaen för executoren in i metoden, men förutom kretsa.

Den ser också något liknande som du skapar 10 trådtips, med 10 trådar varje för att bearbeta varje beställer.  Kodifiera som jag har fäst, omarbetas för att bearbeta förutsatt att alla beställer med 10 trådar.
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:
allmänhet klassificerar ClearDownService {
    privata int-trådar;
    privat ExecutorService executorService;

    offentliga ClearDownService (int-trådar) {
        om (trådar < 1="">= 1. ”);
        }
        this.threads = trådar;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // I ändrade din upprepning kodifierar för att anta att du har någon samling av OrderModel anmärker
    // att du använder för att få iteratoren.  Sedan du använder JDK 1.5+ som är dess mycket mer
    försvarbar // som är läslig och att använda Generics i stället för rollbesättning returen av iterator.next ().
    // I ändrade också din upprepning kodifierar för att använda den inbyggde foreachtankeskapelsen.
    offentliga utan laga kraft checkOrders (samlingen beställer) {
        // initialiserar låser för slutsumman numrerar av beställer, i stället för trådar.
        // som detta ser till att allt beställer bearbetas, för denna metod avslutar
        finalCountDownLatch startLatch = nya CountDownLatch (orders.size ());

        //, sedan du använder JDK 1.5+ som är lättare att läsa och underhålla, om du använder generics
        // och den inbyggde foreachen i stället för iteratoren
        för (finalen OrderModel modellerar: beställer) {
            executorService.submit (nya Runnable () {
                offentligt annullera körningen () {
                    försök {
                        Kalender nu = Calendar.getInstance (TimeZone.getTimeZone (”Europa/London”));
                        om (isEligibleForClearDown (modellera, master.getCleardownFields () .getClearDownReqFrom (), nu)), {
                            om (model.getOrderFields () .hasParentOrderId ()) {
                                // tillfogar allt barn beställer till finalresultatet
                                results.add (modellera);
                            } annars {
                                // tillfogar föräldern beställer till föräldern listar
                                parentOrders.add (modellera);
                            }
                        }
                    } slutligen {
                        // som sätter denna i ett kvarter, ser till slutligen att det får kallat utan hänsyn
                        // av några undantag som uppstår i förkroppsliga av metoden
                        startLatch.countDown ();
                    }
                }
            });
        }
        försök {
            startLatch.await (); den // alla väntan för anmärker för att avsluta att bearbeta
        } fånga (InterruptedException e) {
            LOGGER.error (”avbrutna undantagsstunder som väntar nedräkningen, låser för att avsluta. ”);
        }
    }
}
Andra lösningar  
 
programming4us programming4us