ورود

View Full Version : minimize کردن برنامه های دیگر توسط ‏vb



irsme89
پنج شنبه 14 دی 1391, 01:30 صبح
سلام
من یه برنامه کوچیک با vb‏ نوشتم و برنامه یه تکست باکس داره ؛ میخوام وقتی برنامه اجرا شد تمام برنامه های دهگه در حال اجرای ویندوز minimize بشن و فقط برنامه من بصورت انتخاب شده در دسترس باشه و زمان تایپ با کیبرد در اون تکست باکس تایپ بشه؛
یه کد هم با سرچ پیدا کردم ولی مشکلش این هست که بعد از minimize‏ کردن بقیه برنامه ها برنامه خودم بصورت انتخاب شده نمیشه و باید با ماوس رو صفحه برنامه کلیک بکنیم تا بصورت انتخاب شده در بیاد؛

mehran901
پنج شنبه 14 دی 1391, 01:39 صبح
برای اینکار باید دستگیره پنجره مورد نظر رو داشته باشیم و ما با استفاده از تابع FindWindow اینکار رو انجام میدیم.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

این تابع برای دادن دستگیره پنجره مورد نظر دو راه در نظر میگیرد راه اول که آرگومان اول است ClassName پنجره رو میگیره و راه دوم که آرگومان دوم است Caption یا عنوان رو میگیره. اشکال این روش اینه که ما باید بدونیم Caption یا ClassName پنجره چیه؟ در نهایت میشه کد زیر:

MCHwnd = FindWindow(vbNullString, "My Computer")

آرگومان اول رو vbNullString میدیم. حالا با تابع closewindow فکر میکنم بود .... برنامه رو مینیمایز میکرد
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

amin32
پنج شنبه 14 دی 1391, 02:04 صبح
سلام
یه کد هم با سرچ پیدا کردم ولی مشکلش این هست که بعد از minimize‏ کردن بقیه برنامه ها برنامه خودم بصورت انتخاب شده نمیشه و باید با ماوس رو صفحه برنامه کلیک بکنیم تا بصورت انتخاب شده در بیاد؛

آیا در آخر کدتون دستور زیر رو بکار بردید؟


Form1.SetFocus


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

irsme89
پنج شنبه 14 دی 1391, 13:19 عصر
آیا در آخر کدتون دستور زیر رو بکار بردید؟


Form1.SetFocus


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

فوکوس رو به فورم ندادم؛

irsme89
پنج شنبه 14 دی 1391, 13:22 عصر
برای اینکار باید دستگیره پنجره مورد نظر رو داشته باشیم و ما با استفاده از تابع FindWindow اینکار رو انجام میدیم.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

این تابع برای دادن دستگیره پنجره مورد نظر دو راه در نظر میگیرد راه اول که آرگومان اول است ClassName پنجره رو میگیره و راه دوم که آرگومان دوم است Caption یا عنوان رو میگیره. اشکال این روش اینه که ما باید بدونیم Caption یا ClassName پنجره چیه؟ در نهایت میشه کد زیر:

MCHwnd = FindWindow(vbNullString, "My Computer")

آرگومان اول رو vbNullString میدیم. حالا با تابع closewindow فکر میکنم بود .... برنامه رو مینیمایز میکرد
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

امکانش هست یه کد کامل رو بدید که بعد از اجرای فورم بقیه برنامه های در حال اجرا مینیمایز بشن و فوکوس بره رو برنامه ما؛

irsme89
پنج شنبه 14 دی 1391, 13:47 عصر
از کد زیر استفاده کرده بودم ولی بعد از مینیمایز برنامه من انتخاب شده نمیشه؛

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _

(ByVal lpClassName As String, _

ByVal lpWindowName As String) As Long



Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _

(ByVal hwnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long



Private Const WM_COMMAND As Long = &H111

Private Const MIN_ALL As Long = 419

Private Const MIN_ALL_UNDO As Long = 416



Private Sub cmdMinAllWindows_Click()

Dim DoIt As Long

DoIt = FindWindow("shell_traywnd", vbNullString)

'to minimize them all

Call PostMessage(DoIt, WM_COMMAND, MIN_ALL, 0&)

Me.WindowState = vbMaximized

End Sub

amin32
پنج شنبه 14 دی 1391, 14:26 عصر
از همون کد خودتون استفاده کنید ولی یک تایمر قرار بدید و interval رو 1 کنید. در آخر کدی که قرار دادید timer رو فعال کنید (Enable رو True کنید ) و کد زیر رو هم برای رویداد تایمر بنویسید:


Me.WindowState = vbNormal
Timer1.Enabled = False

محسن واژدی
شنبه 16 دی 1391, 22:06 عصر
سلام علیکم
کد زیر را هم بررسی کنید:
Private Sub Command1_Click()
Dim Sh32
Me.Visible = False
Set Sh32 = CreateObject("shell.application")
Sh32.MinimizeAll
Me.Visible = True
End Sub

موفق باشید