Français
Source/ Codesnippets

Fensterhandle Prozessname

 

Georg
Teles
Einfaches Ermitteln eines Fensterhandle anhand des Prozessnamens bzw. PID
Déclarer exe_$, hwnd_&
' aus EXE-Namen la fenêtre-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

    Paramètres prozess$
    Déclarer hcTH32S&, out#, pid&
    Claire pid&
    Struct PROCESSENTRY32 = dwSize&, cntUsage&, th32ProcessID&, th32DefaultHeapID&, th32ModuleID&, Threads&, th32ParentProcessID&, pcPriClassBase&, dwFlags&, szExeFile$( 260 )
    Faible out#, PROCESSENTRY32
    out#.dwSize& = SizeOf( out# )
    hcTH32S& = CreateToolhelp32Snapshot( &TH32CS_SNAPPROCESS, 0 )

    Si hcTH32S&

        Si Process32First( hcTH32S&, out# )

            Repeat

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

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

                EndIf

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

            ' Alle la fenêtre volonté durchgegangen jusqu'à Treffer avec qui gesuchten PID gelandet wird
            ' allerdings is es qui erste Treffer ! d.H. si EXE mehrfach fonctionne, ist ca cela Ergebnis des ersten Treffers !
            EnumWindows( ProcAddr( "winproc", 2 ), pid& )

        EndIf

        CloseHandle( hcTH32S& )

    EndIf

    Dispose out#
    Retour 0

ENDPROC

' EnumWindowsProc

Proc winproc

    Paramètres hWnd&, lParam&
    Déclarer lpdwProcessID&
    Claire lpdwProcessID&
    GetWindowThreadProcessId( hWnd&, addr( lpdwProcessID& ) )

    Ifnot not( lpdwProcessID& = lparam& )

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

    EndIf

    return 1

ENDPROC

' Hauptprogramm
CLS
exe2handle( exe_$ )
' la fenêtre-Handle & la fenêtre-Text des gesuchten Prozesses
imprimer hwnd_&;" - ";GetText $( hwnd_& )
Waitinput

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

14.01.2015  
 




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



Michael W. (14.01.15)
Si non Not()


Sogar:

Ifnot not( lpdwProcessID& = lparam& )

ergo déjà dans qui Klammer ausgewertet, ensuite per not obs 0 ist, ensuite wenns 0 ist, pas.

de qui Logik her gibts là wohl mais rien tour auszusetzen, ist arrêt tranchant formuliert.

qui calculateur hätte jedenfalls avec

Si lpdwProcessID& = lparam&

moins trop 1faire. ^ ^
 
14.01.2015  
 




Georg
Teles
entier oui c'est ca. Im original Quellcode ( Delphi ) stand es so ähnlich, fand je a wenig witzig.
Daher aussi so übernommen avec dem Hinweis «( attention, ausbaubar !
( ou bien serait Baustellenquellcode plutôt passen )

pas sûrement si on dans Delphi es besser faire pourrait mais ici qui WinProc original

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

14.01.2015  
 



Achso, là volonté 2 Dinge erledigt - einmal qui Returnwert gesetzt - tambour cela not(result) mettons et après nochmal regarder si windowHandle gesetzt volonté soll. Aus Pascalsicht ergibts Sinn.

dans C ou bien Java wäres sichtbarer...

result=ProcessID!=LParam

si (!result) ...

mais aussi dans Delphi/Pascal peux on wohl...

result:= processid<>Lparam

mais cela wüsste Roland besser.
 
14.01.2015  
 




RGH
oui, aussi là steht Result pour den Rückgabewert qui Procédure. (Alternativ peux on mais toujours comment früher trop Turbo-Pascal-Zeiten statt "Result" den Prozedurnamen écrivons.)

Salut
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,

qui Variable Result ist une Art Retour avec dem Unterschied, dass Pascal qui Befehle jusqu'à End; abarbeitet & WindowHandle ist ici une Globale Variable
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

14.01.2015  
 




Georg
Teles
Nabend,

arbeite justement à einem Tool, chez dem un Programme gestartet wird (ici cmd.exe), benutzt et anschließend terminiert.

Um exakt cela gestartete Programme pour trouver ergo après dessen FensterHandle trop steuern, sans sur Findindow zuzugreifen (là cmd.exe oui plusieurs fois courir peux et hiermit ausgeschlossen wird, dass un d'autre cmd.exe la fenêtre gesteuert wird), wird qui Funktion 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"
Déclarer Command#,StartupInfo#,ProcessInfo#,ExitCode#
Déclarer Terminate&,Start&,Programme$
Déclarer lst&
Déclarer fwnd&, pwnd&, phnd&, gpid&
Fenêtre 1280,0-1200,800
Programm$ = "cmd.exe"
phnd& = createProcessExe(Programme$)
Imprimer "Create Prozess: "+Str$(phnd&)+" (0 = Fehler; >0 = Prozess Handle)"
Imprimer
Sleep 500
fwnd& = FindWindow("C:\Windows\SYSTEM32\cmd.exe")
gpid& = GetProcessID(phnd&)
exe2whandle("cmd.exe")
Imprimer "Gesuchtes Hanlde (wahrscheinlich!):"
Imprimer "FindWindow    / fwnd& (WindowHandle):   ";Str$(fwnd&)
Imprimer
Imprimer "Ergebnis:"
Imprimer "createProzess / phnd& (Process Handle): ";Str$(phnd&)
Imprimer "createProzess / gpid& (ProcessID):      ";Str$(gpid&)
Imprimer "createProzess / pwnd& (WindowHandle):   ";Str$(pwnd&)
Imprimer
waitinput
Imprimer "Prozess finissez: "+Str$(KillProcess(phnd&))+" (1 = OK; 0 = faute)"
waitinput

Proc exe2whandle

    Paramètres prozess$
    Déclarer hcTH32S&, out#, pid&
    Claire pid&
    Struct PROCESSENTRY32 = dwSize&, cntUsage&, th32ProcessID&, th32DefaultHeapID&, th32ModuleID&, Threads&, th32ParentProcessID&, pcPriClassBase&, dwFlags&, szExeFile$( 260 )
    Faible out#, PROCESSENTRY32
    out#.dwSize& = SizeOf(out#)
    hcTH32S& = CreateToolhelp32Snapshot(&TH32CS_SNAPPROCESS,0)

    Si hcTH32S&

        Si Process32First(hcTH32S&,out#)

            Repeat

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

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

                EndIf

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

            ' Alle la fenêtre volonté durchgegangen jusqu'à Treffer avec qui gesuchten PID gelandet wird
            ' allerdings is es qui erste Treffer ! d.H. si EXE mehrfach fonctionne, ist ca cela Ergebnis des ersten Treffers !
            EnumWindows(ProcAddr("winproc",2),pid&)

        EndIf

        CloseHandle(hcTH32S&)

    EndIf

    Dispose out#
    Retour 0

ENDPROC

Proc winproc

    Paramètres hWnd&, lParam&
    Déclarer lpdwProcessID&
    Claire lpdwProcessID&
    GetWindowThreadProcessId(hWnd&,addr(lpdwProcessID&))

    Si (lpdwProcessID& = lparam&)

        Si lpdwProcessID& = gpid&

            AddStrings(lst&,Str$(hwnd&)+"|"+Str$(lpdwProcessID&))
            pwnd& = hwnd&'----------------------------------------------| pwnd& ist ici global !
            return 0

        EndIf

    EndIf

    return 1

ENDPROC

Proc createProcessExe

    Paramètres command$
    Déclarer handle&
    Faible Command#,(Len(command$)+1)
    Faible StartupInfo#,68
    Claire startupinfo#
    Long StartupInfo#,0=68
    Faible ProcessInfo#,16
    Claire ProcessInfo#
    String Command#,0 = command$
    CreateProcess(0,Command#,0,0,0,0,0,0,StartupInfo#,ProcessInfo#)
    Laisser handle& = Long(ProcessInfo#,0)
    Dispose Command#
    Dispose StartupInfo#
    Dispose ProcessInfo#
    Retour handle&

ENDPROC

Proc KillProcess

    Paramètres hprocess&
    Faible exitcode#,4
    GetExitCodeProcess(hprocess&,exitcode#)
    TerminateProcess(hprocess&,Long(exitcode#,0))
    Dispose exitcode#

ENDPROC


EDIT:
près und dir doch einfacher avec 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
Déclarer lst&, Programme$
Déclarer fwnd&, pwnd&, phnd&, gpid&
Fenêtre 1280,0-1200,800
Programm$ = "cmd.exe"
gpid& = WinExec(Programme$,1)
Imprimer "PID WinExec: "+Str$(gpid&)+" (0 = Fehler; >0 = PID)"
Imprimer
Sleep 100
fwnd& = FindWindow("C:\Windows\SYSTEM32\cmd.exe")
exe2whandle("cmd.exe")
Imprimer "Gesuchtes Hanlde (wahrscheinlich!):"
Imprimer "FindWindow    / fwnd& (WindowHandle):   ";Str$(fwnd&)
Imprimer
Imprimer "Ergebnis:"
Imprimer "createProzess / gpid& (ProcessID):      ";Str$(gpid&)
Imprimer "createProzess / pwnd& (WindowHandle):   ";Str$(pwnd&)
Imprimer
waitinput
Imprimer "Prozess finissez: "+Str$(Process("Kill", gpid&, 0))+" (1 = OK; 0 = faute)"
waitinput

Proc exe2whandle

    Paramètres prozess$
    Déclarer hcTH32S&, out#, pid&
    Claire pid&
    Struct PROCESSENTRY32 = dwSize&, cntUsage&, th32ProcessID&, th32DefaultHeapID&, th32ModuleID&, Threads&, th32ParentProcessID&, pcPriClassBase&, dwFlags&, szExeFile$( 260 )
    Faible out#, PROCESSENTRY32
    out#.dwSize& = SizeOf(out#)
    hcTH32S& = CreateToolhelp32Snapshot(&TH32CS_SNAPPROCESS,0)

    Si hcTH32S&

        Si Process32First(hcTH32S&,out#)

            Repeat

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

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

                EndIf

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

            ' Alle la fenêtre volonté durchgegangen jusqu'à Treffer avec qui gesuchten PID gelandet wird
            ' allerdings is es qui erste Treffer ! d.H. si EXE mehrfach fonctionne, ist ca cela Ergebnis des ersten Treffers !
            EnumWindows(ProcAddr("winproc",2),pid&)

        EndIf

        CloseHandle(hcTH32S&)

    EndIf

    Dispose out#
    Retour 0

ENDPROC

Proc winproc

    Paramètres hWnd&, lParam&
    Déclarer lpdwProcessID&
    Claire lpdwProcessID&
    GetWindowThreadProcessId(hWnd&,addr(lpdwProcessID&))

    Si (lpdwProcessID& = lparam&)

        Si lpdwProcessID& = gpid&

            AddStrings(lst&,Str$(hwnd&)+"|"+Str$(lpdwProcessID&))
            pwnd& = hwnd&'----------------------------------------------| pwnd& ist ici global !
            return 0

        EndIf

    EndIf

    return 1

ENDPROC


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

27.10.2024  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

11.207 Views

Untitledvor 0 min.
Uwe ''Pascal'' NiemeierVorgestern (13:08)
Manfred Barei vor 12 Tagen
Gast.0815 vor 15 Tagen
RudiB.01.11.2024
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie