Vraag : De behoefte om een Knoop op een toepassing en een monotor te vinden het is tekst

Ik heb het gebruiken van VB6sp6 gekund van een Knoop de plaats bepalen en controleren het ben de Verandering die van de Tekst/van de Titel API Vraag gebruiken. Nu word ik belast met het bijwerken van mijn programma aan VB.NET (ik gebruik VS2008). Ik heb mijn app in VB.NET gebruikend de tovenaar in VS2008 omgezet maar aangezien u beeld enkel lerend VB.NET kunt ben ik een weinig verward. Ik houd van te begrijpen wat het verschillend doen en leert aangezien ik zelftaught.

Let me vermelding ben de Knoop op een toepassing I behoefte is om, een vlag die knoop eens in die staat te controleren en te verzenden 90 seconden. Ik kon dit in doen VB6 maar kan; t schijnt om het werkend in VB.NET

I te krijgen kan het venster vinden maar onbekwaam om verleden te krijgen die richt en vindt is de Knoop op Application.

Here wat ik tot dusver heb;

Here is de API functies ik gebruik.
Public verklaart de Lib „user32.dll“ alias „FindWindowA“ van FindWindow van de Functie (ByVal lpClassName als Koord, ByVal lpWindowName als Koord) aangezien Integer

Public de Lib „user32.dll“ verklaart van EnumWindows van de Functie (ByVal lpEnumFunc als Geheel, ByVal lParam als Geheel) aangezien Integer

Public verklaart de Lib „user32.dll“ van EnumChildWindows van de Functie (ByVal hWndParent als Geheel, ByVal lpEnumFunc als Geheel, ByVal lParam als Geheel) als Integer


This is wat het gebruik van I voor het vinden het venster….
'Set welk Venster om
vHwnd = FindWindow („ClassName“, vbNullString)

I kan meer leveren als behoefte maar… Ik denk zodra ik voorbij bovengenoemd krijg toen vraag op EnumChildWindows met volgende code
During de omzetting krijg het me deze waarschuwing tijdens Verbetering gaf en om eerlijk te zijn ik probleem heb die mijn mening krijgen rond het concept…
" toevoeg een afgevaardigde voor de Functie/>
Public FIND_RELEASE van AddressOf EnumChildProc "
Dim FoundRelease als Object
Dim OKButtonHwnd als Object
Dim i aangezien Object
HwndCount = 0 'het handvat counter
FoundReleaseButton = de Valse 'knoop van Reeksen niet found
RetVal = EnumChildWindows initialiseert (VoipHwnd, AddressOf EnumChildProc, CInt (0))

'Looks voor de Reconnect knoop (de Knoop van de Greep)
For i = 0 aan HwndCount - 1
'Search Eng om Medio Reconnect button
If te zoeken (AppClass (I), 1, 6) = „Knoop“ en Medio (AppText (I), 1, 9) = „sluiten“ opnieuw aan en FoundRelease = Vals dan 'zoekt naar o.k. button
OKButtonHwnd = AppHwnd (I) 'opslag de o.k. knoop handle
FoundRelease = Ware 'tik de schakelaarknoop found
End If
Next i
Dim FlashForm als frmFlash
If FoundRelease = Ware Then
FoundReleaseButton = True
timHold.Enabled = True
ChangeTrayIcon (me, (Me.Image3.Image))
'Seeing
If exHoldTime = CDbl („90“) Then
ChangeTrayIcon (me, (Me.Image4.Image))
FlashForm = Nieuwe frmFlash
FlashForm.ShowDialog ()
FlashForm = Nothing
End If
Exit Function
End If
End Function


om het even welk helpt of de wijzers aan welke I moet lezen zouden groot… nu zoekend naar een paar days.


zijn

Antwoord : De behoefte om een Knoop op een toepassing en een monotor te vinden het is tekst

Eerste ding dat ik beweegt uw uitvoerdersdienst buiten de lijn zou adviseren.  U moet werkelijk slechts creëren dat eens.  Afhankelijk van uw implementatie, kunt u tot het een klassenvariabele kunnen maken, of statisch die door alle instanties van deze klasse of een privé lid wordt gedeeld als elke klasse zijn eigen draadpool wenst.  Één van beide manier, zolang u niet de dienst sluit, zal u die draden kunnen opnieuw gebruiken in plaats van het oplopen van de overheadkosten van elke keer de aanvang van hen.  Als de veelvoudige vraag aan deze methode zal moeten gelijktijdig lopen, beweeg de verwezenlijking van de uitvoerdersdienst terug in de methode, maar buiten de lijn.

Het kijkt ook als u cre�ërt 10 draadpools, met 10 draden elk om elke orde te verwerken.  De code die ik wordt herwerkt om allen te verwerken voorzag orden van 10 draden heb vastgemaakt.
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:
openbare klasse ClearDownService {
    privé int.draden;
    privé executorService ExecutorService;

    openbare ClearDownService (int.draden) {
        als (draden < 1="">= 1. „);
        }
        this.threads = draden;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // ik uw te veronderstellen herhalingscode wijzigde u wat Inzameling van voorwerpen OrderModel hebt
    // dat u gebruikt om iterator te krijgen.  Aangezien u JDK 1.5+ gebruikt, zijn veel meer
    leesbaar en te handhaven // om Generics te gebruiken in plaats van het gieten van de terugkeer van iterator.next ().
    // wijzigde ik ook uw herhalingscode om het ingebouwde foreachconcept te gebruiken.
    openbare nietige checkOrders (de orden van de Inzameling) {
        // initialiseert klink voor het totale aantal orden, in plaats van draden.
        // dit verzekert alle orden worden verwerkt alvorens deze methode voltooit
        definitieve CountDownLatch startLatch = nieuwe CountDownLatch (orders.size ());

        // aangezien u JDK 1.5+ gebruikt, gemakkelijker te lezen en te handhaven als u generics gebruikt
        // en ingebouwde foreach in plaats van iterator
        voor (definitief model OrderModel: orde) {
            executorService.submit (nieuwe Jaagbaar () {
                openbare in werking gestelde leegte () {
                    probeer {
                        Tijdschema nu = Calendar.getInstance (TimeZone.getTimeZone („Europa/Londen“));
                        als (isEligibleForClearDown (model, master.getCleardownFields () .getClearDownReqFrom (), nu)) {
                            als (model.getOrderFields () .hasParentOrderId ()) {
                                // voegt alle orden van het Kind aan eindresultaat toe
                                results.add (model);
                            } anders {
                                // voegt ouderorden aan de ouderlijst toe
                                parentOrders.add (model);
                            }
                        }
                    } tenslotte {
                        // dat dit zet binnen een definitief blok verzekert het achteloos genoemd wordt
                        // van om het even welke uitzonderingen die in het lichaam van de methode voorkomen
                        startLatch.countDown ();
                    }
                }
            });
        }
        probeer {
            startLatch.await (); // wacht op alle voorwerpen om verwerking te voltooien
        } vangst (InterruptedException e) {
            LOGGER.error („Onderbroken Uitzondering terwijl het wachten op de aftelprocedureklink om te beëindigen. “);
        }
    }
}
Andere oplossingen  
 
programming4us programming4us