Hilfe suche nach einem Bild in der Imglist

  • VB.NET

Es gibt 67 Antworten in diesem Thema. Der letzte Beitrag () ist von Dfgpoint.

    Nun, wenn es Dein Programm schafft, in 1-2 Sekunden alle Prozesse auf dem Zielcomputer aufzulisten, dann ok. Dank der vielen Prozesse, bei denen mir der Zugriff verweigert wird, fliegen bei mir die Exceptions nur so um die Ohren, sodass der Auflistungsprozess knapp 7 sec dauert.
    Dass Du Timer benutzt, stell ich ja nicht infrage, sondern nur: warum 2 und nicht all in one? Wie gefragt: brauchst Du überhaupt eine visuelle Prozessauflistung in einem ListView? (ListView: da gehen bei RfG bestimmt gleich die Alarmsirenen los. Stichwort Pixxxas ... :rolleyes: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hab jetzt nicht komplett mit gelesen, aber ich täte das wohl so machen

    Beim ermitteln des Prozess Icons dieses direkt vergleichen. Wenns nen Treffer gibt die Schleife beenden denn, wozu noch den Rest durch gehen? Dies würde ich über einen(!) Timer (1 mal die Minute oder so) steuern.

    Die Auflistung in einem Control würde ich weg lassen. Denn eigentlich ist es für das Programm egal welche Prozesse sonst noch gefunden werden. Ohne die Anzeige in den Controls kann ich dann wunderbar das Ding asynchron (Await/Async) starten
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo: Hast nicht viel verpasst, aber Dein Post ist eine gute Zusammenfassung der 42 Posts.
    btw: Wozu asynchron? Das Programm des TE hat eigentlich nur die Aufgabe, den Zielprozess zu finden; soll ja sonst versteckt im Hintergrund laufen. Welchen Vorteil ergibt in Deinen Augen hier die Nebenläufigkeit?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    soll ja sonst versteckt im Hintergrund laufen. Welchen Vorteil ergibt in Deinen Augen hier die Nebenläufigkeit?


    Achso, na dann kann man das vermutlich weg lassen :)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Dfgpoint schrieb:

    Und nein dieses Programm welches gesucht werden soll schaut auch immer gleich aus.
    Das Problem ist nur es ändert immer denn Prozess Namen kann also nur Per Icon gefunden werden.
    Das ganze sieht mir doch etwas suspekt aus.
    Wie soll denn ein Programm seinen Prozessnamen ändern?
    Benennt sich das Programm selbst um?
    Wie wird es denn dann gestartet?
    :?: :?: :?:
    =====

    VaporiZed schrieb:

    VB.NET-Quellcode

    1. If PixelColorInComparisonBitmap.R <> PixelColorInReferenceBitmap.R OrElse
    2. PixelColorInComparisonBitmap.G <> PixelColorInReferenceBitmap.G OrElse
    3. PixelColorInComparisonBitmap.B <> PixelColorInReferenceBitmap.B Then
    4. Exit Do
    5. End If
    Wenn Du zwei Farben vergleichen willst, warum vergleichst Du denn dann nicht zwei Farben?

    VB.NET-Quellcode

    1. If PixelColorInComparisonBitmap <> PixelColorInReferenceBitmap Then
    2. Exit Do
    3. End If

    ====
    Das ListView hab ich mal ignoriert. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Der direkte Farbvergleich war natürlich auch mein erster Weg. Der Punkt ist nur, dass beim Image-Abspeichern in ein Bitmapformat mir die Transparenzwerte flöten gehen, die im Icon noch drin sind. Letztenendes funktioniert der Vergleich nur dann, wenn man die Alphawerte ignoriert. Ggf. könnte man das Bild anders abspeichern, aber ich hatte andere Prioritäten :whistling:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Ggf. könnte man das Bild anders abspeichern
    OK,
    macht Sinn, zumal die Icons oft genug in die Hand genommen werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Naja ganz einfach Der nenne wir es mal Hack erstellet eine Random benannte datei in einen Random genannten Ordner zum Beispiel : fqwf44qw5234fe.exe | ewqfwefw323431.exe etc...
    Da jedoch das Icon immer gleich bleibt ist mir diese Idee eingefallen ^^.
    Das einzigste Programm was ich jetz habe ist wie mein Programm das Gefundene Iteam aus der imgliest dem Prozess in der Listview anzeigt damit ich dann diese random .exe vernichten kann. ^^
    @Dfgpoint OHa.
    Ich versuche zu interpretieren:
    Du bekommst permanent per Trojaner Exen untergeschoben, die im Namen und Pfad variieren, aber stets dasselbe Icon haben.
    ==== Anmerkung: Dieser Zustand ist unhaltbar. =====
    Dieses Icon hast Du extrahiert und vorrätig und Du willst alle Exen killen, die dieses Icon haben.
    OK.

    Quellcode

    1. ' kein Quellcode
    2. ForEach prc in GetAlleProcesse()
    3. If prc.HasIcon(DAS_ICON) Then
    4. Protokoll(prc)
    5. Kipp(prc)
    6. End If
    7. Next
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dfgpoint schrieb:

    Jedoch was füge ich nun bei Das Icon ein Die PicBox oder my.compute....
    Das aus der bösen Exe extrahierte Icon.
    Nix ListView schmeiß das raus.
    Mach das gleich in der 1. Timer-Schleife.
    Und das Protokoll machst Du in eine ListBox.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jetz bin ich ganz raus... ^^
    Also denn Code füge ich in denn Timer1 ein oder?

    VB.NET-Quellcode

    1. ​Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. For Each proc As Process In Process.GetProcesses
    3. Try
    4. ImgList.Images.Add(Icon.ExtractAssociatedIcon(proc.MainModule.FileName))
    5. Dim lvi As New ListViewItem(proc.ProcessName, ImgList.Images.Count - 1)
    6. lvi.SubItems.Add(proc.MainModule.FileName)
    7. ListView1.Items.Add(lvi)
    8. Catch ex As Exception
    9. End Try
    10. Next
    11. For Each prc In GetAlleProcesse()
    12. If prc.HasIcon(My.Resources.ddd) Then
    13. Protokoll(prc)
    14. Kipp(prc)
    15. End If
    16. Next
    17. End Sub


    For Each prc In GetAlleProcesse() Wird mir jedoch als Fehler angezeigt.... ^^

    Dfgpoint schrieb:

    Jetz bin ich ganz raus
    Hab ich gemerkt.
    Schmeiß allen Code weg und fang neu an.
    Du brauchst keine ImageList!
    Du brauchst kein ListView!

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. For Each prc As Process In Process.GetProcesses
    3. If prc.HasIcon(My.Resources.ddd) Then
    4. Protokoll(prc)
    5. Kill(prc) ' Kill !!!
    6. End If
    7. Next
    8. End Sub
    Die Funktionen musst Du natürlich implementieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dfgpoint schrieb:

    so aussehen?

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. ' kein Quellcode
    Lesen, verstehen und umsetzen.
    Gib den Namen die Hülle, die das tut, wie die Hülle heißt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dfgpoint schrieb:

    Versteh nicht was was du meinst

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. ' kein Quellcode
    2. ForEach prc in GetAlleProcesse()
    3. If prc.HasIcon(DAS_ICON) Then
    4. Protokoll(prc)
    5. Kipp(prc)
    6. End If
    7. Next
    Immerhin hast Du ja schon die Zeile ForEach prc in GetAlleProcesse() korrekt in Process.GetProcesses() übertragen. ;)

    Quellcode

    1. ' kein Quellcode
    2. ForEach prc in GetAlleProcesse()
    3. If prc.HasIcon(DAS_ICON) Then
    4. Protokoll(prc)
    5. Kill(prc)
    6. End If
    7. Next
    • ' kein Quellcode besagt, dass das folgende kein compilierbarer Code, sondern Pseudocode ist. Wird Dir hier im Forum öfter begegnen.
    • If prc.HasIcon(DAS_ICON) Then wird zu einer Funktion, die aus dem Prozess das Icon extrahiert und es mit dem vorgegebenen Icon vergleicht, steht bereits in Deinem Code.
    • Protokoll(prc) ist eine Prozedur, die Dir meldet, dass der böse Prozess identifiziert wurde => z.B. Eintrag in eine ListBox.
    • Kill(prc) tut was zu tun ist, um den Störenfried rauszuschmeißen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Dfgpoint schrieb:

    Versteh nicht was was du meinst

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. ' kein Quellcode
    2. ForEach prc in GetAlleProcesse()
    3. If prc.HasIcon(DAS_ICON) Then
    4. Protokoll(prc)
    5. Kipp(prc)
    6. End If
    7. Next
    Immerhin hast Du ja schon die Zeile ForEach prc in GetAlleProcesse() korrekt in Process.GetProcesses() übertragen. ;)

    Quellcode

    1. ' kein Quellcode
    2. ForEach prc in GetAlleProcesse()
    3. If prc.HasIcon(DAS_ICON) Then
    4. Protokoll(prc)
    5. Kill(prc)
    6. End If
    7. Next
    • ' kein Quellcode besagt, dass das folgende kein compilierbarer Code, sondern Pseudocode ist. Wird Dir hier im Forum öfter begegnen.
    • If prc.HasIcon(DAS_ICON) Then wird zu einer Funktion, die aus dem Prozess das Icon extrahiert und es mit dem vorgegebenen Icon vergleicht, steht bereits in Deinem Code.
    • Protokoll(prc) ist eine Prozedur, die Dir meldet, dass der böse Prozess identifiziert wurde => z.B. Eintrag in eine ListBox.
    • Kill(prc) tut was zu tun ist, um den Störenfried rauszuschmeißen.


    Ahh ok ^^

    Also ist das so gemeint oder ?

    VB.NET-Quellcode

    1. ForEach prc in Process.GetProcesses()
    2. If prc.HasIcon(Images.Add.Icon.ExtractAssociatedIcon(proc.MainModule.FileName)) Then
    3. Protokoll(prc)
    4. Kill(prc)
    5. End If
    6. Next

    Dfgpoint schrieb:

    oder ?
    Nö.
    Gemeint ist:
    Hat das Fenster des Prozesses prc das böse Icon.
    Da kann als Parameter nur das böse Icon reingehen.
    Die von Dir zu schreibende bzw. bereits vorhandene Prozedur holt das Icon aus dem übergebenen Prozess und vergleicht beide.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!