Finnegan Geschrieben 16. Mai 2008 Geschrieben 16. Mai 2008 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) Zitieren
Finnegan Geschrieben 16. Mai 2008 Autor Geschrieben 16. Mai 2008 Imports in Deklarationen aus Platzgründen weggelassen 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] Zitieren
Guybrush Threepwood Geschrieben 16. Mai 2008 Geschrieben 16. Mai 2008 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. Zitieren
Empfohlene Beiträge
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.