PDA

View Full Version : سوالی راجع انجام عملیات Copy یا Cut ( ؟؟؟؟ )



DoctorJay
چهارشنبه 05 دی 1386, 22:23 عصر
من می خوام وقتی عملیات کپی یا کات توی کامپیوتر داره انجام میشه مثلا یه Msg نشون داده بشه که " عملیات کپی یا کات در حال انجام است "

همچین چیزی امکان پذیر ؟؟ راهنمایی کنید لطفا . . .

_________________________________________________

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

ƒxmahdi
پنج شنبه 06 دی 1386, 10:56 صبح
دوست عزیز اگه توسط خود وی بی این کار را انجام بدی می تونم کمکت کنم ولی اگر
می خواهید عملیات کپی یا کات که در کامپیوتر انجام می شه را تشخیص بدی متاسفانه من نمی تونم کمکت کنم
موفق باشی

bobrus
پنج شنبه 06 دی 1386, 14:56 عصر
شرمنده یه سوالم این وسط جواب بدین
اگه بخوایم تمام فایلهای یه فلدر کپی بشه توی یه جای دیگه چطوری میشه انجامش داد به طوری که مثل ویندوز معلوم بشه الان کدوم فایل داره کپی می شه

DoctorJay
پنج شنبه 06 دی 1386, 17:17 عصر
شرمنده یه سوالم این وسط جواب بدین
اگه بخوایم تمام فایلهای یه فلدر کپی بشه توی یه جای دیگه چطوری میشه انجامش داد به طوری که مثل ویندوز معلوم بشه الان کدوم فایل داره کپی می شه

دوست عزیز بنظرم سوالت سوال خوبی باشه ... پس به عنوان یه موضوع جدید اونو مطرح کن ( به نظر من )

من جوابشو نمی دونم , سوالیه که واسه خودمم پیش اومده

چون معمولا کپی ای که از توی برنامه دستور به انجامش داده میشه منجر به نمایش پنجره Copying نمیشه !!

البته اگه خودت بخوای یه پنجره ی نمایش اسم فایلهارو بسازی این شدنیه !

DoctorJay
شنبه 08 دی 1386, 10:54 صبح
من در واقع می خوام وقتی عملیات کپی یا کات شروع شد, فرم برنامه که در حافظه بار هست Show بشه و کارای تعیین شده رو انجام بده ...

راهنمایی کنید ممنون میشم ....

bobrus
یک شنبه 09 دی 1386, 13:21 عصر
البته اگه خودت بخوای یه پنجره ی نمایش اسم فایلهارو بسازی این شدنیه !البته من هیمنو میخوام یعنی مشکل اصلیم سر اینکه فایلهای توی اون فلدر رو چطور تشخیص بدم اگه کدی دارید ممنون می شم بدین اگه نه یه تاپیک چدید بدم

Mbt925
یک شنبه 09 دی 1386, 13:44 عصر
در اسرع وقت به نمونه ساده براتون قرار میدم.

(نمونه در صورت ادامه پیدا کردن بحث پایین گذاشته خواهد شد.)

__siavash__
سه شنبه 18 دی 1386, 15:16 عصر
با این تابع کار کن ببین مشکلت حل میشه ... !


' in Module
Option Explicit

Private Const CALLBACK_CHUNK_FINISHED As Long = &H0
Private Const CALLBACK_STREAM_SWITCH As Long = &H1
Private Const PROGRESS_CONTINUE As Long = &H0
Private Const PROGRESS_CANCEL As Long = &H1
Private Const PROGRESS_STOP As Long = &H2
Private Const PROGRESS_QUIET As Long = &H3
Private Const COPY_FILE_FAIL_IF_EXISTS As Long = &H1
Private Const COPY_FILE_RESTARTABLE As Long = &H2
Private Const COPY_FILE_ALLOW_DECRYPTED_DESTINATION As Long = &H8

Private Declare Function CopyFileEx Lib "kernel32" Alias "CopyFileExA" (ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal lpProgressRoutine As Long, _
ByVal lpData As Long, _
ByVal pbCancel As Long, _
ByVal dwCopyFlags As Long) As Long

Dim bCancel As Boolean

Public Function FileCopyProgress(ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long

Dim CopyFlags As Long

CopyFlags = COPY_FILE_ALLOW_DECRYPTED_DESTINATION
If (bFailIfExists = True) Then CopyFlags = CopyFlags Or COPY_FILE_FAIL_IF_EXISTS
bCancel = False

FileCopyProgress = CopyFileEx(lpExistingFileName, lpNewFileName, AddressOf CopyProgressRoutine, ByVal 0&, ByVal VarPtr(bCancel), ByVal CopyFlags)

End Function

Public Sub CancelCopy()
bCancel = True
End Sub

Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, _
ByVal TotalBytesTransferred As Currency, _
ByVal StreamSize As Currency, _
ByVal StreamBytesTransferred As Currency, _
ByVal dwStreamNumber As Long, _
ByVal dwCallbackReason As Long, _
ByVal hSourceFile As Long, _
ByVal hDestinationFile As Long, _
ByVal lpData As Long) As Long
Static PreviousValue As Long
Dim NewValue As Long
NewValue = CLng((TotalBytesTransferred / TotalFileSize) * 100)
If (NewValue <> PreviousValue) Then
Form1.Caption = CStr(NewValue) & "% completed"
PreviousValue = NewValue
End If
DoEvents
CopyProgressRoutine = PROGRESS_CONTINUE

End Function





'in Form
Private Sub btnCopy_Click()
Call FileCopyProgress(Path1, Path2, False)
End Sub
Private Sub btnCancel()
CancelCopy
Form1.Caption = "Canceled!"
End Sub

__siavash__
سه شنبه 18 دی 1386, 19:53 عصر
من می خوام وقتی عملیات کپی یا کات توی کامپیوتر داره انجام میشه مثلا یه Msg نشون داده بشه که " عملیات کپی یا کات در حال انجام است "

همچین چیزی امکان پذیر ؟؟ راهنمایی کنید لطفا . . .

_________________________________________________

عشق قویترین سپاه است ، زیرا در یک لحظه بر قلب و مغز و جسم حمله میکند . .... ... ولتر
شما باید از Hook استفاده کنید !
با این سورس میتونید تمام Text هایی رو که به حاظه ClipBoard میره بخونید
دقیقا همون کاری که برنامه های Download Manager انجام میدن !

DoctorJay
سه شنبه 18 دی 1386, 20:37 عصر
شما باید از Hook استفاده کنید !
با این سورس میتونید تمام Text هایی رو که به حاظه ClipBoard میره بخونید
دقیقا همون کاری که برنامه های Download Manager انجام میدن !

خیلی ممنونم . سورس جالبی بود .

ولی من منظورم عملیات روی تکست ها نبود .

من می خوام وقتی یک فایل یا پوشه رو کپی می کنیم , موقع Paste کردنش برنامه متوجه

عملیات بشه و مثلا یک پیغام نشون بده که عملیات الصاق (Paste) در حال انجام است

یا هر دستور دلخواه دیگه .

با تشکر از شما __siavash__ عزیز :لبخندساده:

__siavash__
سه شنبه 18 دی 1386, 21:50 عصر
با یه کم دستکاری تو همین سورس میشه از کپی هر نوع دیتایی مطلع شد !!!
اما برای آگاه شدن از Past باید بری دنبال Windows Message Monitoring و پیغام های ویندوز رو رد گیری کنی ...
این سورس هم یه نگاه بکن !

Mbt925
سه شنبه 18 دی 1386, 23:12 عصر
یه نمونه ی خیلی خیلی خوب برای کپی کردن فایل ها بدون استفاده از هیچ کدوم از توابع کپی.

این نمونه ، یه نمونه ی آموزشی هست و اسمش هم معنی خاصی نداره ،

این نمونه می تونه محتویات یک فولدر رو هم کپی کنه (فایل هاش).

نکات آموزش خیلی خوبی داره ، حتما ازش استفاده کنید.

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

http://mbt925.persiangig.com/Learn_Sample/MBFastCopyScrShot.jpg

دانلود برنامه (http://mbt925.persiangig.com/Learn_Sample/MBFastCopy.rar)

bobrus
چهارشنبه 19 دی 1386, 15:43 عصر
از همه دوستان معذرت می خوام چون فکر کنم سوال من باعث انحراف این تاپیک شد
از دوستانی که جواب دادن متشکرم
راستی آقای __siavash__ اون کدایی که تو صفحه قبل دادین دقیقاً چه کار می کنه؟

__siavash__
شنبه 22 دی 1386, 11:36 صبح
شرمنده !
من قبلا میخواستم جواب بدم که کامپیوترم ReStart شد بعد که اومد بالا اصلا یادم رفت داشتم چه کار میکردم !!!

اون کد های صفحه قبل از تابع API ی CopyFileEx برای کپی کردن استفاده میکنه که این تابع بوسیله یه تابع CallBack عملیات درحال انجام رو به ما گذارش میکنه
و میتونی پیشرفت کپی رو بر حسب درصد در Title فرم ببینی ...
البته میتونی با ProgressBar هم این مقدار رو برگردونی !