Zum Inhalt springen

langsamer Keylogger C#


Empfohlene Beiträge

Moin Moin

also zu meinem Problem, ich habe hier einen Barcode Scanner liegen, der per USB einfach als Eingabegerät ohne eigene Treiber verwendet wird.

Damit sollen EAN's von OEM Artikeln gescannt werden. Während des Scannvorgangs soll geprüft werden, ob die EAN bei uns im System so hinterlegt ist. Anschließend soll die EAN in ein externes Programm eingefügt und das richtige Etikett ausgedruckt werden.

Da ich leider keine Möglichkeit habe in irgendeiner Weise auf des Etiketten Programm zuzugreifen und der Scanner keine eigenen Treiber besitzt hab ich mir des einfach mit einem Keylogger überlegt.

So viel zur Theorie...

Läuft auch alles wunderbar in der Praxis, bis auf die Tatsache, dass mein Keylogger zu langsam ist und nur Teile der gescannten EAN mitbekommt :upps

Ich poste einfach mal den Sourcecode vielleicht hat ja jemand eine Idee.

(Sourcecode passt nicht mehr in des Thema)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Imports in Deklarationen aus Platzgründen weggelassen :P


namespace NetKeyLogger
{
public class Keylogger
{
public Keylogger()
{
hWndTitle = ActiveApplTitle();
hWndTitlePast = hWndTitle;
keyBuffer = "";
this.timerKeyMine = new System.Timers.Timer();
this.timerKeyMine.Enabled = true;
this.timerKeyMine.Elapsed += new System.Timers.ElapsedEventHandler(this.timerKeyMine_Elapsed);
this.timerKeyMine.Interval = 10;
this.timerBufferFlush = new System.Timers.Timer();
this.timerBufferFlush.Enabled = true;
this.timerBufferFlush.Elapsed += new System.Timers.ElapsedEventHandler(this.timerBufferFlush_Elapsed);
this.timerBufferFlush.Interval = 40000; // 5 minutes
}
public static string ActiveApplTitle()
{
int hwnd = GetForegroundWindow();
StringBuilder sbTitle = new StringBuilder(1024);
int intLength = GetWindowText(hwnd, sbTitle, sbTitle.Capacity);
if ((intLength <= 0) || (intLength > sbTitle.Length)) return "unknown";
string title = sbTitle.ToString();
return title;
private void timerKeyMine_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
hWndTitle = ActiveApplTitle();

if (hWndTitle != hWndTitlePast)
{
if (LOG_OUT == "file")
keyBuffer += "[" + hWndTitle + "]";
else
{
Flush2File("[" + hWndTitle + "]");
if (keyBuffer.Length > 0)
Flush2Console(keyBuffer, false);
}
hWndTitlePast = hWndTitle;
}
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
if (GetAsyncKeyState(i) == -32767)
{
if (ControlKey)
{
if (!tglControl)
{
tglControl = true;
keyBuffer += "<Ctrl=On>";
}
}
else
{
if (tglControl)
{
tglControl = false;
keyBuffer += "<Ctrl=Off>";
}
}
if (AltKey)
{
if (!tglAlt)
{
tglAlt = true;
keyBuffer += "<Alt=On>";
}
}
else
{
if (tglAlt)
{
tglAlt = false;
keyBuffer += "<Alt=Off>";
}
}
if (CapsLock)
{
if (!tglCapslock)
{
tglCapslock = true;
keyBuffer += "<CapsLock=On>";
}
}
else
{
if (tglCapslock)
{
tglCapslock = false;
keyBuffer += "<CapsLock=Off>";
}
}
if (Enum.GetName(typeof(Keys), i) == "LButton")
keyBuffer += "<LMouse>";
(...)
else if (Enum.GetName(typeof(Keys), i) == "LWin" || Enum.GetName(typeof(Keys), i) == "RWin")
keyBuffer += "<Win>";
if (ShiftKey)
{
if (i >= 65 && i <= 122)
{
keyBuffer += (char)i;
}
else if (i.ToString() == "49")
keyBuffer += "!";
else if (i.ToString() == "50")
keyBuffer += "@";
else if (i.ToString() == "51")
keyBuffer += "#";
else if (i.ToString() == "52")
keyBuffer += "$";
else if (i.ToString() == "53")
keyBuffer += "%";
(...)
}
else
{
if (i >= 65 && i <= 122)
{
keyBuffer += (char)(i + 32);
}
else if (i.ToString() == "49")
keyBuffer += "1";
(...)
}
}
}
}
#region toggles
public static bool ControlKey
{
get { return Convert.ToBoolean(GetAsyncKeyState(Keys.ControlKey) & 0x8000); }
}
public static bool ShiftKey
{
get { return Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey) & 0x8000); }
}
public static bool CapsLock
{
get { return Convert.ToBoolean(GetAsyncKeyState(Keys.CapsLock) & 0x8000); }
}
public static bool AltKey
{
get { return Convert.ToBoolean(GetAsyncKeyState(Keys.Menu) & 0x8000); }
}
#endregion
private void timerBufferFlush_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (LOG_OUT == "file")
{
if (keyBuffer.Length > 0)
Flush2File(LOG_FILE);
}
else
{
if (keyBuffer.Length > 0)
Flush2Console(keyBuffer, false);
}
}
public void Flush2Console(string data, bool writeLine)
{
if (writeLine)
Console.WriteLine(data);
else
{
Console.Write(data);
keyBuffer = "";
}
}
public void Flush2File(string file)
{
string AmPm = "";
try
{
if (LOG_MODE == "hour")
{
if (DateTime.Now.TimeOfDay.Hours >= 0 && DateTime.Now.TimeOfDay.Hours <= 11)
AmPm = "AM";
else
AmPm = "PM";
file += "_" + DateTime.Now.ToString("hh") + AmPm + ".log";
}
else
file += "_" + DateTime.Now.ToString("MM.dd.yyyy") + ".log";

FileStream fil = new FileStream(file.Replace("*",""), FileMode.Append, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(fil))
{
sw.Write(keyBuffer);
}
keyBuffer = "";
}
catch (Exception ex)
{
throw;
}
}
#region Properties
public System.Boolean Enabled
{
get
{
return timerKeyMine.Enabled && timerBufferFlush.Enabled;
}
set
{
timerKeyMine.Enabled = timerBufferFlush.Enabled = value;
}
}
public System.Double FlushInterval
{
get
{
return timerBufferFlush.Interval;
}
set
{
timerBufferFlush.Interval = value;
}
}
public System.Double MineInterval
{
get
{
return timerKeyMine.Interval;
}
set
{
timerKeyMine.Interval = value;
}
}
#endregion
}
}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab jetzt den Quellcode nicht näher betrachtet, aber hab ich dich richtgi verstanden das der Input des Scanners einfach als simulierte Tastatureingabe ans System geschickt wird?

Wenn ja warum machst du nicht einfach ein Programm mit einer Textbox und einem Button. Die Textbox bekommt den Focus und sobald man dann mit dem Scanner was scannt erscheinen die Daten in der Textbox.

Beim drücken auf den Button prüfst du dann das was in der Textbox steht usw.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...