PDA

View Full Version : سوال: قفل کردن یک برنامه خاص



Hoseynseyedan
پنج شنبه 08 مهر 1389, 20:13 عصر
سلام من میخوام یک برنامه از ویندوز مثلا InternetExplorer رو با برنامه قفل کنم و اگه کاربر خواست به اونجا وارد بشه ازش رمز بگیره!
فقط یک برنامه خواص نه کل سیستم یا explorer
من نمونه هایی که جست جو کردم فقط قفل کامل بود

Felony
پنج شنبه 08 مهر 1389, 21:17 عصر
میتونید با توجه به عنوان پنجره برنامه هندلش رو به دست بیارید و تو یه تایمر وقتی اجرا شد تو پروسه ها ببندینش و فرم ورود رمز رو به کاربر نمایش بدید ، اگر رمز را درست وارد کرد برنامه مورد نظر رو توسط برنامه خودتون اجرا کنید .

kooroush
شنبه 10 مهر 1389, 20:26 عصر
یک مثال لطف می کنی دوست عزیز!؟

pcdownload.bloghaa.com
شنبه 10 مهر 1389, 22:19 عصر
دوست عزیر احتمالا همانطور که اطلاع دارید عنوان پنجره اینترنت اکسپلورر ثابت نیست و
نمیتوان از روش به دست آوردن هندل با استفاده از عنوان پنجره استفاده کرد اما میتوان از
نام کلاس اینترنت اکسپلورر استفاده کرد.

مثال : یه تایمر روی فرمت بزار و کد زیر را در قسمت جنرال فرمت بنویس :

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

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
k = FindWindow("IEFrame", vbNullString)
If k <> 0 Then
h = InputBox("enter password:")
If h = "pass" Then
Timer1.Enabled = False
Else
CloseWindow k
End If
End Sub

Hoseynseyedan
یک شنبه 11 مهر 1389, 12:46 عصر
دوست عزیر احتمالا همانطور که اطلاع دارید عنوان پنجره اینترنت اکسپلورر ثابت نیست و
نمیتوان از روش به دست آوردن هندل با استفاده از عنوان پنجره استفاده کرد اما میتوان از
نام کلاس اینترنت اکسپلورر استفاده کرد.

مثال : یه تایمر روی فرمت بزار و کد زیر را در قسمت جنرال فرمت بنویس :

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

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
k = FindWindow("IEFrame", vbNullString)
If k <> 0 Then
h = InputBox("enter password:")
If h = "pass" Then
Timer1.Enabled = False
Else
CloseWindow k
End If
End Sub
سلام
میتونید یک نمونه قرار بدید؟! آخه من زیاد وارد نیستم

ali.rezaei7
دوشنبه 12 مهر 1389, 11:29 صبح
عنوان پنجره معیار درستی نیست. شاید پنجره ای که عنوان آن اینترنت اکسپلورر است، نرم افزار اینترنت اکسپلورر نباشه. شاید نام پوشه ای باشد که در ویندوز اکسپلورر باز شده.
می تونیم لیست نرم افزارهای اجرا شده در سیستم عامل و آدرسشونو رو بدست بیاریم و از این طریق برنامه مورد نظررو قفل کنیم

AlgorithmX
دوشنبه 12 مهر 1389, 12:56 عصر
دوست عزیر احتمالا همانطور که اطلاع دارید عنوان پنجره اینترنت اکسپلورر ثابت نیست و
نمیتوان از روش به دست آوردن هندل با استفاده از عنوان پنجره استفاده کرد اما میتوان از
نام کلاس اینترنت اکسپلورر استفاده کرد.

مثال : یه تایمر روی فرمت بزار و کد زیر را در قسمت جنرال فرمت بنویس :

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

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
k = FindWindow("IEFrame", vbNullString)
If k <> 0 Then
h = InputBox("enter password:")
If h = "pass" Then
Timer1.Enabled = False
Else
CloseWindow k
End If
End Sub


دوست خوب این سورسی که دادی کار کرد (دمت گرم....):تشویق:
واسه این که Task یا My Computer یا یک فولدر خاص(مثلا :New Folder) رو ببنده سورسی داری...????:لبخند:

pcdownload.bloghaa.com
پنج شنبه 15 مهر 1389, 14:55 عصر
برای قفل کردن کل my computer در کد قبلی به جای IEFrame از CabinetWClass
استفاده کنید . اما برای جلوگیری از ورود به پوشه ای خاص با اکسپلورر از کد زیر استفاده کنید.
به یک تایمر نیاز دارید | این برنامه پوشه windows را قفل میکند. |:


Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
Const WM_GETTEXT = &HD
Dim Address As String

Private Sub Form_Load()
Timer1.Interval = 1
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
Dim hwnd As Long
Dim i As Integer
Dim k As String
Dim hhw As Long
Dim h As String
hwnd = FindWindow("CabinetWClass", vbNullString)
hhw = FindWindow("CabinetWClass", vbNullString)
If hwnd <> 0 Then
hwnd = FindWindowEx(hwnd, 0, "WorkerW", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "ReBarWindow32", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "ComboBoxEx32", vbNullString)
Dim r As Long
Dim s As String
s = String(201, Chr(0))
r = SendMessageByString(hwnd, WM_GETTEXT, 200, s)
If Left(s, r) = "My Computer" Then Exit Sub
Address = Left(s, r)
End If
k = Address
If k = "C:\windows" Then
h = InputBox("enter password:")
If h = "pass" Then
Timer1.Enabled = False
Else
Closewindows hhw
End If
End If
End Sub

ali.rezaei7
پنج شنبه 15 مهر 1389, 17:21 عصر
برای قفل کردن نرم افزارهای دیگری مثل فوتوشاپ یا نت پد یا ورد چی؟
به نظرتون، این کدی که گذاشتید یه مقدار محدود نیست؟
اگه آدرس نرم افزاری رو که باید قفل بشه رو از کاربر بگیریم و بعد آدرس پروسه های در حال اجرا را با اونا چک کنیم فکر می کنم بهتر باشه.

pcdownload.bloghaa.com
پنج شنبه 15 مهر 1389, 23:53 عصر
البته جناب ali.rezaei7 روش پیشنهادی شما هم جالب است که برای
این کار باید یک تایمر و یک تکست باکس و یک کامند باتن روی فرم گذاشت
و کد زیر را نوشت:
کافیه آدرس فایل اجرایی را در تکست باکس نوشته و دکمه lock را فشار دهید.


Private Const MAX_PATH = 260
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPMODULE = &H8
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Long
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String * 260
End Type
Private Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Form_Load()
Timer1.Interval = 100
Text1.Text = "c:\windows\notepad.exe"
Command1.Caption = "Lock"
End Sub

Private Sub Timer1_Timer()
Dim io As String
Dim hSnap As Long, pResult As Long, Process As PROCESSENTRY32
Dim pID As Long, hProcess As Long, appPath As String
Dim hSnapM As Long, Module As MODULEENTRY32
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process.dwSize = Len(Process)
pResult = Process32First(hSnap, Process)
Do While pResult <> 0
pID = Process.th32ProcessID
hSnapM = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID)
Module.dwSize = Len(Module)
Call Module32First(hSnapM, Module)
appPath = Left$(Module.szExePath, InStr(1, Module.szExePath, Chr(0)) - 1)
If StrComp(appPath, Text1, vbTextCompare) = 0 Then
pID = Module.th32ProcessID
hProcess = OpenProcess(PROCESS_ALL_ACCESS, True, pID)
TerminateProcess hProcess, 0
CloseHandle hProcess
io = InputBox("Enter Password :")
If io = "pass" Then
Timer1.Enabled = False
Shell Text1, vbNormalFocus
End If
End If
CloseHandle hSnapM
pResult = Process32Next(hSnap, Process)
Loop
CloseHandle hSnap
End Sub