USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Obter o hWND de uma Aplicação!?
Taylor
GUARULHOS
SP - BRASIL
ENUNCIADA !
Postada em 03/08/2004 11:02 hs            
Teria como eu obter o hWND de uma aplicação já aberta!?
E sem usar o FindWindow (que busca pelo título).
 
Obrigado!
   
PC²
Pontos: 2843 Pontos: 2843
JUCUTUQUARA, VITÓRIA
ES - BRASIL
ENUNCIADA !
Postada em 03/08/2004 23:42 hs            
Caro amigo, se a aplicação for um software que nã tenha ligação com o seu aplicativo não tem jeito, só usando findwindow, caso sua aplicação tenha sido cjamada é possível usar esta API
Declare Function GetCurrentProcess Lib "kernel32" () As Long
 
ela retorna o handle da app que chamou o seu aplicatvo

____________________________

PC²   T+

 

   
Taylor
GUARULHOS
SP - BRASIL
ENUNCIADA !
Postada em 04/08/2004 07:23 hs            
Aí Pc...blz!?
Cara, eu consegui desenvolver uma rotina com API ENUMWINDOW que exibe todos os hWnd que estão na memória, lista um por um, isto é, exibe todos os programas que estão em atividade, e com outro API o GETWINDOWTEXT exibe o caption das aplicações que estão no ar...até aqui tudo bem...mas eu não preciso pegar pelo caption, pq, se fosse isso, eu usaria o findwindow (como eu uso em alguns caso). Tb tenho uma rotina que abre o processo e lista todos os arquivos que estão na memória (exibe pelo nome executável) só que não me retorna o hwnd de cara arquivo (que é o que eu preciso). Bom...se vc já rodou aquele Spy++ que vem no visual basic, perceba q quando vc pede informações de um softwares q está na memória, ele retorna o ID, e o Module Name (que é o nome do módulo na memória) que na maioria dos caso é o nome do executável...eu preciso disso.... pegar o Module Name Apartir do hWND, ou então pegar o hWND apartir do arquivo executável.....
Eu sei que dá pra fazer, inclusive, aqui mesmo, vi um cara dizendo q fez um spy em vb...só q a mensagem dele já saiu do forum.....
Por favor...se puder me ajudar....
Ah....caso vc tenha alguma outra solução pra eu maximizar aplicativos que não são meus ou executar as teclas Alt + TAB, talvez me sirva e eu não precise listar os processos....
 
Valeu!
   
Claudio Lins
não registrado
ENUNCIADA !
Postada em 05/11/2008 12:25 hs   
Public Function GetProcessID(ProcessName As String) As Long

Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
GetProcessID = 0
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot = -1 Then Exit Function
uProcess.dwSize = Len(uProcess)
If ProcessMin(hSnapShot, uProcess) = 1 Then
    Do
        If LCase$(Left$(uProcess.szExeFile, InStr(1, uProcess.szExeFile, vbNullChar) - 1)) = LCase$(ProcessName) Then
            GetProcessID = uProcess.th32ProcessID
            'Claudio Lins
            'Debug.Print uProcess.pcPriClassBase
            Exit Do
        End If
    Loop While ProcessNext(hSnapShot, uProcess)
End If
    

CloseHandle hSnapShot
End Function
Public Function ProcessIDToWindowHandle(ByVal ProcessID As Long) As Long
Dim hWnd As Long
Dim ThreadID As Long
Dim PID As Long
' Obtem handle da primeira janela
hWnd = FindWindow(ByVal 0&, ByVal 0&)
Do While hWnd <> 0
    ' Se não for "Child window" (MDIChild = False)
    If GetParent(hWnd) = 0 Then
        ' Obtem thread e handle que estão associados a janela
        ThreadID = GetWindowThreadProcessId(hWnd, PID)
        If PID = ProcessID Then
            ProcessIDToWindowHandle = hWnd
            Exit Do
        End If
    End If
    ' Obtem handle da próxima janela
    hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
End Function

Uso..

Dim PID As Long
Dim hWnd As Long


PID = GetProcessID("SGLTerm.exe")
' Obtem handle da janela que esta associado ao PID
If PID > 0 Then
    hWnd = ProcessIDToWindowHandle(PID)
End If
   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página