PDA

View Full Version : برگرداندن مسیر جاری ( ؟؟؟؟ )



DoctorJay
سه شنبه 04 دی 1386, 00:33 صبح
چند تا API در این رابطه دیدم , ولی ظاهراً کار نکردن !!!!!

( مسیر جاری منظور مسیریه که کاربر الان اونجاست )

( بصورت Update می خوام , یعنی اینکه تو هر لحظه که کاربر از این درایو به اون درایو و از این فولدر به اون فولدر میره بشه مسیرشو برگردوند )

پیشاپیش تشکر .........

__________________________________________________

تصور کن اگر قرار بود هر کس به اندازه ی دانش خود حرف بزند چه سکوتی بر دنیا حاکم میشد ... ..... ناپلئون

ali_habibi1384
سه شنبه 04 دی 1386, 08:08 صبح
سلام دوست عزیز
لازم نیست از توابع API استفاده کنی دستور app.path این کارو میکنه:


text1.text=app.path

مسیر جاری توی text1 نشون داده میشه.

sinpin
سه شنبه 04 دی 1386, 09:13 صبح
سلام دوست عزیز
لازم نیست از توابع API استفاده کنی دستور app.path این کارو میکنه:


text1.text=app.path
مسیر جاری توی text1 نشون داده میشه.

فکر میکنم بد نباشه یکبار دیگه سئوال دوستمون رو با دقت بخونید :

چند تا API در این رابطه دیدم , ولی ظاهراً کار نکردن !!!!!

( مسیر جاری منظور مسیریه که کاربر الان اونجاست )

( بصورت Update می خوام , یعنی اینکه تو هر لحظه که کاربر از این درایو به اون درایو و از این فولدر به اون فولدر میره بشه مسیرشو برگردوند )

پیشاپیش تشکر .........

__________________________________________________

تصور کن اگر قرار بود هر کس به اندازه ی دانش خود حرف بزند چه سکوتی بر دنیا حاکم میشد ... ..... ناپلئون

noorsoft
سه شنبه 04 دی 1386, 11:09 صبح
دستور Api زیر را امتحان کن
CurrentPath

DoctorJay
سه شنبه 04 دی 1386, 16:29 عصر
اقا من تابع CurrentPath رو ندارم

یه سرچکی هم زدم ولی ... !!

من این تابع رو داشتم ولی نتونستم ازش استفاده کنم

چرا ؟ شاید هنوز با APIها آشنای آشنا نیستم !

یه لطفی کنید , اگه تابع CurrentPath رو دارید واسم بذارید و اینکه طرز درست استفاده از این تابع رو بهم تفهیم کنید


Private Declare Function GetCurrentDirectory Lib "kernel32.dll" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

توضیح این تابع :

این تابع آدرس مسیر جاری را برمیگرداند
اگر تابع با خطایی مواجه شود مقدار بر گشتی صفر و گر تابع کار خود را با موفقیت به پایان برساند مقدار بازگشتی یک عدد غیر صفر خواهد بود که هندل پنجره فعال است

nBufferLength : طول بافر lpBuffer
lpBuffer : مقدار این بافر توسط تابع مقدار دهی می شود و حاوی مسیر جاری خواهد بود


________________________________________

عشق قویترین سپاه است ، زیرا در یک لحظه بر قلب و مغز و جسم حمله میکند .... ....... ولتر

DoctorJay
پنج شنبه 06 دی 1386, 17:14 عصر
کسی نیست مرا یاری کند . . . ؟؟

sinpin
پنج شنبه 06 دی 1386, 17:30 عصر
کسی نیست مرا یاری کند . . . ؟؟

شما هنوز از این کارای عجیب و غریب دست نکشیدید ؟! :چشمک:
دقیقا میخواین چیکار کنید ؟
هرجا که کاربر سرک کشید یک فایل ایجاد کنید ؟

DoctorJay
پنج شنبه 06 دی 1386, 17:34 عصر
شما هنوز از این کارای عجیب و غریب دست نکشیدید ؟! :چشمک:
دقیقا میخواین چیکار کنید ؟
هرجا که کاربر سرک کشید یک فایل ایجاد کنید ؟


:تشویق: :تشویق: :تشویق: :تشویق:

آقا زدی وسط خال ... ولی حالا شما فکر کن که برای مقاصد شوم نمی خوام . میشه ؟؟ :لبخند:

sinpin
پنج شنبه 06 دی 1386, 21:38 عصر
ویرایش بعدی : ببخشید ظاهرا اینجا تالار vb است
من تا الان فکر میکردم تالار خودیه ! کدی که فرستادم به زبان سی شارپ است.(اما فکر میکنم بتونید ازش ایده بگیرید)

یه راه خوب و نسبتا راحت واسه کاری که میخواین بکنید، مانیتور و ردیابی کردن Explorer.exe است.
یعنی برنامه تون - بوسیله یک تایمر چک کنه - هرجا که یک نمونه از ویندوز اکسپلورر باز شد، بیاد و مقدار AddressBar اون رو بخونه و ...

فکر میکنم این سورس کد کمک کنه؛
برنامه ای که میاد و url سایتهای باز شده در اینترنت اکسپلورر رو نشون میده (من وقت نکردم نگاش کنم اما فکر میکنم با یه خورده تغییرات بشه واسه windows explorer و نشون دادن address bar ازش استفاده کرد.)

منبع : http://channel9.msdn.com/ShowPost.aspx?PostID=161160 (http://channel9.msdn.com/ShowPost.aspx?PostID=161160)

sinpin
پنج شنبه 06 دی 1386, 21:55 عصر
اینم فکر میکنم واسه vb جواب بده :


PrivateDeclareFunction FindWindowEx Lib"user32"Alias"FindWindowExA" (ByVal hWnd1 AsInteger, ByVal hWnd2 AsInteger, ByVal lpsz1 AsString, ByVal lpsz2 AsString) As Int32
PrivateDeclareAutoFunction SendMessage Lib"user32.dll" (ByVal hWnd As IntPtr, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As IntPtr

PrivateConst WM_GETTEXT = &HD
PublicConst WM_GETTEXTLENGTH = &HE
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim hWnd As IntPtr = GetIEhWnd()
hWnd = FindWindowEx(hWnd, 0, "WorkerW", vbNullString)
hWnd = FindWindowEx(hWnd, 0, "ReBarWindow32", vbNullString)
hWnd = FindWindowEx(hWnd, 0, "ComboBoxEx32", vbNullString)
Dim s AsString

s = SendMessage(hWnd, WM_GETTEXT, 0, 0)
MsgBox(s)
EndSub


http://www.msdner.com/dev-archive/213/10-64-2138449.shtm

sinpin
جمعه 07 دی 1386, 13:49 عصر
راستی یک کار خیلی راحتتر (البته فقط روی ویدوز اکسپلورر جواب میده) :

شما هر پنجره ای که باز کنید و وارد هر مسیری که بشید عنوان پنجره به اون مسیر تبدیل میشه. پس میتونید به راحتی فقط با خوندن Title پنجره های باز شده از نوع ویندوز اکسپلورر آدرس رو پیدا کنید.
میدونم این روش یکسری محدودیتها ممکنه داشته باشه اما خوب در عوض خیلی راحته...

__siavash__
جمعه 07 دی 1386, 23:01 عصر
یه سری به این تاپیک بزن
کدی هست که باهاش برنامه رو به اون جاهایی که کاربر بر روی سیستم مراجعه میکنه کپی کرد؟ (http://barnamenevis.org/forum/showthread.php?t=70719&highlight=split&page=3)

mahmood744
شنبه 08 دی 1386, 16:55 عصر
با عرض معذرت از این بحث خوشم آمد و برنامه را چک کردم :خجالت:
اما ازاین دو خط خطا میده چکار کنم

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim hWnd As IntPtr = GetIEhWnd()

DoctorJay
چهارشنبه 01 خرداد 1387, 12:32 عصر
یه سری به این تاپیک بزن
کدی هست که باهاش برنامه رو به اون جاهایی که کاربر بر روی سیستم مراجعه میکنه کپی کرد؟


من از این کدا استفاده کردم, ولی بصورت لحظه ای مسیر هارو بر نمیگردونه و وقتی پنجره بسته شد

یکجا با هم عمل برگردوندن مسیرهارو انجام میده . نمیشه کاری کرد که این کار بصورت لحظه ای انجام بشه ؟

__siavash__
چهارشنبه 01 خرداد 1387, 15:40 عصر
يه ليست باكس و يه تايمر با Interval مناسب (200 خوبه ) بزار روي فرمت بعد اين كدها رو كپي كن


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()
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

If Address <> "" Then
SplitAddress() = Split(Address, ";")
If Left(s, r) = SplitAddress(UBound(SplitAddress)) Then Exit Sub
End If

Address = Address & ";" & Left(s, r)
SplitAddress() = Split(Address, ";")
List1.AddItem SplitAddress(UBound(SplitAddress))
End If
End Sub

DoctorJay
چهارشنبه 01 خرداد 1387, 16:03 عصر
درسته که واسه تشکر نباید یه پست ساخت , ولی نشد دیگه , ببخشید !!

ممنوووووووووووووووووووووو وون :بوس:

واقعا بهش نیاز داشتم .

xxxxx_xxxxx
پنج شنبه 02 خرداد 1387, 20:52 عصر
با این مشکلتون حل میشه

http://barnamenevis.org/forum/attachment.php?attachmentid=4103&d=1149966348