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
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.