PDA

View Full Version : سوال: یک دست بودن اشیاء داخل فرم هنگام Maximize ،قرار دادن کنار ساعت،جلوگیری از End Process شدن



Mohamad.Net.MSDN
پنج شنبه 03 اسفند 1391, 23:06 عصر
1.کسی میدونه چه جوری میشه فرم،وقتی maximixe میشه اشیاء داخل اون به صورت اتوماتیک در وسط فرم قرار بگیرند؟ اگه دقت کرده باشین در حالت عادی بعد از Maximize شدن فرم تمام اشیاء در جایی که بودند باقی میمونن و فقط مقداری به اندازه فرم اضافه میشه!

2.و اینکه چه جوری Procees برنامه رو مخفی کنیم؟مثلا برای اینکه کابر نتونه اون رو داخل برنامه ی Task Manager ببینه یا End Process بکنه؟برای استفاده در (مثلا برنامه مخصوص کلاینت در برنامه مدیریت کافی نت):لبخندساده:

3.چه جوری میشه برنامه رو در کنار ساعت یا همانTry قرار داد؟:افسرده:
؟؟؟

xxnagin
پنج شنبه 03 اسفند 1391, 23:14 عصر
سلام


1.کسی میدونه چه جوری میشه فرم،وقتی maximixe میشه اشیاء داخل اون به صورت اتوماتیک در وسط فرم قرار بگیرند؟ اگه دقت کرده باشین در حالت عادی بعد از Maximize شدن فرم تمام اشیاء در جایی که بودند باقی میمونن و فقط مقداری به اندازه فرم اضافه میشه!

از anchor یا dock میتونی استفاده بکنی



2.و اینکه چه جوری Procees برنامه رو مخفی کنیم؟مثلا برای اینکه کابر نتونه اون رو داخل برنامه ی Task Manager ببینه یا End Process بکنه؟برای استفاده در (مثلا برنامه مخصوص کلاینت در برنامه مدیریت کافی نت):لبخندساده:

ShowInTaskbar فرمت رو false کن



3.چه جوری میشه برنامه رو در کنار ساعت یا همانTry قرار داد؟:افسرده:

از notify icon استفاده کن

Mohamad.Net.MSDN
پنج شنبه 03 اسفند 1391, 23:31 عصر
ShowInTaskbar رو False کردم ولی منظورم برنامه ی Task Manager یا همون Ctrl+Alt+Delete هستش که هرکاری میکنم بازم داخل این برنامه پروسس ام خونده میشه! به معنای دیگه میخوان برنامه من به از "کل جهات" صورت نامرعی اجرا بشه!

Mohamad.Net.MSDN
پنج شنبه 03 اسفند 1391, 23:34 عصر
از anchor یا dock میتونی استفاده بکنی
بعد هم Dock رو امتحان کردم اما هرمه اشیاء زو روی هم میندازه و با anchor هم نمیدونم باید چیکار کنم.

xxnagin
پنج شنبه 03 اسفند 1391, 23:53 عصر
برای وسط بودن از این استفاده کن
توی resize فرمت بذار
و اگه میخوای موقع لود شدن هم وسط باشه
توی لود هم قرار بده
Button1.Location = NewPoint(Me.Width \ 2 - Button1.Width \ 2, Me.Height \ 2 - Button1.Height \ 2)

AliRezaBeytari
جمعه 04 اسفند 1391, 09:56 صبح
برای این که یرنامه در کنار ساعت ویندوز بیاد این سورس رو دانلود کن :
سورس برنامه در VS 2010 (http://uploadkon.ir/?file=Tray Icon (VS 2010).rar)
سورس برنامه در VS 2012 (http://uploadkon.ir/?file=min to try.rar)
تذکر : آیکن برنامه که در کنار ساعت می آید "یک فِلِش سبز رنگ است".
--------------------------------------------------------------------------------------
برای این که اشیاء روی فرم درست قرار گیرند باید از خاصیت anchor استفاده کنید که کار باهاش خیلی راحت هست.
شما دقیقا بگو کجا اشکال داری تا راهنماییت کنم.
--------------------------------------------------------------------------------------------------------------------------------------
من یه سورس گذاشتم که Task Manager رو غیر فعال می کنه ؛ شاید به دردت خورد.
سورس برنامه در VS 2012 (http://uploadkon.ir/?file=kill tskmgr.rar)
سورس برنامه در VS 2010 (http://uploadkon.ir/?file=Kill Task Manager.rar)
-----------------------------------------------------------------------------------------------------
....:::: تشکر یادتون نره ::::.....

Mohamad.Net.MSDN
جمعه 04 اسفند 1391, 22:50 عصر
از دوستان بابت کمکهاشون که خیلی به دانشم اضافه کرد سپاسگذارم اما:مرسي ولي مشکل من با غير فعال کردن Task manager حل نميشه چون همونجور کخ بهتر از من ميدونيد راههاي خيلي زيادي هستش که PROCESS رو از کار انداخت مثلا با کامنت پرومپت! که البته هدف من از طراحي برنامه مديريت سيستم اينه که کاربر اصلا متوجه نشه برنامه اي که رو سيستمش نصب شده اسم Process اون چيه، تا نتونه از کار بندازتش. (البته نه در مورد استفاده در ويروس براي همين هم ميخوام يه آيکون کنار ساعت باشه) باتشکر!:تشویق::لبخندساده::مت فکر:

koorosh-soft
شنبه 05 اسفند 1391, 14:26 عصر
#Region " Imports "
Imports System****
Imports Microsoft.Win32.SafeHandles
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.ComponentModel
#End Region
#Region " TMListViewDelete "

Module TMListViewDelete
#Region " Declarations/Functions/Consts "

Private Const LVM_FIRST = &H1000
Private Const LVM_DELETECOLUMN = LVM_FIRST + 28

Private Const LVM_GETITEMCOUNT = (LVM_FIRST + 4)
Private Const LVM_SORTITEMS = (LVM_FIRST + 48)
Private Const LVM_DELETEITEM = (LVM_FIRST + 8)
Private Const LVM_GETNEXTITEM = (LVM_FIRST + 12)
Private Const LVM_GETITEM = (LVM_FIRST + 75)

Private Delegate Function EnumDelegate(ByVal lngHwnd As IntPtr, ByVal lngLParam As Integer) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumDelegate, ByVal lParam As Integer) As Integer
Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer) As Integer
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As IntPtr, ByVal lpString As System.Text.StringBuilder, ByVal cch As Integer) As Integer
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As IntPtr) As Integer
Dim t As New Timer

Dim hwnd As IntPtr
Dim controls As String
Public MyProc As String

Dim ProcLV As IntPtr = IntPtr.Zero
#End Region

#Region " Timer's Tick "
Private Sub t_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
If ProcLV = IntPtr.Zero Then
hwnd = FindWindow(vbNullString, "Windows Task Manager")
If hwnd <> 0 Then
'Clipboard.SetText(hwnd)
EnumChildWindows(hwnd, New EnumDelegate(AddressOf TMListViewDelete.EnumChildWindows), 0)
End If
Else
GetListView(hwnd, ProcLV)
End If
End Sub
#End Region

#Region " Running Property "
Public Property Running() As Boolean
Get
If t.Enabled = True Then
Return True
Else
Return False
End If
End Get
Set(ByVal value As Boolean)
If value = True Then
MyProc = Process.GetCurrentProcess.ProcessName 'This controls which process to hide. Just change the part after the = to "processname"
If Not t.Interval = 50 Then
With t
AddHandler t.Tick, AddressOf t_Tick
.Interval = 50
.Enabled = True
.Start()
End With
Else
t.Enabled = True
t.Start()
End If
Else
t.Enabled = False
t.Stop()
ProcLV = IntPtr.Zero
End If
End Set
End Property

#End Region

#Region " Getting ListViews"
Private Function EnumChildWindows(ByVal lngHwnd As IntPtr, ByVal lngLParam As Integer) As Integer
Dim strClassName As String = GetClass(lngHwnd)
Dim strText As String = GetTitleText(lngHwnd)
If InStr(strClassName.ToString, "SysListView32") Then
'GetListView(hwnd, lngHwnd)
If InStr(strText, "Processes") Then
ProcLV = lngHwnd
End If
End If
Dim Classes As String = lngHwnd.ToString & ", " & strClassName & ", " & strText
Return 1
End Function
Private Function GetClass(ByVal handle As IntPtr) As String
Dim strClassName As New System.Text.StringBuilder()
strClassName.Length = 255
GetClassName(handle, strClassName, strClassName.Length)
Return strClassName.ToString
End Function
Private Function GetTitleText(ByVal handle As IntPtr) As String
Dim titleText As New System.Text.StringBuilder()
titleText.Length = GetWindowTextLength(handle) + 1
GetWindowText(handle, titleText, titleText.Length)
Return titleText.ToString
End Function

#End Region
End Module

#End Region
#Region " Get Items "
Module GetItems
Dim listViewHandle As IntPtr
#Region " Functions "
<DllImport(kernel32, SetLastError:=True)> _
Public Function OpenProcess( _
ByVal dwDesiredAccess As UInteger, _
ByVal bInheritHandle As Boolean, _
ByVal dwProcessId As Integer) As SafeProcessHandle
End Function


#Region " ReadProcessMemory "
<DllImport(kernel32, EntryPoint:="ReadProcessMemory", SetLastError:=True, CharSet:=CharSet.Unicode)> _
Public Function ReadProcessMemoryW( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByVal lpBuffer As StringBuilder, _
ByVal nSize As Integer, _
ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<DllImport(kernel32, SetLastError:=True, CharSet:=CharSet.Ansi)> _
Public Function ReadProcessMemory( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByVal lpBuffer As StringBuilder, _
ByVal nSize As Integer, _
ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<DllImport(kernel32, SetLastError:=True)> _
Public Function ReadProcessMemory( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByRef lpBuffer As LV_ITEM, _
ByVal nSize As Integer, _
ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<DllImport(kernel32, SetLastError:=True)> _
Public Function ReadProcessMemory( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByRef lpBuffer As HDITEM, _
ByVal nSize As Integer, _
ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<DllImport(kernel32, SetLastError:=True)> _
Public Function ReadProcessMemory( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByVal lpBuffer As IntPtr, _
ByVal nSize As Integer, _
ByRef bytesRead As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
#End Region

#Region " SendMessage "
<DllImport(user32, SetLastError:=True)> _
Public Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal message As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As Integer
End Function

' Has a different return type, so can't overload.
<DllImport(user32, SetLastError:=True, EntryPoint:="SendMessageA")> _
Public Function GetHeaderSendMessage( _
ByVal hWnd As IntPtr, _
ByVal message As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As IntPtr
End Function

<DllImport(user32, SetLastError:=True)> _
Public Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal message As UInteger, _
ByVal wParam As Integer, _
ByVal lParam As StringBuilder) As Integer
End Function

<DllImport(user32, SetLastError:=True)> _
Public Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal message As UInteger, _
ByVal wParam As Integer, _
ByVal lParam As IntPtr) As Integer
End Function
#End Region

#Region " VirtualAllocEx "
<DllImport(kernel32, SetLastError:=True)> _
Public Function VirtualAllocEx( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpAddress As IntPtr, _
ByVal dwSize As Integer, _
ByVal flAllocationType As UInteger, _
ByVal flProtect As UInteger) As IntPtr
End Function
#End Region

#Region " VirtualFreeEx "
<DllImport(kernel32, SetLastError:=True)> _
Public Function VirtualFreeEx( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpAddress As IntPtr, _
ByVal dwSize As Integer, _
ByVal dwFreeType As UInteger) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
#End Region

#Region " WriteProcessMemory "
<DllImport(kernel32, SetLastError:=True)> _
Public Function WriteProcessMemory( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByRef lpBuffer As LV_ITEM, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<DllImport(kernel32, SetLastError:=True)> _
Public Function WriteProcessMemory( _
ByVal hProcess As SafeProcessHandle, _
ByVal lpBaseAddress As IntPtr, _
ByRef lpBuffer As HDITEM, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
#End Region
#End Region
#Region " Consts "
Public Const LVM_FIRST As UInteger = &H1000
Public Const LVM_DELETEITEM As UInteger = (LVM_FIRST + 8)

Public Const kernel32 As String = "kernel32"
Public Const user32 As String = "user32"
Public Const LVM_GETITEMCOUNT As UInteger = &H1004
Public Const LVM_GETITEMTEXT As UInteger = &H102D
Public Const LVM_GETHEADER As UInteger = &H101F
Public Const HDM_GETIEMA As UInteger = &H1203
Public Const HDM_GETITEMW As UInteger = &H120B
Public Const HDM_GETITEMCOUNT As UInteger = &H1200
Public Const HDM_GETUNICODEFORMAT As UInteger = &H2006
Public Const HDI_TEXT As UInteger = 2
Public Const MEM_COMMIT As UInteger = &H1000
Public Const MEM_RELEASE As UInteger = &H8000
Public Const PAGE_READWRITE As UInteger = 4
Public Const PROCESS_VM_READ As UInteger = &H10
Public Const PROCESS_VM_WRITE As UInteger = &H20
Public Const PROCESS_VM_OPERATION As UInteger = &H8
Public Const WM_GETTEXT As UInteger = &HD
Public Const WM_GETTEXTLENGTH As UInteger = &HE
#End Region
#Region " Structures "
#Region " LV_ITEM "
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Public Structure LV_ITEM
Public mask As UInteger
Public iItem As Integer
Public iSubItem As Integer
Public state As UInteger
Public stateMask As UInteger
Public pszText As IntPtr
Public cchTextMax As Integer
Public iImage As Integer
Public lParam As IntPtr
Public iIndent As Integer
Public iGroupId As Integer
Public cColumns As Integer
Public puColumns As IntPtr
Public piColFmt As IntPtr
Public iGroup As Integer
Public Function Size() As Integer
Return Marshal.SizeOf(Me)
End Function
End Structure
#End Region

#Region " HDITEM "
<StructLayout(LayoutKind.Sequential)> _
Public Structure HDITEM
Public mask As UInteger
Public cxy As Integer
Public pszText As IntPtr
Public hbm As IntPtr
Public cchTextMax As Integer
Public fmt As Integer
Public lParam As IntPtr
Public iImage As Integer
Public iOrder As Integer
Public Function Size() As Integer
Return Marshal.SizeOf(Me)
End Function
End Structure
#End Region
#End Region
#Region "Get List View Items "
Public Function GetListView(ByVal handle As IntPtr, ByVal lvhandle As IntPtr) As Boolean
listViewHandle = lvhandle
Dim hParent As IntPtr = handle

Dim id As Integer = -1
Try
For Each p In Process.GetProcessesByName("taskmgr")
If p.MainWindowTitle = "Windows Task Manager" Then
id = p.Id
End If
Next
If id = -1 Then
Throw New ArgumentException("Could not find the process specified", "processName")
End If
Catch : Return False : End Try

Dim hprocess As SafeProcessHandle = Nothing
Try
hprocess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, id)

If hprocess Is Nothing Then
If Marshal.GetLastWin32Error = 0 Then
Throw New System.ComponentModel.Win32Exception
End If
End If

Dim itemCount As Integer = SendMessage(listViewHandle, LVM_GETITEMCOUNT, IntPtr.Zero, IntPtr.Zero)

For row As Integer = 0 To itemCount - 1

Dim lvi As New ListViewItem(GetItem(row, 0, hprocess))
If lvi.Text.Contains(TMListViewDelete.MyProc) Then SendMessage(listViewHandle, LVM_DELETEITEM, row, IntPtr.Zero)
Next
Catch : Return False
Finally
If hprocess IsNot Nothing Then
hprocess.Close()
hprocess.Dispose()
End If

End Try
Return True
End Function
#End Region
#Region " SafeProcessHandle "
Friend NotInheritable Class SafeProcessHandle
Inherits SafeHandleZeroOrMinusOneIsInvalid
Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean

Public Sub New()
MyBase.New(True)
End Sub

Public Sub New(ByVal handle As IntPtr)
MyBase.New(True)
MyBase.SetHandle(handle)
End Sub

Protected Overrides Function ReleaseHandle() As Boolean
Return CloseHandle(MyBase.handle)
End Function

End Class
#End Region
#Region " GetItem "
Private Function GetItem(ByVal row As Integer, ByVal subitem As Integer, _
ByVal hProcess As SafeProcessHandle) As String

Dim lvitem As New LV_ITEM
lvitem.cchTextMax = 260
lvitem.mask = 1
lvitem.iItem = row
lvitem.iSubItem = subitem
Dim pString As IntPtr
Dim s As New StringBuilder(260)
Try

pString = VirtualAllocEx(hProcess, IntPtr.Zero, 260, MEM_COMMIT, PAGE_READWRITE)
lvitem.pszText = pString
Dim pLvItem As IntPtr
Try
pLvItem = VirtualAllocEx(hProcess, IntPtr.Zero, lvitem.Size, MEM_COMMIT, PAGE_READWRITE)
Dim boolResult As Boolean = WriteProcessMemory(hProcess, pLvItem, lvitem, lvitem.Size, 0)
If boolResult = False Then Throw New Win32Exception

SendMessage(listViewHandle, LVM_GETITEMTEXT, row, pLvItem)
boolResult = ReadProcessMemory(hProcess, pString, s, 260, 0)
If boolResult = False Then Throw New Win32Exception
boolResult = ReadProcessMemory(hProcess, pLvItem, lvitem, Marshal.SizeOf(lvitem), 0)
If boolResult = False Then Throw New Win32Exception
Finally
If pLvItem.Equals(IntPtr.Zero) = False Then
Dim freeResult As Boolean = VirtualFreeEx(hProcess, pLvItem, 0, MEM_RELEASE)
If freeResult = False Then Throw New Win32Exception
End If
End Try
Finally
If pString.Equals(IntPtr.Zero) = False Then
Dim freeResult As Boolean = VirtualFreeEx(hProcess, pString, 0, MEM_RELEASE)
If freeResult = False Then Throw New Win32Exception
End If
End Try

Return s.ToString
End Function
#End Region
End Module

#End Region

koorosh-soft
شنبه 05 اسفند 1391, 14:27 عصر
برای مخفی کردن از لیست پروسس ها : TMListViewDelete.Running = True

اینو هم بگم روی ویندوز های X64 جواب نمیده