PDA

View Full Version : سوال: زدن اتوماتیک دکمه ای از کیبورد



smart_twists
یک شنبه 11 تیر 1391, 12:53 عصر
با سلام
من میخوام یه برنامه بنویسم که سر یه زمان خاص دکمه Pause روی کیبورد رو واسه توقف موزیک در حال پخش بزنه.
کسی میدونه چجوری میشه این کار رو کرد؟!!
کار اصلی اینه که موزیک در حال پخش از پلیر رو متوقف کنه.

از اساتید محترم ممنون میشم راهنمایی کنید.

mehdy.programmer
یک شنبه 11 تیر 1391, 13:46 عصر
دوست عزیز راستشو بخوای منم کنجکاو کردی!
برای کلید های دیگه روی کیبرد می تونی از این کد استفاده کنی:

SendKeys.Send("{keycode}");

که می تونی keyCode ها رو هم از اینجا (http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx) بگیری
ولی keycode ی برای MediaPlayPause وجود نداره!
اگه راهی برای اونم پیدا کردم بهت می گم!

mamiz
یک شنبه 11 تیر 1391, 13:50 عصر
اول باید هندل برنامه مدنظرتو پیدا کنی.
بعد برنامه رو فوکاس میکنی.
در آخر همانطور که آقا مهدی گفته کلیدهایی که مدنظرته به برنامه میفرستی.(که برای کار شما Ctrl+p هستش)

mamiz
یک شنبه 11 تیر 1391, 14:10 عصر
اینم یک نمونه برای درک بهتر. که مقادیر 125*8= رو به ماشین حساب میفرسته.
موفق باشید.


using System.Runtime.InteropServices;




namespace test
{
public partial class frmSendKey : Form
{
public frmSendKey()
{
InitializeComponent();
}

// دریافت هندل برنامه
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string ClassName,string WindowName);

// فعال کردن (انتقال فوکاس) به برنامه
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hndl);

// مثال: به دست آوردن هندل برنامه ماشین حساب
// برای اشاره به پوینتر و هندل به کار میره IntPtr متغیرهای نوع
IntPtr myHandle = FindWindow(null, "Calculator");

private void button1_Click(object sender, EventArgs e)
{
// چک کردن اینکه ماشین حساب درحال اجرا باشد
if (myHandle == IntPtr.Zero)
{
MessageBox.Show("برنامه ماشین حساب در حال اجرا نیست نیست");
return;
}

SetForegroundWindow(myHandle);
SendKeys.SendWait("125");
SendKeys.SendWait("*");
SendKeys.SendWait("8");
SendKeys.SendWait("=");
}
}
}

smart_twists
یک شنبه 11 تیر 1391, 14:24 عصر
عالی بود mamiz جان
خیلی ممنون.

vof.ir
یک شنبه 11 تیر 1391, 14:28 عصر
یک سوال؛ از کجا باید اسم پنجره مورد نظر را بدانیم؟
آیا این اسم استانداردی دارد؟ آیا این اسم کاملا دلبخواهی هست؟
روی هر سیستمی یک سان هست؟
و اینکه با چه کدی میشه اسم تمام پنجره های فعال را به دست آود؛ مثلا فرض کنید میخواهیم برنامه ما با هر پلیری این کار را انجام دهد!
یک منبع داریم از اسامی برنامه های پلیر معروف
در اکثرشان هم دکمه Pause کار مشابهی انجام می دهد
بعد اسم به دست آمده را با اسامی موجود در این منبع میخواهیم مقایسه کنیم و الی آخر....
با تشکر
در ضمن برای دریافت برنامه SPY++ که برای به دست آوردن اسامی پنجره ها و یک سری کارهای این چنینی مناسب هست نیز از لینک ذیل قابل دریافت هست
http://meyex.romanaco.com/2011/11/spy/

mamiz
یک شنبه 11 تیر 1391, 14:39 عصر
منظور از نام پنجره همان Caption است. مسلما نام پنجره ماشین حساب در همه سیستمها یکسان است. اما در مجموع اگر قصد نوشتن یک برنامه کامل داشته باشید به نکات ریز زیادی باید توجه بشه و کدی که ارسال کردم فقط حکم تابلویی برای نشان دادن مسیر خواهد بود.

پیروز باشید

smart_twists
یک شنبه 11 تیر 1391, 14:42 عصر
داخل task manager اسم برنامه ها هست. همون اسم رو بنویسید جواب میده.
بعضی از پلیر ها با space متوقف میشن که کدش اینه " " فقط یه فاصله باید گذاشت. واسه اونایی هم که با Ctrl+P کار میکنن کدش "p^" هست.

smart_twists
یک شنبه 11 تیر 1391, 14:45 عصر
من از AIMP3 استفاده میکنم که اسم پنجره به اسم آهنگ تغییر داده میشه. اما اگر داخل کد AIMP3 رو بنویسید جواب میده.

mamiz
یک شنبه 11 تیر 1391, 16:49 عصر
من از AIMP3 استفاده میکنم که اسم پنجره به اسم آهنگ تغییر داده میشه. اما اگر داخل کد AIMP3 رو بنویسید جواب میده.
منظورت اسم خود برنامه exe هستش؟