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²
|
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
|
|
|
|