PDA

View Full Version : حرفه ای: فوکوس روی یک برنامه دیگر



AAtoZZ
چهارشنبه 10 فروردین 1390, 14:19 عصر
من می خواستم با اجرای دوباره ی فایل Exe دوباره برنامه باز نشه و روی برنامه باز شده قبلی Focus بشه.

با این کد جلوی دوباره باز شدن برنامه رو گرفتم

Process currentProcess = Process.GetCurrentProcess();
if (Process.GetProcessesByName(currentProcess.Process Name,
currentProcess.MachineName).Length > 1)
{
MessageBox.Show("برنامه در حال اجراست", "توجه");
return;
}

حالا می خوام دوباره روی همون برنامه در حال اجرا Focus صورت بگیره، اما این رو نتونستم. (هم XP هم 7)

این کد ساده ظاهرا باید کار کنه اما کار نمی کنه



[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

void bringWindowToFocus()
{
SetForegroundWindow(windowHandle);
}



QuestionHow to focus another application from .Net? (http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/88f4317b-7446-4a11-887e-4ee8baee810c)
AnswerPostMessage & Findwindow not working on win 7? (http://social.msdn.microsoft.com/Forums/pl-PL/csharplanguage/thread/1dcae178-50e8-446f-9c45-f016ad0f7fc3)

AAtoZZ
یک شنبه 14 فروردین 1390, 08:54 صبح
یعنی تا حالا هیچ کس لازمش نشده؟!!!

amirsadeghi
یک شنبه 14 فروردین 1390, 13:15 عصر
خب برای اینکار باید از API استفاده کنی
handle اون فرم رو میفرستی به API و فوکوس انجام میشه
APIش رو هم بهت میگم

amirsadeghi
یک شنبه 14 فروردین 1390, 13:24 عصر
GETwindows برای به دست آوردن handle
setactivewindowsبرای تعیین به عنوان پنجره فعال
SetForegroundWindow هم تغییر فوکوس
حالا اگه سمپل پیدا کردم برات میزارم

amirsadeghi
یک شنبه 14 فروردین 1390, 13:41 عصر
این اعلانش
Private Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

جایی که میخوای فرم رو بیاری رو هم از این استقاده کن

SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 83

این برنامه خودت رو میاره رو! حالا دیگه بقیه اش با خودت

AAtoZZ
دوشنبه 15 فروردین 1390, 16:40 عصر
من نتونستم استفاده کنم، Sample ای پیدا نکردید؟
شما Me.hwnd ظاهرا hwnd همین برنامه رو میده، اما برای Focus به hwnd اجرای قبلی برنامه داریم، احتمالا باید با FindWindow اون رو پیدا کرد.

amirsadeghi
دوشنبه 15 فروردین 1390, 16:51 عصر
حب این صفحه همین برنامه رو میاره رو
حالا کافیه هندل رو جایگزین کنی دیگه!
قبلش هم گفتم هندل پنجره های دیگه با چه api به دست میاد دیگه!
ترکیبش سخته؟ :D

AAtoZZ
چهارشنبه 17 فروردین 1390, 18:20 عصر
سخته!
امتحان کنید میبینید سخته!

yuzarsive
پنج شنبه 10 شهریور 1390, 00:55 صبح
مشکل منم همین تاپیکه اگه میشه دستورات رو دقیقتر بگید و اینکه کجا از ازشون استفاده کنم