15-08-20, 06:17 AM
(آخر تعديل لهذه المشاركة : 15-08-20, 06:20 AM {2} بواسطة معاند الحظ.)
وعليك السلام ورحمة الله وبركاته
اخوي عبد العزيز ربما تحتاج استخدام مكتبات WinApi لتنفيذ ماتريد وبالمصادفة وجدت الكود التالي وهو لسائل يريد التحكم بنافذة الحاسبة ايضا
اضف الكلاس التالي الى مشروعك
وقم بتعريف متغيير منه ضمن الفورم الذي تستخدمه
وفي حدث الضغط على الزر
SetWindowPos In PInvoke
اخوي عبد العزيز ربما تحتاج استخدام مكتبات WinApi لتنفيذ ماتريد وبالمصادفة وجدت الكود التالي وهو لسائل يريد التحكم بنافذة الحاسبة ايضا
اضف الكلاس التالي الى مشروعك
وقم بتعريف متغيير منه ضمن الفورم الذي تستخدمه
كود :
Imports System.Runtime.InteropServices
Public Class WinPos
<DllImport("user32.dll")>
<MarshalAs(UnmanagedType.Bool)>
Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, <Out> ByRef lpRect As RECT) As Boolean
End Function
<StructLayout(LayoutKind.Sequential)>
Public Structure RECT
Public Left As Integer ' x position of upper-left corner
Public Top As Integer ' y position of upper-left corner
Public Right As Integer ' x position of lower-right corner
Public Bottom As Integer ' y position of lower-right corner
End Structure
Private ReadOnly HWND_BOTTOM As New IntPtr(1)
Private ReadOnly HWND_NOTOPMOST As New IntPtr(-2)
Private ReadOnly HWND_TOP As New IntPtr(0)
Private ReadOnly HWND_TOPMOST As New IntPtr(-1)
Private Const SWP_NOSIZE As Integer = &H0001
Private Const SWP_NOZORDER As Integer = &H0004
Private Const SWP_SHOWWINDOW As Integer = &H0040
<DllImport("user32.dll", SetLastError:=True)>
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function
Private process As Process
Public Sub New()
InitializeComponent()
process = Process.GetProcessesByName("calc").FirstOrDefault()
End Sub
End Classوفي حدث الضغط على الزر
كود :
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
If process Is Nothing Then Return
Dim handle As IntPtr = process.MainWindowHandle
If handle IsNot IntPtr.Zero Then
Dim rct As RECT
GetWindowRect(handle, rct)
Dim screen As Rectangle = Screen.FromHandle(handle).Bounds
Dim pt As Point = New Point(screen.Left + screen.Width / 2 - (rct.Right - rct.Left) / 2, screen.Top + screen.Height / 2 - (rct.Bottom - rct.Top) / 2)
SetWindowPos(handle, IntPtr.Zero, pt.X, pt.Y, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_SHOWWINDOW or HWND_TOPMOST )
End If
End SubSetWindowPos In PInvoke


