PDA

View Full Version : کدی هست که باهاش برنامه رو به اون جاهایی که کاربر بر روی سیستم مراجعه میکنه کپی کرد؟



xman_dj
یک شنبه 27 خرداد 1386, 00:38 صبح
با سلام
کدی هست که باهاش برنامه رو به اون جاهایی که کاربر بر روی سیستم مراجعه میکنه کپی کرد؟(بر روی هارد دیسک جاهایی که کاربر سرک میزنه)

.................................................. please help me..................................

CodeMasterX
یک شنبه 27 خرداد 1386, 03:45 صبح
مشکوک میزنی ؟!
یعنی میخوایی کاربر هر جایی که میره یه فایل کپی یا اجرا بشه ؟
داری شیطونی میکنی ولی فقط همینقدر میتونم بگم که برو دنبال سیستم پیغام های ویندوز (Windows Messages - Windows Messaging).روی اینترنت میتونی مقاله و مثال پیدا کنی.

sinpin
یک شنبه 27 خرداد 1386, 11:50 صبح
با سلام
کدی هست که باهاش برنامه رو به اون جاهایی که کاربر بر روی سیستم مراجعه میکنه کپی کرد؟(بر روی هارد دیسک جاهایی که کاربر سرک میزنه)

.................................................. please help me..................................

:متفکر:
خدایا این سرزمین را از شر دشمنان - خشکسالی و دروغ در امان دار!

__siavash__
یک شنبه 27 خرداد 1386, 13:24 عصر
:متفکر:
خدایا این سرزمین را از شر دشمنان - خشکسالی و دروغ در امان دار!
چه دروغی ؟؟؟
xman_dj سوال کرده ! درسته سوالش مشکوک میزنه اما خوب بالاخره یه سواله !

Evil 69
یک شنبه 27 خرداد 1386, 13:37 عصر
چون سوالت مشکوک میزنه تابع اصلی شو بهت نمیگم ولی همین قدر بدون که باید با یک تابع مسیر جاری سیستم رو پیدا کنی بعد با یک برنامه دیگه و با استفاده از دستور filecopy ار برنامت کپی بگیری

__siavash__
یک شنبه 27 خرداد 1386, 13:41 عصر
خوب شاید این راه یه جورایی جواب بده:
شما بیا با یه تایمر و با تابع FindWindow پنجره My Computer رو پیدا کن بعد بیا آدرس AddressBar رو بخون ( اتفاقا یه برنامه برای این کار من دیروز آپ کردم البته اون AddressBar اینترنت اکسپلورر رو میداد که با یکمی دستکاری میتونی همین AddressBar رو بخونی این لینکشه http://barnamenevis.org/forum/showpost.php?p=353885&postcount=733 ) بعد دایرکتوری هایی که کاربر رفته رو داری حالا هر کاری خواستی با این دایرکتوری ها بکن !!!!!!

xman_dj
یک شنبه 27 خرداد 1386, 23:53 عصر
ای خدا...............
تا ما یه سوال کردیم مشکوک شد.....................

xman_dj
یک شنبه 27 خرداد 1386, 23:57 عصر
شما ها که professional هستید فکر میکنید ما هم مثل شماییم؟؟؟؟؟؟؟؟؟؟؟؟//

با شه یه سوال دیگه من از شما دارم

این توابع api که میگن اصلا چیه و طریقهی کار باهاشون چطور آیا اونا هم دستورن مثل for , select , ............. و یا اینکه چیز دیگه ای هستند اگه میشه یه منبع خوب (کتاب و یا سیدی ) معرفی کنید..........................

__siavash__
دوشنبه 28 خرداد 1386, 10:19 صبح
شما ها که professional هستید فکر میکنید ما هم مثل شماییم؟؟؟؟؟؟؟؟؟؟؟؟//

با شه یه سوال دیگه من از شما دارم

این توابع api که میگن اصلا چیه و طریقهی کار باهاشون چطور آیا اونا هم دستورن مثل for , select , ............. و یا اینکه چیز دیگه ای هستند اگه میشه یه منبع خوب (کتاب و یا سیدی ) معرفی کنید..........................
ببین توابع API توابع از پیش تعریف شده ای هستند که تو میتونی ازشون تو برنامت استفاده کنی ! این توابع در فایلهای DLL. تو درایو ویندوز هستند.
برای استفاده هم باید اونا رو Declare کنی! این کارو میتونی با برنامه API Viewer انجام بدی به این صورت که از منوی Add-Ins ها گزینه Add-Ins Manager و در لیست Available Add-Ins باید Vb 6 API Viewer رو لود کنی حالا این برنامه به منوی Add-Ins اضافه شده حالا این برنامه رو اجرا میکنی بعد هر تابعی رو که خواستی اسمش رو وارد میکنی بعد گزینه Add و بعد گزینه Insert رو میزنی حالا تابع به برنامت اضافه شده مثلا برای تابع FindeWindow :

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

در مورد طریقه کار باهاشون من یه تاپیک زده بودم به اسم "مرجع کامل توابع API" که دوستان برنامه های خوبی رو اون جا گذاشتن برای یادگیری توابع همونا خوبه !!! http://barnamenevis.org/forum/showthread.php?t=60618
یا اینکه از MSDN کمک بگیر .

sinpin
دوشنبه 28 خرداد 1386, 15:00 عصر
چه دروغی ؟؟؟
xman_dj سوال کرده ! درسته سوالش مشکوک میزنه اما خوب بالاخره یه سواله !

منظورم دروغ نبود دوست عزیز :چشمک:

sinpin
دوشنبه 28 خرداد 1386, 15:05 عصر
خوب شاید این راه یه جورایی جواب بده:
شما بیا با یه تایمر و با تابع FindWindow پنجره My Computer رو پیدا کن بعد بیا آدرس AddressBar رو بخون ( اتفاقا یه برنامه برای این کار من دیروز آپ کردم البته اون AddressBar اینترنت اکسپلورر رو میداد که با یکمی دستکاری میتونی همین AddressBar رو بخونی این لینکشه http://barnamenevis.org/forum/showpost.php?p=353885&postcount=733 ) بعد دایرکتوری هایی که کاربر رفته رو داری حالا هر کاری خواستی با این دایرکتوری ها بکن !!!!!!

اگه کاربر با windows explorer کار نکنه و با یه browser یا explorer دیگه کار کنه چی ؟! :متفکر:
توی vb6 نمیدونم اما توی دات نت کلاسهایی هست برای watching :
مثل : FileSystemWatcher و ... که میشه بعضی کارها رو ردگیری کرد.

__siavash__
دوشنبه 28 خرداد 1386, 19:10 عصر
اگه کاربر با windows explorer کار نکنه و با یه browser یا explorer دیگه کار کنه چی ؟! :متفکر:
توی vb6 نمیدونم اما توی دات نت کلاسهایی هست برای watching :
مثل : FileSystemWatcher و ... که میشه بعضی کارها رو ردگیری کرد.
اینو دقیقا نمیدونم اما فکر کنم باید بریم سراغ همون روش که آقای CodeMasterX گفتند !

Evil 69
سه شنبه 29 خرداد 1386, 08:23 صبح
Api ها توابعی هستند که فقط ویندوز اجازه داره ازشون استفاده کنه( یعنی کارهایی هستند که فقط ویندوز اجاره انجام اونا رو داره ) ولی تو میتونی با Api این کارها رو انجام بدی .
در ضمن این توابع مثل توابع خود vb هستند ( for,select و... نیستند)
یک توسیه : اگر میخوای برنامت کاربر ÷سند باشه ازاین توابع استفاده کن چون سرعت کارتو بالا می بره

xman_dj
پنج شنبه 31 خرداد 1386, 13:43 عصر
میشه یه مثالی بزنید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟/

xman_dj
پنج شنبه 31 خرداد 1386, 14:01 عصر
میشه یه مثال بزنید..........

نوشته شده توسط __siavash__ http://www.barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=354238#post354238)
خوب شاید این راه یه جورایی جواب بده:
شما بیا با یه تایمر و با تابع FindWindow پنجره My Computer رو پیدا کن بعد بیا آدرس AddressBar رو بخون ( اتفاقا یه برنامه برای این کار من دیروز آپ کردم البته اون AddressBar اینترنت اکسپلورر رو میداد که با یکمی دستکاری میتونی همین AddressBar رو بخونی این لینکشه http://barnamenevis.org/forum/showpo...&postcount=733 (http://barnamenevis.org/forum/showpost.php?p=353885&postcount=733) ) بعد دایرکتوری هایی که کاربر رفته رو داری حالا هر کاری خواستی با این دایرکتوری ها بکن !!!!!!

__siavash__
پنج شنبه 31 خرداد 1386, 20:18 عصر
میشه یه مثال بزنید..........

این کدها یه جورایی همون کاری رو که میخوای میکنه (یعنی دایرکتوری های سپری شده رو بدست میاره) البته بسته به این که میخوای چه کار کنی خوب باید توش تغییرات انجام بدی
یه تایمر با Interval مثلا 800 و یه لیست باکس روی فرمت بذار بعد این کدها رو کپی کن توش! حالا My Computer رو باز کن و چند تا دایرکتوری رو برو به محض اینکه My Computer بسته بشه تمام مسیر های رفته لیست میشه !


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
Const WM_GETTEXT = &HD
Dim Address As String
Dim SplitAddress() As String

Private Sub Timer1_Timer()
Dim Hwnd As Long
Dim i As Integer
Hwnd = 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
SplitAddress() = Split(Address, ";")
If Left(s, r) = SplitAddress(UBound(SplitAddress)) Then Exit Sub
Address = Address & ";" & Left(s, r)
Else
List1.Clear
'SplitAddress() = Split(Address, ";")
For i = LBound(SplitAddress) To UBound(SplitAddress)
List1.AddItem SplitAddress(i)
Next
End If
End Sub

xman_dj
یک شنبه 03 تیر 1386, 16:52 عصر
این کدها یه جورایی همون کاری رو که میخوای میکنه (یعنی دایرکتوری های سپری شده رو بدست میاره) البته بسته به این که میخوای چه کار کنی خوب باید توش تغییرات انجام بدی
یه تایمر با Interval مثلا 800 و یه لیست باکس روی فرمت بذار بعد این کدها رو کپی کن توش! حالا My Computer رو باز کن و چند تا دایرکتوری رو برو به محض اینکه My Computer بسته بشه تمام مسیر های رفته لیست میشه !


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
Const WM_GETTEXT = &HD
Dim Address As String
Dim SplitAddress() As String

Private Sub Timer1_Timer()
Dim Hwnd As Long
Dim i As Integer
Hwnd = 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
SplitAddress() = Split(Address, ";")
If Left(s, r) = SplitAddress(UBound(SplitAddress)) Then Exit Sub
Address = Address & ";" & Left(s, r)
Else
List1.Clear
'SplitAddress() = Split(Address, ";")
For i = LBound(SplitAddress) To UBound(SplitAddress)
List1.AddItem SplitAddress(i)
Next
End If
End Sub



با سلام

آقا جون این کد اشکال داره

run -time error "9"a
اگه میشه یه نگاهی کنید...................

__siavash__
یک شنبه 03 تیر 1386, 18:03 عصر
شرمنده :اشتباه:
این کد یه اشکال کوچولو داشت که اصلاح شد و خودم تست کردم و جواب داد
اونجاهایی که اضافه شده رو با آبی برات مشخص کردم
اونجایی که اررور میداد به خاطر این بود که در مرحله اول متغیرAddress مقدار دهی اولیه نشده بود.


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
Const WM_GETTEXT = &HD
Dim Address As String
Dim SplitAddress() As String

Private Sub Form_Load()
Address = "DIR Directory"
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
Dim Hwnd As Long
Dim i As Integer
Hwnd = 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
SplitAddress() = Split(Address, ";")
If Left(s, r) = SplitAddress(UBound(SplitAddress)) Then Exit Sub
Address = Address & ";" & Left(s, r)
Else
List1.Clear
SplitAddress() = Split(Address, ";") 'از حالت کامنت خارج شد
For i = LBound(SplitAddress) To UBound(SplitAddress)
List1.AddItem SplitAddress(i)
Next
End If
End Sub

Hossein Bazyan
یک شنبه 03 تیر 1386, 20:21 عصر
سلام
کد جالبیه

emadct
دوشنبه 04 تیر 1386, 09:46 صبح
سلام دوست عزیز،

با توضیحاتی که دوستان دادن امیدوارم که مشکلت حل شده باشه. ولی راه حلی ساده تر هست که نه تنها در Explorer بلکه در کل Shell Windows به شما جوابگو.

مشکل اول شما در استفاده از Findwindows اینه که یک Process همیشه Live باید وجود داشته باشه که باعث افتادن Load روی سیستم Target میشه.

شما باید با وارد شدن به Registry، و در مسیر
HKEY_CLASSES_ROOT\Directory\shell

برای خودتون شاخه ای ایجاد کنید با نام Open
در شاخه ایجاد شده زیر شاخه ای ایجاد کنید به نام Command
در Property اولیه و Default شاخه Command دستور calc رو وارد کنید.

در Property اولیه و Default شاخه Shell مقدار Open رو وارد کنید.

به صورت Registry»
[HKEY_CLASSES_ROOT\Directory\shell]
@="Open"

[HKEY_CLASSES_ROOT\Directory\shell\Open]
@="Open"

[HKEY_CLASSES_ROOT\Directory\shell\Open\Command]
@="Calc"

این تعییرات باعث میشه که از این به بعد Default Handler مربوط به تمامی شاخه های سیستم برنامه ماشین حساب باشه. و شما با کلیلک کردن بر روی تمامی شاخه ها به جای باز شدن اونها برنامه ماشین حساب رو می بینید.

به جای Calc از MyProgram.exe "%1" استفاده کنید. در برنامه خودتون به نام MyProgram تمامی کارهای ناجوانمردانتو با argv یا در VB با متغیر Command که اسم شاخه مربوطس انجام بده و در پایان برای اینکه کاربر متوجه برنامه شما نشه دستور

Shell "explorer.exe" & command

رو اجرا کن تا یک Explorer با شاخه مورد نیاز کاربر باز شه.

Explorer دارای پارامترهای جالبیه اونها رو تست کن.

برای برداشتن و پاک کردن همه چیز، Exe برنامه رو پاک کن, در رجیستری و شاخه Shell ساخته شده شاخه Open رو که مربوط به خودته پاک کن و مقدار none رو به عنوان Default برای شاخه Shell بذار تا مانند قبل کلیک بر روی شاخه باعث اجرای روتین اصلی Windows بشه.

موفق باشی
EmadCT
Microsoft Certified Solution Developer, MCP

sinpin
دوشنبه 04 تیر 1386, 12:28 عصر
سلام دوست عزیز،

با توضیحاتی که دوستان دادن امیدوارم که مشکلت حل شده باشه. ولی راه حلی ساده تر هست که نه تنها در Explorer بلکه در کل Shell Windows به شما جوابگو.

مشکل اول شما در استفاده از Findwindows اینه که یک Process همیشه Live باید وجود داشته باشه که باعث افتادن Load روی سیستم Target میشه.

شما باید با وارد شدن به Registry، و در مسیر
HKEY_CLASSES_ROOT\Directory\shell

برای خودتون شاخه ای ایجاد کنید با نام Open
در شاخه ایجاد شده زیر شاخه ای ایجاد کنید به نام Command
در Property اولیه و Default شاخه Command دستور calc رو وارد کنید.

در Property اولیه و Default شاخه Shell مقدار Open رو وارد کنید.

به صورت Registry»
[HKEY_CLASSES_ROOT\Directory\shell]
@="Open"

[HKEY_CLASSES_ROOT\Directory\shell\Open]
@="Open"

[HKEY_CLASSES_ROOT\Directory\shell\Open\Command]
@="Calc"

این تعییرات باعث میشه که از این به بعد Default Handler مربوط به تمامی شاخه های سیستم برنامه ماشین حساب باشه. و شما با کلیلک کردن بر روی تمامی شاخه ها به جای باز شدن اونها برنامه ماشین حساب رو می بینید.

به جای Calc از MyProgram.exe "%1" استفاده کنید. در برنامه خودتون به نام MyProgram تمامی کارهای ناجوانمردانتو با argv یا در VB با متغیر Command که اسم شاخه مربوطس انجام بده و در پایان برای اینکه کاربر متوجه برنامه شما نشه دستور

Shell "explorer.exe" & command

رو اجرا کن تا یک Explorer با شاخه مورد نیاز کاربر باز شه.

Explorer دارای پارامترهای جالبیه اونها رو تست کن.

برای برداشتن و پاک کردن همه چیز، Exe برنامه رو پاک کن, در رجیستری و شاخه Shell ساخته شده شاخه Open رو که مربوط به خودته پاک کن و مقدار none رو به عنوان Default برای شاخه Shell بذار تا مانند قبل کلیک بر روی شاخه باعث اجرای روتین اصلی Windows بشه.

موفق باشی
EmadCT
Microsoft Certified Solution Developer, MCP


واقعا ایده ی جالبی بود ممنون :تشویق:

amirsajjadi
جمعه 06 مهر 1386, 23:30 عصر
با سلام
اینم برنامه بدست آوردن آدرس وارد شده در Addressbar اکسپلورر