Español
Fuente/ Codesnippets

Fensterhandle Prozessname

 

Georg
Teles
Einfaches Ermitteln uno Fensterhandle anhand des Prozessnamens o. PID
Declarar exe_$, hwnd_&
' de EXE-Namen Ventana-Handle ermittlen
exe_$ = Substr$( Par$( 0 ), -1, "\\" )
'exe_$ = "irgendeine.exe"
' DEF
Def CreateToolhelp32Snapshot(2) ! "Kernel32", "CreateToolhelp32Snapshot"
Def Process32First(2)           ! "Kernel32", "Process32First"
Def Process32Next(2)            ! "Kernel32", "Process32Next"
Def CloseHandle(1)              ! "Kernel32", "CloseHandle"
Def EnumWindows(2)              ! "User32", "EnumWindows"
Def GetWindowThreadProcessId(2) ! "User32", "GetWindowThreadProcessId"
' Konstante
Def &TH32CS_SNAPPROCESS $2
'

Proc exe2handle

    Parámetros prozess$
    Declarar hcTH32S&, out#, pid&
    Claro pid&
    Struct PROCESSENTRY32 = dwSize&, cntUsage&, th32ProcessID&, th32DefaultHeapID&, th32ModuleID&, Threads&, th32ParentProcessID&, pcPriClassBase&, dwFlags&, szExeFile$( 260 )
    Dim out#, PROCESSENTRY32
    out#.dwSize& = SizeOf( out# )
    hcTH32S& = CreateToolhelp32Snapshot( &TH32CS_SNAPPROCESS, 0 )

    If hcTH32S&

        If Process32First( hcTH32S&, out# )

            Repeat

                If Lower$( out#.szExeFile$ ) = Lower$( prozess$ )

                    ' PID vom EXE-Namen auslesen
                    pid& = out#.th32ProcessID&

                EndIf

            Until ( pid& = not( 0 ) ) | ( Process32Next( hcTH32S&, out# ) = 0 )

            ' Alle Ventana voluntad durchgegangen a Treffer con el gesuchten PID gelandet se
            ' allerdings is lo el erste Treffer ! d.H. si EXE mehrfach se ejecuta, es dies el Ergebnis des ersten Treffers !
            EnumWindows( ProcAddr( "winproc", 2 ), pid& )

        EndIf

        CloseHandle( hcTH32S& )

    EndIf

    Disponer out#
    Volver 0

ENDPROC

' EnumWindowsProc

Proc winproc

    Parámetros hWnd&, lParam&
    Declarar lpdwProcessID&
    Claro lpdwProcessID&
    GetWindowThreadProcessId( hWnd&, addr( lpdwProcessID& ) )

    Ifnot not( lpdwProcessID& = lparam& )

        hwnd_& = hwnd&'----------------------------------------------| GLOBALE Variable « hwnd_& » !
        volver 0

    EndIf

    volver 1

ENDPROC

' Hauptprogramm
CLS
exe2handle( exe_$ )
' Ventana-Handle & Ventana-Texto des gesuchten Prozesses
imprimir hwnd_&;" - ";GetText $( hwnd_& )
Waitinput

( Achtung, ausbaubar ! )
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.01.2015  
 




Michael
W.
Caso negativo Not()
 
XProfan X3
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
14.01.2015  
 



Michael W. (14.01.15)
Caso negativo Not()


Sogar:

Ifnot not( lpdwProcessID& = lparam& )

ergo ya en el Klammer ausgewertet, entonces por not obs 0 es, entonces wenns 0 es, no.

Von el Logik her gibts como wohl aber nichts dran auszusetzen, es sólo scharf formuliert.

Der Rechner hätte jedenfalls con

If lpdwProcessID& = lparam&

weniger a tun. ^ ^
 
14.01.2015  
 




Georg
Teles
Ganz genau. Im original Quellcode ( Delphi ) stand lo así ähnlich, fand Yo a wenig witzig.
Daher auch así übernommen con el Referencia «( Achtung, ausbaubar !
( oder sería Baustellenquellcode más passen )

No sicher si uno en Delphi lo mejor hacer podría aber hier el WinProc original

Quelle: [...] 
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.01.2015  
 



Achso, como voluntad 2 Dinge hecho - una vez el Returnwert gesetzt - tambor el not(resultado) conjunto y danach otra vez schauen si windowHandle gesetzt voluntad se. Aus Pascalsicht ergibts Sinn.

In C oder Java wäres sichtbarer...

result=ProcessID!=LParam

if (!resultado) ...

Aber auch en Delphi/Pascal puede ser wohl...

resultado:= processid<>Lparam

aber el saber Roland mejor.
 
14.01.2015  
 




RGH
Sí, auch como es Result para el Rückgabewert el Procedimiento. (Alternativ puede ser aber siempre todavía como früher a Turbo-Pascal-Veces en lugar de "Result" el Prozedurnamen escribir.)

Saludo
Roland
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
14.01.2015  
 




Georg
Teles
Aah verstehe,

el Variable Result es una Art Volver con el Diferencia, dass Pascal el Befehle a End; abarbeitet & WindowHandle es hier una Globale Variable
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.01.2015  
 




Georg
Teles
Nabend,

arbeite gerade a una Tool, en el una Programa comenzó se (hier cmd.exe), benutzt y anschließend terminiert.

Um exakt el gestartete Programa para encontrar ergo danach dessen FensterHandle a steuern, sin en Findindow zuzugreifen (como cmd.exe sí mehrmals laufen kann y hiermit ausgeschlossen se, que un más cmd.exe Ventana gesteuert se), se el Función WinProc benutzt.
Def CreateToolhelp32Snapshot(2) ! "KERNEL32", "CreateToolhelp32Snapshot"
Def Process32First(2)           ! "KERNEL32", "Process32First"
Def Process32Next(2)            ! "KERNEL32", "Process32Next"
Def CloseHandle(1)              ! "KERNEL32", "CloseHandle"
Def EnumWindows(2)              ! "USER32", "EnumWindows"
Def GetWindowThreadProcessId(2) ! "USER32", "GetWindowThreadProcessId"
Def &TH32CS_SNAPPROCESS $2
Def GetProcessId(1)             ! "KERNEL32", "GetProcessId"
Def CreateProcess(10)           ! "KERNEL32","CreateProcessA"
Def GetExitCodeProcess(2)       ! "KERNEL32","GetExitCodeProcess"
Def TerminateProcess(2)         ! "KERNEL32","TerminateProcess"
Declarar Command#,StartupInfo#,ProcessInfo#,ExitCode#
Declarar Terminate&,Start&,Programa$
Declarar lst&
Declarar fwnd&, pwnd&, phnd&, gpid&
Ventana 1280,0-1200,800
Programm$ = "cmd.exe"
phnd& = createProcessExe(Programa$)
Imprimir "Create Prozess: "+Str$(phnd&)+" (0 = Fehler; >0 = Prozess Handle)"
Imprimir
Sleep 500
fwnd& = FindWindow("C:\Windows\SYSTEM32\cmd.exe")
gpid& = GetProcessID(phnd&)
exe2whandle("cmd.exe")
Imprimir "Gesuchtes Hanlde (wahrscheinlich!):"
Imprimir "FindWindow    / fwnd& (WindowHandle):   ";Str$(fwnd&)
Imprimir
Imprimir "Ergebnis:"
Imprimir "createProzess / phnd& (Process Handle): ";Str$(phnd&)
Imprimir "createProzess / gpid& (ProcessID):      ";Str$(gpid&)
Imprimir "createProzess / pwnd& (WindowHandle):   ";Str$(pwnd&)
Imprimir
waitinput
Imprimir "Prozess final: "+Str$(KillProcess(phnd&))+" (1 = OK; 0 = Fehler)"
waitinput

Proc exe2whandle

    Parámetros prozess$
    Declarar hcTH32S&, out#, pid&
    Claro pid&
    Struct PROCESSENTRY32 = dwSize&, cntUsage&, th32ProcessID&, th32DefaultHeapID&, th32ModuleID&, Threads&, th32ParentProcessID&, pcPriClassBase&, dwFlags&, szExeFile$( 260 )
    Dim out#, PROCESSENTRY32
    out#.dwSize& = SizeOf(out#)
    hcTH32S& = CreateToolhelp32Snapshot(&TH32CS_SNAPPROCESS,0)

    If hcTH32S&

        If Process32First(hcTH32S&,out#)

            Repeat

                If Lower$(out#.szExeFile$) = Lower$(prozess$)

                    ' PID vom EXE-Namen auslesen
                    pid& = out#.th32ProcessID&

                EndIf

            Until (pid& = not(0)) | (Process32Next(hcTH32S&,out#)=0)

            ' Alle Ventana voluntad durchgegangen a Treffer con el gesuchten PID gelandet se
            ' allerdings is lo el erste Treffer ! d.H. si EXE mehrfach se ejecuta, es dies el Ergebnis des ersten Treffers !
            EnumWindows(ProcAddr("winproc",2),pid&)

        EndIf

        CloseHandle(hcTH32S&)

    EndIf

    Disponer out#
    Volver 0

ENDPROC

Proc winproc

    Parámetros hWnd&, lParam&
    Declarar lpdwProcessID&
    Claro lpdwProcessID&
    GetWindowThreadProcessId(hWnd&,addr(lpdwProcessID&))

    If (lpdwProcessID& = lparam&)

        If lpdwProcessID& = gpid&

            AddStrings(lst&,Str$(hwnd&)+"|"+Str$(lpdwProcessID&))
            pwnd& = hwnd&'----------------------------------------------| pwnd& es hier global !
            volver 0

        EndIf

    EndIf

    volver 1

ENDPROC

Proc createProcessExe

    Parámetros command$
    Declarar handle&
    Dim Command#,(Len(command$)+1)
    Dim StartupInfo#,68
    Claro startupinfo#
    Largo StartupInfo#,0=68
    Dim ProcessInfo#,16
    Claro ProcessInfo#
    String Command#,0 = command$
    CreateProcess(0,Command#,0,0,0,0,0,0,StartupInfo#,ProcessInfo#)
    Let handle& = Largo(ProcessInfo#,0)
    Disponer Command#
    Disponer StartupInfo#
    Disponer ProcessInfo#
    Volver handle&

ENDPROC

Proc KillProcess

    Parámetros hprocess&
    Dim exitcode#,4
    GetExitCodeProcess(hprocess&,exitcode#)
    TerminateProcess(hprocess&,Largo(exitcode#,0))
    Disponer exitcode#

ENDPROC


EDIT:
Nah lo va doch einfacher con WinExec
Def CreateToolhelp32Snapshot(2) ! "KERNEL32", "CreateToolhelp32Snapshot"
Def Process32First(2)           ! "KERNEL32", "Process32First"
Def Process32Next(2)            ! "KERNEL32", "Process32Next"
Def CloseHandle(1)              ! "KERNEL32", "CloseHandle"
Def EnumWindows(2)              ! "USER32", "EnumWindows"
Def GetWindowThreadProcessId(2) ! "USER32", "GetWindowThreadProcessId"
Def &TH32CS_SNAPPROCESS $2
Declarar lst&, Programa$
Declarar fwnd&, pwnd&, phnd&, gpid&
Ventana 1280,0-1200,800
Programm$ = "cmd.exe"
gpid& = WinExec(Programa$,1)
Imprimir "PID WinExec: "+Str$(gpid&)+" (0 = Fehler; >0 = PID)"
Imprimir
Sleep 100
fwnd& = FindWindow("C:\Windows\SYSTEM32\cmd.exe")
exe2whandle("cmd.exe")
Imprimir "Gesuchtes Hanlde (wahrscheinlich!):"
Imprimir "FindWindow    / fwnd& (WindowHandle):   ";Str$(fwnd&)
Imprimir
Imprimir "Ergebnis:"
Imprimir "createProzess / gpid& (ProcessID):      ";Str$(gpid&)
Imprimir "createProzess / pwnd& (WindowHandle):   ";Str$(pwnd&)
Imprimir
waitinput
Imprimir "Prozess final: "+Str$(Process("Kill", gpid&, 0))+" (1 = OK; 0 = Fehler)"
waitinput

Proc exe2whandle

    Parámetros prozess$
    Declarar hcTH32S&, out#, pid&
    Claro pid&
    Struct PROCESSENTRY32 = dwSize&, cntUsage&, th32ProcessID&, th32DefaultHeapID&, th32ModuleID&, Threads&, th32ParentProcessID&, pcPriClassBase&, dwFlags&, szExeFile$( 260 )
    Dim out#, PROCESSENTRY32
    out#.dwSize& = SizeOf(out#)
    hcTH32S& = CreateToolhelp32Snapshot(&TH32CS_SNAPPROCESS,0)

    If hcTH32S&

        If Process32First(hcTH32S&,out#)

            Repeat

                If Lower$(out#.szExeFile$) = Lower$(prozess$)

                    ' PID vom EXE-Namen auslesen
                    pid& = out#.th32ProcessID&

                EndIf

            Until (pid& = not(0)) | (Process32Next(hcTH32S&,out#)=0)

            ' Alle Ventana voluntad durchgegangen a Treffer con el gesuchten PID gelandet se
            ' allerdings is lo el erste Treffer ! d.H. si EXE mehrfach se ejecuta, es dies el Ergebnis des ersten Treffers !
            EnumWindows(ProcAddr("winproc",2),pid&)

        EndIf

        CloseHandle(hcTH32S&)

    EndIf

    Disponer out#
    Volver 0

ENDPROC

Proc winproc

    Parámetros hWnd&, lParam&
    Declarar lpdwProcessID&
    Claro lpdwProcessID&
    GetWindowThreadProcessId(hWnd&,addr(lpdwProcessID&))

    If (lpdwProcessID& = lparam&)

        If lpdwProcessID& = gpid&

            AddStrings(lst&,Str$(hwnd&)+"|"+Str$(lpdwProcessID&))
            pwnd& = hwnd&'----------------------------------------------| pwnd& es hier global !
            volver 0

        EndIf

    EndIf

    volver 1

ENDPROC


Grüße
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

27.10.2024  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

11.240 Views

Untitledvor 0 min.
WalterGestern (21:14)
R.Schneider vor 5 Tagen
Uwe ''Pascal'' Niemeier vor 11 Tagen
Manfred Barei vor 21 Tagen
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie