Benutzer mit den meisten Antworten
Programm überwachen

Frage
Antworten
-
Hallo Yves,
Also mein Antivierenprogramm wird aktiv wenn ich meine WindowsAnwendung starte über debug
dann ist Dein Antivirenprogramm aber empfindlich oder Dein Code weist Ähnlichkeiten mit einem Virus auf. :-) Ggf. kannst Du das Verzeichnis in dem Deine Projekte liegen/ die Ausgabe erfolgt, vom Scan ausnehmen.
Ich möchte, dass meine WindowsAnwendung feststellt wenn ein bestimmtes Programm gestartet wird. Also Mein Programm läuft und sobald ich dann z.B. Firefox starte kommt eine Nachricht: Firefox wurde gestartet.
Da gibt es mehrere Möglichkeiten. Zum Beispiel einen Shell-Hook oder einen CreateProcess Hook. Letzteres dürfte aber indiskutabel sein, da es mit VB nicht möglich ist und selbst erfahrene Entwickler zum Schwitzen bringt. Hier mal die einfachste Variante, die über einen Timer die Liste der laufenden Prozesse abruft und diese mit dem vorherigen Stand vergleicht:
Public Class Form1 Dim m_ProcessIds As List(Of Integer) Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load m_ProcessIds = New List(Of Integer) Dim lProcesses() As Process = Process.GetProcesses() For Each lProcess As Process In lProcesses m_ProcessIds.Add(lProcess.Id) Next Timer1.Interval = 500 Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs _ ) Handles Timer1.Tick Timer1.Enabled = False Dim lProcessIds As New List(Of Integer) Dim lProcesses() As Process = Process.GetProcesses() For Each lProcess As Process In lProcesses lProcessIds.Add(lProcess.Id) If Not m_ProcessIds.Contains(lProcess.Id) Then Dim lTitle As String = lProcess.ProcessName Try lTitle = lProcess.MainModule.FileVersionInfo.FileDescription Catch ex As Exception End Try MsgBox(String.Format("{0} wurde gestartet", lTitle)) End If Next m_ProcessIds.Clear() m_ProcessIds = lProcessIds Timer1.Enabled = True End Sub End Class
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Yves Riedener Dienstag, 13. Juli 2010 07:58
Alle Antworten
-
Hallo Yves,
wenn sich ein Virenscanner zu Wort meldet, ist dies meist eine Einstellungssache dieses Virenscanners und kein Problem der Programmierung.
Ansonsten wäre es hilfreich, Du würdest Deine Beiträge/Fragen so verfassen, dass jeder sie verstehen kann. Nimm Dir also Zeit für Deine Fragen und versuche Dein Problem hinreichend genau zu beschreiben, auch wenn Du selber sicher weißt worum es geht. Nicht eingeweihte, wie wohl die meisten Forumuser hier, mögen unter Umständen nicht wissen welche Methode/welchen Code Du aktuell verwendest, der bei Dir Probleme bereitet. GetActive... sagt mir zumindest so in dem Zusammenhang überhaupt nichts.
Thorsten Dörfler
Microsoft MVP Visual Basic -
Also ich werds mal versuchen, getActive.. hat eigentlich nichts damit zu tun.
Ich möchte, dass mein Programm einen Sub Teil ausführt wenn z.B. Firefox gestartet ist/ gestartet wird.
Ich werde es jetzt nochmals versuchen, wenn ich den Code habe werde ich ihn hier rein schreiben, wenn ich keinen finde, werde ich mich nochmals melden.
LG Yves Riedener -
Hallo Yves,
ich muss Thorsten Recht geben. Werde doch mal bitte etwas konkreter. Es wird dir keiner deine Idee stehlen und ausgelacht wurde hier auch noch niemand.
Wenn ich mir 1 und 1 zusammenreime wird dein Virenprogramm aktiv, bzw. meldet etwas, wenn du deinen Internetbrowser startest bzw. nutzt.
Dann stellen sich doch folgende Fragen:1. Macht das dein Virenprogramm immer?
2. Macht es das nur bei Firefox oder auch bei MS-Internetexplorer?
3. Was meldet er denn? Und ist das, was er meldet nicht sogar sein Job?
4. Hast du schon mal bei den Einstellungen/Konfigurationen deines Virenscanners nachgesehen, ob du das ändern kannst? Im Normalfall kann man da das Verhalten sehr massiv beeinflussen.
Wenn ein Programm (welches auch immer) eine Meldung ausgibt, hat sich der Hersteller meist etwas dabei gedacht. Unnötige Meldungen sollten grundsätzlich vermieden werden, die nerven doch nur.
Also beschreibe uns einfach mal dein Problem und du bekommst sicher konkrete und ausführliche Hilfe.
Wenn hier aber keiner versteht was du eigentlich möchtest, bleibt deine Frage leider unbeantwortet.
Liebe Grüße Stefan -
Also mein Antivierenprogramm wird aktiv wenn ich meine WindowsAnwendung starte über debug, aber dies lassen wir mal bei seite, denn sonst habe ich keine Probleme mit meinem Antivierenprogramm.
Also noch zu meiner Frage:
Ich möchte, dass meine WindowsAnwendung feststellt wenn ein bestimmtes Programm gestartet wird. Also Mein Programm läuft und sobald ich dann z.B. Firefox starte kommt eine Nachricht: Firefox wurde gestartet.
LG Yves Riedener -
Hallo Yves,
Also mein Antivierenprogramm wird aktiv wenn ich meine WindowsAnwendung starte über debug
dann ist Dein Antivirenprogramm aber empfindlich oder Dein Code weist Ähnlichkeiten mit einem Virus auf. :-) Ggf. kannst Du das Verzeichnis in dem Deine Projekte liegen/ die Ausgabe erfolgt, vom Scan ausnehmen.
Ich möchte, dass meine WindowsAnwendung feststellt wenn ein bestimmtes Programm gestartet wird. Also Mein Programm läuft und sobald ich dann z.B. Firefox starte kommt eine Nachricht: Firefox wurde gestartet.
Da gibt es mehrere Möglichkeiten. Zum Beispiel einen Shell-Hook oder einen CreateProcess Hook. Letzteres dürfte aber indiskutabel sein, da es mit VB nicht möglich ist und selbst erfahrene Entwickler zum Schwitzen bringt. Hier mal die einfachste Variante, die über einen Timer die Liste der laufenden Prozesse abruft und diese mit dem vorherigen Stand vergleicht:
Public Class Form1 Dim m_ProcessIds As List(Of Integer) Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load m_ProcessIds = New List(Of Integer) Dim lProcesses() As Process = Process.GetProcesses() For Each lProcess As Process In lProcesses m_ProcessIds.Add(lProcess.Id) Next Timer1.Interval = 500 Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs _ ) Handles Timer1.Tick Timer1.Enabled = False Dim lProcessIds As New List(Of Integer) Dim lProcesses() As Process = Process.GetProcesses() For Each lProcess As Process In lProcesses lProcessIds.Add(lProcess.Id) If Not m_ProcessIds.Contains(lProcess.Id) Then Dim lTitle As String = lProcess.ProcessName Try lTitle = lProcess.MainModule.FileVersionInfo.FileDescription Catch ex As Exception End Try MsgBox(String.Format("{0} wurde gestartet", lTitle)) End If Next m_ProcessIds.Clear() m_ProcessIds = lProcessIds Timer1.Enabled = True End Sub End Class
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Yves Riedener Dienstag, 13. Juli 2010 07:58