Pergunta : Necessidade de encontrar uma tecla em uma aplicação e em um monotor é texto

Eu tenho using VB6sp6 podido encontrar uma tecla e monitorá-la é mudança do texto/subtítulo Using chamadas do API. Eu sou encarregado agora com atualização de meu programa a VB.NET (eu estou usando VS2008). Eu converti meu app a VB.NET using o feiticeiro em VS2008 mas como você pode imagem apenas que aprende VB.NET mim sou um pouco confuso. Eu gosto de compreender que o que fazer diferente e aprende porque eu sou o auto taught.

Let mim menção a tecla está em uma aplicação que eu preciso de monitorar, e emite uma bandeira uma vez que se abotoe sido nesse estado por 90 segundos. Eu podia fazer isto em VB6 mas posso; t parece começ o que trabalha no

I am de VB.NET capaz de encontrar a janela mas incapaz de começ o passado que aponta e encontra a tecla no Application.

Here é o que eu tenho até agora; o

Here é as funções que do API eu me estou usando. o
Public declara o liberal “user32.dll” aliás “FindWindowA” de FindWindow da função (lpClassName de ByVal como o lpWindowName da corda, do ByVal como a corda) como Integer

Public declara o liberal “user32.dll” de EnumWindows da função (lpEnumFunc de ByVal como o lParam do inteiro, do ByVal como o inteiro) como Integer

Public declara o liberal “user32.dll” de EnumChildWindows da função (ByVal hWndParent como o lpEnumFunc do inteiro, do ByVal como o lParam do inteiro, do ByVal como o inteiro) porque Integer


This é o que eu me uso para encontrar a janela….
'Set que janela para procurar o
vHwnd = o

I de FindWindow (“ClassName”, vbNullString) podem fornecer mais se necessidade mas… Eu penso uma vez que eu começ o passado onde o acima começ então a chamada em EnumChildWindows com o seguinte code
During a conversão me deu este aviso durante o melhoramento e para ser honesto mim estão tendo o problema começ minha mente em torno do
do conceito… " adicionar um delegado para a função FIND_RELEASE do

Public de AddressOf EnumChildProc " () como Boolean
Dim FoundRelease como Object
Dim OKButtonHwnd como Object
Dim i como Object
HwndCount = 0 'inicializa o counter
FoundReleaseButton = 'jogos falsos se abotoa não ao found
RetVal = EnumChildWindows (VoipHwnd, AddressOf EnumChildProc, CInt (0))
'Looks do
para o
For i = 0 da tecla da reconexão (tecla da preensão) a HwndCount - inglês de 1
'Search para procurar o button
If da reconexão meados de (AppClass (i), 1, 6) = “tecla” e meados de (AppText (i), 1, 9) = “reconeta” e FoundRelease = falso então 'procurara pelo button
OKButtonHwnd = AppHwnd (i) 'loja o handle
FoundRelease = 'aleta verdadeira o i
Dim FlashForm do found
End If
Next da tecla de interruptor como o frmFlash
If FoundRelease = Then
FoundReleaseButton = True
timHold.Enabled = True
ChangeTrayIcon (mim, (Me.Image3.Image))exHoldTime do
'Seeing
If = CDbl (“90”) Then
ChangeTrayIcon (mim, (Me.Image4.Image))o
FlashForm =
FlashForm.ShowDialog ()/>FlashForm = Nothing
End If
Exit Function
End If
End Function


algum ajuda ou os ponteiros a o que eu preciso de ler seriam grandes… que procuraram agora por um par days.


class= do

Resposta : Necessidade de encontrar uma tecla em uma aplicação e em um monotor é texto

A primeira coisa que eu recomendaria está movendo seu serviço do executor fora do laço.  Você precisa realmente somente de criar uma vez aquele.  Dependendo de sua execução, você pode poder fazer-lhe uma variável da classe, qualquer uma uma estática que esteja compartilhada por todos os exemplos desta classe ou de um membro confidencial se cada classe precisa sua própria associação da linha.  Uma ou outra maneira, contanto que você não fechar o serviço para baixo, você poderá reúso aquelas linhas em vez de incorrer as despesas gerais de começá-las todas as vezes.  Se as chamadas múltiplas a este método precisarão de funcionar simultaneamente, mover a criação do serviço do executor de novo no método, mas fora do laço.

Igualmente olha como você está criando 10 associações da linha, com as 10 linhas cada um para processar cada ordem.  Todo o código que eu uni reworked para processar forneceu ordens as 10 linhas.
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 pública ClearDownService {
    linhas confidenciais do int;
    executorService confidencial de ExecutorService;

    ClearDownService público (linhas do int) {
        se (linhas < 1="">= 1. “);
        }
        this.threads = linhas;
        this.executorService = Executors.newFixedThreadPool (this.threads);
    }

    // I modificou seu código da iteração para supr que você tem alguma coleção de objetos de OrderModel
    // que você se está usando para começ o iterator.  Desde que você está usando JDK 1.5+, seu muito mais
    // legível e maintainable para usar produtos genéricos em vez de moldar o retorno de iterator.next ().
    // I igualmente modificou seu código da iteração para usar a construção interna do foreach.
    checkOrders vagos do público (ordens de coleção) {
        // inicializa a trava para o número total de ordens, em vez das linhas.
        // que isto se assegura de que todas as ordens estejam processadas antes que este método terminar
        startLatch final de CountDownLatch = CountDownLatch novo (orders.size ());

        // desde que você está usando JDK 1.5+, mais fácil ler e manter se você usa produtos genéricos
        // e o foreach interno em vez do iterator
        para (modelo final de OrderModel: ordens) {
            executorService.submit (praticável novo () {
                o vácuo do público funciona () {
                    tentativa {
                        Calendário agora = Calendar.getInstance (TimeZone.getTimeZone (“Europa/Londres”));
                        se (isEligibleForClearDown (modelo, master.getCleardownFields () .getClearDownReqFrom (), agora)) {
                            se (model.getOrderFields () .hasParentOrderId ()) {
                                // adiciona todas as ordens da criança ao resultado final
                                results.add (modelo);
                            } mais {
                                // adiciona ordens do pai à lista de pai
                                parentOrders.add (modelo);
                            }
                        }
                    } finalmente {
                        // que põr este finalmente em um bloco assegura-se de que começ chamado de qualquer maneira
                        // de algumas exceções que ocorrerem no corpo do método
                        startLatch.countDown ();
                    }
                }
            });
        }
        tentativa {
            startLatch.await (); espera de // para todos os objetos ao processamento completo
        } prendedor (InterruptedException e) {
            LOGGER.error (“exceção interrompida ao esperar a trava da contagem regressiva a end.");
        }
    }
}
Outras soluções  
 
programming4us programming4us