PDA

View Full Version : سوال: تخصیص شرت کات به برنامه ای که در حال اجرا نیست (برای اجرای آن)



Direlap
شنبه 24 فروردین 1392, 20:18 عصر
سلام

میخوام یک شورت کاتی به برنامم در خود ویندوز اختصاص بدم که وقتی آن کلیدها زده شدند برنامه من که فایل اجرایی اش در دسک تاپ هست اجرا شود.

این کلیدها را خود کاربر نیز بتواند درون برنامه تغییر دهد تا موقع اجرای بعدی اعمال شود.

در این مورد راهنمایی ام کنید.

massar
یک شنبه 25 فروردین 1392, 10:57 صبح
با سلام
معمول ترین راه اینه که یه برنامه یا سرویس راه انداز داشته باشید که همیشه در حال اجرا باشه و به کلید های ویندوز hooked باشه، اینطوری هر کلیدی زده شد راه انداز متوجه میشه و اگه کلیدها مطابق چیزی بود که کاربر تعریف کرده بود (میشه از یه فایل تنظیمات مشترک با برنامه خوانده بشه) برنامه رو اجرا کنه.
من قبلا کلاسشو نوشتم میتونید ازش استفاده کنید.

Direlap
یک شنبه 25 فروردین 1392, 13:26 عصر
این راه انداز رو چطوری طراحی کنم ؟

ممکن باشه یه توضیحی هم درباره استفاده از این کلاس بدین عالی میشه.

massar
یک شنبه 25 فروردین 1392, 13:42 عصر
را انداز میتونه یه برنامه ی دسکتاپ باشه که به محض اجرا خودشو hide میکنه و میتونید مثلا یک tray icon هم براش بزارید که کاربر اگر خواست بتونه برنامه رو ببنده، میتونینم service بنویسیسد که یکمقدار سختره با یکم جستجو تو اینترنت میتونید یاد بگیرین چطوری ایجادش کنید (سرویس یه برنامه ی ویندوزه که واسط کاربری نداره با همون vs میشه ساختش)


public partial class Form1 : Form {
globalKeyboardHook gkh = new globalKeyboardHook();

public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
//migim che klidayee ro mikhaim
gkh.HookedKeys.Add(Keys.A);
gkh.HookedKeys.Add(Keys.B);
//event handler ro attach mikonim k age klidaye bala zade shod
//in tavabe seda zade mishan
gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
}

void gkh_KeyUp(object sender, KeyEventArgs e) {
lstLog.Items.Add("Up\t" + e.KeyCode.ToString());
e.Handled = true;
}

void gkh_KeyDown(object sender, KeyEventArgs e) {
lstLog.Items.Add("Down\t" + e.KeyCode.ToString());
e.Handled = true;
}
}

Direlap
یک شنبه 25 فروردین 1392, 16:28 عصر
ممنون بابت توضیحاتتون.

فقط پروژه من تحت کنسول هستش و به
KeyEventHandler
ایراد میگیره.

Direlap
یک شنبه 25 فروردین 1392, 17:01 عصر
ایرادشو برطرف کردم . کافیه که توابع به صورت static باشن.

الان فقط اشکال کار اینه که تو محیط کنسول event کار نمیکنه و وقتی کلیدهارو میزنم عمل نمیکنه.

massar
یک شنبه 25 فروردین 1392, 20:38 عصر
این کد مربوط به برنامه ی راه اندازه و برنامه ی اصلی میتونه کنسول باشه، راه انداز باید win forms باشه

Direlap
یک شنبه 25 فروردین 1392, 20:41 عصر
تو کنسول نمیشه از event ها استفاده کرد ؟

massar
یک شنبه 25 فروردین 1392, 20:49 عصر
event یکی از امکانات زبان C# هست و میشه استفاده کرد

Direlap
دوشنبه 26 فروردین 1392, 00:00 صبح
یه مشکلی که هست اینه که برنامه کنسول میاد و بسته میشه و event رو هندل نمی کنه.

برای اینکه بسته نشه من این کد رو آخرش نوشتم : console.readkey()

تا بسته نشه و منتظر زدن یه کلید بمونه ولی اگه بخوام با زدن یه کلید رخدادش رو هندل کنم نمیتونم.

massar
دوشنبه 26 فروردین 1392, 08:19 صبح
اگه ممکنه بیشتر در مورد کارکرد برنامتون توضیح بدین و چون از اینجا به بعد دگه بار علمی زیادی نداره و راه حل برا یه برنامه خاصه ترجیحا پیام خصوصی بزارین یا از یاهو مسنجر استفاده کنید.
ممنون