PDA

View Full Version : اکتیو کردن پنجره فعال قبلی



toopdanlod
دوشنبه 18 بهمن 1389, 22:12 عصر
سلام دوستان عزیز
من می خوام یه برنامه بنویسم که وقتی روی یه Button کلیک کرد، پنجره قبلی که اکتیو بود، دوباره اکتیو بشه.
من هندل پنجره رو می تونم بدست بیارم. اما نمی دونم چه چوری هندلشونو جایی نگه دارم که وقتی فرم برنامه اکتیو میشه، هندل ذخیره شده عوض نشه

محسن واژدی
سه شنبه 19 بهمن 1389, 00:19 صبح
سلام این نمونه رو ببینین
دوتا روش برای فعال کردن فرم دوم داخلش هست یکی با دستور خود وی بی و دیگری با API که نیاز به هندل فرم دوم داره

toopdanlod
سه شنبه 19 بهمن 1389, 00:35 صبح
اینی که شما میگید درسته.
اما برنامه من قراره که یه پنجره غیر از برنامه رو اکتیو کنه. مثل برنامه Opera، یا یاهو مسنجر ،......

محسن واژدی
سه شنبه 19 بهمن 1389, 01:08 صبح
برای فعال کردن پنجره یه برنامه دیگه باید با APIی SetActiveWindow انجام بدین
اما اینگونه که فرمودین میخواین هندلشو بگونه ای نگه دارین که به هنگام اکتیو شدن پنجره مورد نظر تون هندلش عوض نشه، باید بگم که هندل پنجره مورد نظرتون تا زمانی که اون فرم Unload نشه بدون تغییر میمونه همینطور Active و Deactive شدن هم تاثیری رووش نمیزاره

موفق باشید

toopdanlod
سه شنبه 19 بهمن 1389, 09:18 صبح
برای فعال کردن پنجره یه برنامه دیگه باید با APIی SetActiveWindow انجام بدین
اما اینگونه که فرمودین میخواین هندلشو بگونه ای نگه دارین که به هنگام اکتیو شدن پنجره مورد نظر تون هندلش عوض نشه، باید بگم که هندل پنجره مورد نظرتون تا زمانی که اون فرم Unload نشه بدون تغییر میمونه همینطور Active و Deactive شدن هم تاثیری رووش نمیزاره

موفق باشید
دوست عزیز، ببینید.
مثلا من الان که دارم با برنامه فایرفاکس کار میکنم. هندل این پنجره توی برنامه من ذخیره میشه، وقتی برنامه خودم رو انتخاب میکنم که یک کاری انجام بدم هندل برنامه فایرفاکس عوض میشه.
من مشخصات برنامه خودم رو هم دادم و گفتم که اگه عنوان صفحه و ... غیر از مشخصات برنامه من بود هندل رو عوض کنه. اما وقتی برنامه من اکتیو میشه هندل صفر میشه، نمی دونم چرا

محسن واژدی
سه شنبه 19 بهمن 1389, 15:28 عصر
سلام
بنده هر چی رو توضیحاتتون فکر میکنم چیزی دستگیرم نمیشه، اگه میتونین یه کمی بحث رو بازتر کنین و بیشتر توضیح بدین ، همین طور اگه مقدوره و امکانش هست یه نمونه از اون سورسی که باهاش مشکل دارین رو ضمیمه کنین تا سریعتر به نتیجه برسیم...

toopdanlod
سه شنبه 19 بهمن 1389, 16:25 عصر
من نمیدونم چه جوری توضیح بدم تا کامل متوجه بشید. اماسورسشو می ذارم

محسن واژدی
سه شنبه 19 بهمن 1389, 16:57 عصر
فکر کنم فهمیدم مشکل از کجاست،
شما میخواین هندل هر پنجره فعالی رو بجز پنجره برنامه تون بگیره، میدونین چی بود متغیر "WinWnd = lCurHwnd" رو در دوجای تایمر بکار برده بودین یکی در داخل شرط If aCaption <> "" And aCaption <> Me.Caption And aCaption
و یکی هم قبل از این شرط که این باعث بیهوده شدن شرط میشد و در هرحال متغیر WinWnd رو با هندل جلوتری فرم مقداردهی میکرد
بنده این متغیر رو غیرفعال کردم فکر کنم دیگه درست باشه ، مشکلی بود در خدمتیم:

Private Sub Timer1_Timer()
Static lHwnd As Long
Dim lCurHwnd As Long
Dim aCaption As String

Dim sText As String * 255
lCurHwnd = GetForegroundWindow
If lCurHwnd = lHwnd Or lCurHwnd = 0 Then Exit Sub
' YOUR ERROR::-> WinWnd = lCurHwnd

lHwnd = lCurHwnd
aCaption = Left$(sText, GetWindowText(lHwnd, ByVal sText, 255))
If aCaption <> "" And aCaption <> Me.Caption And aCaption <> "Project1 - Microsoft Visual Basic [run] - [Form1 (Code)]" Then
Ret = aCaption
WinWnd = FindWindowA(vbNullString, Ret)
End If
If WinWnd = 0 Then Exit Sub
End Sub


موفق باشید