Hilfe suche nach einem Bild in der Imglist

  • VB.NET

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

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

    Hilfe suche nach einem Bild in der Imglist

    Hallo,
    ich hab ein kleines Programm, und zwar bin ich dabei ein kleinen überprüfter zu machen.
    kleine Erklärung mein Programm soll alle Prozesse welche Laufen anzeigen ink Icon.
    und in meiner PicBox ist noch ein Bild.
    Nun soll das Programm nach schauen ob das Programm per Icon derzeit Aktiv ist.

    Wenn das gleiche Icon dann gefunden wurde, soll eine Funktion gestartet werden zum Beispiel eine MsgBox oder ähnliches. Ich hoffe ihr könnt mir Helfen. mfg Just

    *Topic verschoben, das ist doch kein VBA!*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Wenn man davon absieht, dass ich Deinen Text 3x lesen musste, um ihn zu verstehen, da anscheinend die Kommataste kaputt ist und die Taste mit dem Punkt zumindest unzuverlässig zu funktionieren scheint, blicke ich gerade Dein Anliegen nicht. Dein Programm listet alle Programme mit ihrem Icon auf, die gerade laufen, richtig? Und was soll jetzt Dein Programm noch machen? Du packst (irgendwie) ein Icon in die PicBox unten links, drückst ggf. einen Button und Dein Programm soll rausfinden ... ob das jeweilige Programm, was dieses Icon hat, aktiv ist? Was verstehst Du unter aktiv? Dass es läuft, steht ja schon fest. Also, was soll sonst noch festgestellt werden?
    btw: Einige Programme haben gar kein Icon. Da wird dann das Windows-StandardApp-Icon gezeigt. Oder mehrere haben das gleiche. Was machst Du mit denen?
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Ok. Dann stellt sich die Frage, wie Du die Programme mit ihren Icons auflistest. Also, das musst Du natürlich hier nicht posten, wenn Du das für die behalten willst, aber wenn Du schon die Icons irgendwo (wahrscheinlich über die Exe-Files) rausziehst, dann kannst Du mit denen doch auch Deinen Bildvergleich machen. Es wird natürlich erst dann übel, wenn Dein PicBox-Bild nicht identisch (also absolut pixelgleich), sondern nur sehr ähnlich wie das gesuchte aussieht. Dann sind wir bei Bildvergleichserkennung und da setzt es bei mir aus.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Das Auslesen meiner Icons bzw der Prozesse, schaut bei mir so aus.

    VB.NET-Quellcode

    1. ​For Each proc As Process In Process.GetProcesses
    2. Try
    3. ImgList.Images.Add(Icon.ExtractAssociatedIcon(proc.MainModule.FileName))
    4. Dim lvi As New ListViewItem(proc.ProcessName, ImgList.Images.Count - 1)
    5. lvi.SubItems.Add(proc.MainModule.FileName)
    6. ListView1.Items.Add(lvi)
    7. Catch ex As Exception
    8. End Try

    Das Problem ist ich weiß nicht wie ich so eine Abrage starten kann ob die Bilder gleich sind. ^^
    Und welche Bildquelle nutzt Du, um Dein Suchbild in die PicBox zu packen? Hast Du da ne eigene Bilddatei oder nutzt Du da auch irgendwie ExtractAssociatedIcon?

    EDIT: Mein Vorschlag wäre, dass Du die gesuchte Datei beim ersten Durchlauf selber anwählst, dann das dazugehörige Bild/Icon (welches Du der ImageList hinzugefügt hast) (zwischen)speicherst und dieses beim nächsten Mal für einen Pixel-für-Pixel-Vergleich hernimmst, um das gesuchte Programm zu finden.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    vermutete Langfassung: Dein Programm soll später im Hintergrund laufen und automatisch erkennen, wenn das gesuchte Programm ebenfalls läuft. Ja, macht ja nix. Trotzdem musst Du Dein Programm erstmal "trainieren", will heißen ihm beibringen, worauf es reagieren soll. Ich seh grad das Problem nicht, vor dem Du stehst.

    btw: Dann hoffe ich jetzt mal einfach, dass Dein Programm nicht vorhat, Spionagearbeit oder allgemein Malwareaktivitäten zu zeigen. Das klingt nämlich etwas danach.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Dfgpoint schrieb:

    Das Programm soll am Schluss nicht Schichtbar sein
    Meinst Du dem Hauptfenster ShowWindow(SW_HIDE) geben?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    VaporiZed schrieb:

    vermutete Langfassung: Dein Programm soll später im Hintergrund laufen und automatisch erkennen, wenn das gesuchte Programm ebenfalls läuft. Ja, macht ja nix. Trotzdem musst Du Dein Programm erstmal "trainieren", will heißen ihm beibringen, worauf es reagieren soll. Ich seh grad das Problem nicht, vor dem Du stehst.

    btw: Dann hoffe ich jetzt mal einfach, dass Dein Programm nicht vorhat, Spionagearbeit oder allgemein Malwareaktivitäten zu zeigen. Das klingt nämlich etwas danach.


    Ich weiß einfach nicht wie das Umsetzten kann das ist mein Problem deswegen suche ich Hilfe.
    Nein ganz im gegen teil das ganze soll ein kleines Anti Cheat werden für ein Privates spiel zu 30.
    Ok, dann anders formuliert: Weißt Du wie das Cheatprogrammicon aussieht? Wenn es ein festes Symbol hat, kannst Du es über Icon.ExtractAssociatedIcon bekommen? Wenn ja, dann hast Du das Bild ja in einer Variablen, nämlich mit Dim CheatProgramIcon As Icon = Icon.ExtractAssociatedIcon(...). Nun hast Du das Bild schon mal. Dann abspeichern, ggf. mit den reinen Pixeldaten. Google- oder Forensuche nach Icon zu/to Bitmap. Dann diese Pixeldaten in Dein Programm fest eincodieren (ist zwar sehr unflexibel für CheatProgrammIcon-Änderungen, aber irgendwo muss man ja anfangen). Und dann eben im laufenden Betrieb immer dann, wenn die ProcessList aktualisiert wird, die Icons mit dem abgespeicherten vergleichen.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Well, nope. Angenommen, das würde ich machen. Dann wäre Dir geholfen. Und der nächste mit dem Problem sieht, dass dieser Thread nicht beendet wurde. Und fragt an gleicher Stelle das gleiche. Oder macht nen neuen Thread auf. Das Forum ist dazu da, dass man die Probleme Schritt für Schritt öffentlich gemeinsam löst, damit die Lösungentwicklung für jeden klar wird und nicht 20 Leute das gleiche fragen.
    Daher: ein Schritt nach dem anderen. An welchem Punkt hängst Du zuerst fest?
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Wenn Post#1 Deinen bisherigen Status zeigt, dann bist Du bereits über eine einfache Prozessanzeige hinaus, was Du auch schon in Post#5 gezeigt hast. Da extrahierst Du ja schon die Icons aus den Exe-Dateien und packst die Bilderchen in eine ImageList.
    Nächster Schritt: Du identifizierst den problematischen Prozess. Will heißen, Du schaust (jetzt erst mal selber, also quasi per Hand) in Deiner Liste nach, ob das Cheatprogramm läuft. Hast Du es zufällig selber auf Deinem PC, sodass Du es starten kannst und das Icon siehst? Wenn ja, dann hol Dir das Icon aus Deiner ImageList, die zu dem momentanen Namen des Cheatprogramms angezeigt wird. Klar soweit? Machbar?
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Wenn Du es quasi als Bilddatei auf Deine Festplatte extrahiert hast und später in Deine PicBox lädst, geht das auch.
    Jetzt: Mach eine Schleife über alle in der vorhandenen Icons, also ne For-Schleife. Das aktuelle Icon im laufenden Schleifendurchgang wandelst Du mit .ToBitmap in ein Bitmap um. Und dann rufst Du mit jenem Bitmap und Deinem inzwischen bekannten CheatIcon (was Du ja schon als Bilddatei zu haben scheinst und nun als Bitmap oder Image schon in Deiner PicBox hast) eine momentan noch nicht genau definierte Funktion namens "IstIdentischZu" auf.
    Poste mal den von Dir zu diesem Text vermuteten Code. So nähern wir uns der Lösung.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«