PDA

View Full Version : سوال: بازشدن بعضی از برنامه ها دروسط صفحه



nazanin_90
یک شنبه 30 مرداد 1390, 19:43 عصر
با سلام
با اجرای چه دستوری میتوان بعضی برنامه ها را مثل ماشین حساب ویندوز را در وسط صفحه دسکتاپ باز نمود ؟
با تشکر

king ag
یک شنبه 30 مرداد 1390, 19:46 عصر
در پراپرتی های فرم
در قسمت StartUpPosition گزینه CenterScreen یا CenterOwner رو انتخاب کنید
موفق باشید

IamOverlord
یک شنبه 30 مرداد 1390, 20:10 عصر
اگر منظورتان باز کردن ماشین حساب Windows در وسط Desktop باشد :

1. اول ماشین حساب Windows را باز کنید :

Shell "calc.exe", vbNormalFocus

2. با استفاده از این تابع API باید hWnd پنجره ی ماشین حساب را به دست آورید :

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


به این صورت :

FindWindow(vbNullString, "Calculator")

3. وضعیت جدید را با استفاده از این تابع به ثبت برسانید :

Public Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (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) As Long


اگر نمی خواید طول و عرض پنجره تغییر کنه، می تونید مقدار قبلی طول و عرض رو از این راه به دست بیارید :

Public Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long


که نیاز به تعریف این Type داره :

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type


موفق باشید!

setroyd
یک شنبه 30 مرداد 1390, 20:17 عصر
این راهی که گفتن بهترین راه هست و کوتاه ترین .

nazanin_90
دوشنبه 31 مرداد 1390, 11:57 صبح
اگر منظورتان باز کردن ماشین حساب Windows در وسط Desktop باشد :

1. اول ماشین حساب Windows را باز کنید :

Shell "calc.exe", vbNormalFocus
!
با سلام و عرض تشکر
مشکل من فراخوانی ماشین حساب ویندوز نیست بلکه مشکل فراخوانی آن در وسط صفحه است که متأسفانه با کد های شما این کار را نتوانستم انجام بدهم . اگر امکان داره با ارائه یک نمونه بنده را راهنمائی فرمائید
با تشکر مجدد

IamOverlord
دوشنبه 31 مرداد 1390, 17:34 عصر
با سلام و عرض تشکر
مشکل من فراخوانی ماشین حساب ویندوز نیست بلکه مشکل فراخوانی آن در وسط صفحه است که متأسفانه با کد های شما این کار را نتوانستم انجام بدهم . اگر امکان داره با ارائه یک نمونه بنده را راهنمائی فرمائید
با تشکر مجدد

سلام دوست عزیز،

1. یه CommandButton روی Form تون قرار بدید.
2. کد زیر رو بنویسید.

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Const HWND_TOP = 0
Private Const SWP_NOSIZE = &H1

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function 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) As Long

Private Sub Command1_Click()
Dim targethwnd As Long
Dim targetrect As RECT
Shell "calc.exe", vbNormalFocus
targethwnd = FindWindow(vbNullString, "Calculator")
GetWindowRect targethwnd, targetrect
newx = (Screen.Width / Screen.TwipsPerPixelX - targetrect.Right + targetrect.Left) / 2
newy = (Screen.Height / Screen.TwipsPerPixelY - targetrect.Bottom + targetrect.Top) / 2
SetWindowPos targethwnd, HWND_TOP, newx, newy, 0, 0, SWP_NOSIZE
End Sub