سلام
یاهو (یاهو و گوگل نه . آوای خوشحالی منظورمهبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) . آخه این الگوریتم به این سادگی چی بود که من نتونستم اون موقع که file i\o رو بررسی میکردم متوجه شمبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید . اینجاست که امام خامنه ای میگه به وعده ی خدا اعتماد داشته باشید (إِن تَنصُرُوا اللَّهَ يَنصُركُم) . حتما اون موقع اعتمادم کمتر بود برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
این کد رو برای تیکه کردن یک فایل بدین :
کد:psdPath=_SourceFolder.."\\Document.pdf"; pdfSaveName = _SourceFolder.."\\New folder\\SaveCodeLine"; --film.mpg New folder pdfOpen = io.open(psdPath , "rb"); Counter = 1; while (value==nil) do psdRead = pdfOpen:read(20000); if (psdRead~=nil) then saveHandle = io.open(pdfSaveName..Counter..".txt", "wb"); saveHandle:write(psdRead); saveHandle:close(); Counter = Counter + 1; else break; end end pdfOpen:close();
این کد رو هم برای چسبوندن دوباره برای ایجاد فایل واحد از تیکه هایی که قبلا ایجاد کردین :
پارامترهای توابع و همینطور مسیر فایل را و حتی الگوریتم رو طبق خواسته تون تغییر بدینکد:openTxt = _SourceFolder.."\\New folder\\SaveCodeLine"; savePdf = _SourceFolder.."\\MyPdf.pdf"; for i=1,5 do openHandle = io.open(openTxt..i..".txt", "rb"); textContain = openHandle:read("*a"); pdfHandel = io.open(savePdf, "ab"); pdfHandel:write(textContain); pdfHandel:close(); --openHandle:write("salam 1"); openHandle:close(); end
این کد میتونه هر فایلی در هر حجمی را تیکه کنه
فایل های تیکه شده رو (اگه فیلم و ویدئویی و از این دست باشه باشه نه exe و اینا) اگه با فرمت خودش ذخیره کنیم ، میشه جداگانه هم اجرا کرد.
حالا میدونین دیگه . میتونین روی هر تیکه از فایل ، انکد خاص خودتون رو داشته باشین با توابع Crypto (البته هدف از تیکه کردن فایل ، انکد کردن شون نیست)
راستی اینم بگم که البته توی کد دوم (وصل کردن فایل ها) ، کدی که من گذاشتم ، خوب تعداد فایل هایی که تیکه کردم رو میدونستم و 5 تا بود . واسه همین توی حلقه ی 5 تایی گذاشتم . شما باید به تعداد تیکه های فایل تون این حلقه را بزارین
چقد دنبال تیکه کردن فایل بودم برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید الگوریتم به این چندان سادگی را نمیدونم چرا قبلا یادم نیومدبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
آخرین ویرایش توسط SajjadKhati در تاریخ 07-06-16 انجام شده است
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
نکته درباره File i\o :
اول اینکه وقتی کلا خط به خط میخونیم و ذخیره میکنیم اطلاعات ذخیره شده خراب از آب درمیاد ! حالا چه با تابع file:lines() یا با تابع حتی file:read("*l"); فقط باید یا کل فایل را یکجا بخونیم و توی متغییر بریزیم و یا اگه فایل حجیم هست (بالای 200 مگ) و داخل متغییر جا نمیشه ، باید تعداد کاراکتری که میخونیم رو با استفاده از تابع file:read و نوشتن تعداد کاراکترهای مورد نیاز در آرگومان این تابع (نوشتن شماره) و قرار دادن در حلقه while ، به همون تعداد از کاراکترهای اون فایل را بخونیم و توی متغییر ذخیره و توی فایل جداگانه ذخیره کنیم (چرا خوندن خط به خط جواب نمیده ، نمیدونم)
دوم اینکه میشه اطلاعات فایل های باینری رو داخل آرایه ریخت اما وقتی میخوایم آرایه ها را به هم متصل کنیم چون یا بصورت دستی مجبوریم یه رشته ی خالی را برای مقدار ذخیره ی خونه های قبلی آرایه برای جسبوندن استفاده کنیم ، و وقتی هم که به رشته ی حاوی اطلاعات باینری ، کوچیک ترین چیز و یا رشته و یا کاراکتری اضافه کنیم (حتی اگه رشته ی خالی که "" هست رو اضافه کنیم) ساختار باینری و اطلاعاتش کاملا به هم میریزه بنابراین نمیشه اطلاعاتی که داخل آرایه هست رو توی خروجی فایلی ذخیره کنیم (ذخیره میشه ولی اطلاعات آرایه ی ذخیره شده ، اشتباه هست و فایل نهایی ارور میده) و یا اینکه برای اتصال اعضای آرایه از تابع Table.Concat (برای اتوپلی) و یا تابع table.concat (برای لوا) استفاده میکنیمم که هردوی این توابع در آرگومان دوم شون حداقل رشته ی خالی میگیرن برای جدا کردن اعضای آرایه و چون گفته شد که رشته ی حتی اگه هم خالی باشه باعث به هم ریختن اطلاعات رشته ی باینری میشه ، این روش هم نمیشه بنابراین تا جایی که میدونم ، اطلاعات داخل آرایه رو نمیشه به عنوان اطلاعات درست باینری ذخیره کرد.
البته اطلاعات باینری ذخیره شده در آرایه (اگه با تابع file:read() باشه برای اطلاعات باینری (برای اطمینان از این تاب استفاده کنین)) ، درست هست ولی فقط ذخیره نمیتونیم کنیم اطلاعات آرایه رو داخل فایل
سوم اینکه بنابراین فقط اطلاعات فایل های باینری رو میشه بصورت مستقیم ذخیره کرد یعنی اطلاعات فایل را بخونیم و داخل فایل دیگه ذخیره کنیم یا اینکه این اطلاعات باینری رو داخل متغییری ذخیره و بعد داخل فایل دیگه بصورت باینری ذخیره کنیم . البته اگه فایل بزرگ باشه ، همه ی اطلاعات داخل متغییر جا نمیشن و ممکنه ارور بده که در این صورت با شماره دادن در آرگومان تابع file:read() ، به تعداد همون شماره ، کاراکتر رو میخونه یعنی اطلاعات فایل تیکه میشه و حالا این متغییر را که حاوی بخشی از اطلاعات اون فایل بزرگ (فایل مبدا) هست را در یک فایل دیگه میشه ذخیره کرد که مشخصه داخل حلقه میتونیم به تعدادی که دلمون میخواد تیکه کنیم
آخرین ویرایش توسط SajjadKhati در تاریخ 07-06-16 انجام شده است
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
mohammad- (28-06-16)
یوهو پیدا کردم بعد از یه قرن
خدایا شکرت
الان در پوست خودم گنجایش ندارم برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
باز هم معنای إِن تَنصُرُوا اللَّهَ يَنصُركُم که امام خامنه ای گفت برام مجسم شد
استاد علی خیلی از راهنمایی تون ممنونم . واقعا لطف بزرگی کردین . دیگه هم لازم نیست وقتم رو روی زبان های دیگه برای ساخت dll برای زبان لوا صرف کنم
تجربه ی خودمو بگم تا فراموش نکردم
آموزش ساخت dll در #C برای زبان های غیر دات نت (Unmanaged Export) :
1) اول نوع پروژه رو Class Library انتخاب کنین (پروژه ی Class Library Portable انگار بخاطر اینکه نمیتونه Unmanaged Exports رو نصب کنه (البته برای من) پیشنهاد نمیشه)
2) بعد از منوی Project ، گزینه ی آخر رو انتخاب کنین (گزینه ی آخر ، نام پروژه و در ادامه اش کلمه ی properties داره) و در سربرگ دوم که Build هست برین و گزینه ی platform target (در وسط این سربرگ) و گزینه ی target (در بالای این سربرگ) رو روی X86 بزارین (چون اتوپلی ، نرم افزار 32 بیتی هست) و کلا به هیچ وجه نباید موقع Unmanaged Export ، روی حالتی غیر از x86 یا x86 که حالا بسته به نوع نرم افزار مقصدتون که چند بیتی رو ساپورت میکنه باشه (یعنی به هیچ وجه نباید روی any cpu تنظیم شده باشن که بصورت پیش فرض هستن و باید تغییر داد همونطور که گفته شد). البته من برای اطمینان ، علاوه بر اینها ، گزینه ای کنار گزینه ی start (که برای اجرا و کمپایل نرم افزار این دکمه ی استارت رو میزنیم) وجود داره که بصورت combo box هست که من از گزینه ی آخر اون combo box ، گزینه ی configuration رو میزنم و از اونجا هم گزینه ی any cpu رو به x86 تغییر میدم
3) بعد تابع تونو بنویسین ( دقت کنین تابع باید از نوع public static باشه تا بدون ایجاد شی و از هر جا بتونه فراخونی بشه) . دقت کنین احتمالا بیشتر از یک تابع و همچین توابع overloade هم نمیشه برای یه کلاس نوشت در حالت Unmanaged Export (توی یه منبع انگلیسی نوشته بود که بصورت بازگشتی هم نمیشه این نوع تابع ای که مینویسیم رو داخل سی شارپ فراخونی کرد و نوشت ولی اینا رو تست نکردم)
4) در منوی Tools ، گزینه ی NuGet Package Manager و بعد زیر منوی Package Manager Console رو انتخاب کنین و کد زیر رو در پنجره ی باز شده (پنجره ی Package Manager Console بنویسین) . البته قبل از نوشتن کد زیر ، مطمئن بشین که ویژال استودیو به اینترنت دسترسی داره :
حالا فایل های مورد نیاز برای Unmanaged Exports رو دانلود میکنه (آخرش باید پیام Successfully بده)کد:Install-Package UnmanagedExports
5) بعد از دانلود موفقیت آمیز ، فضای نام زیر رو به پروژه تون اضافه کنین :
بعد در بالای تابعی که نوشتین ، یه کلوشه باز کنین و در اونجا باید با تابع DllExport ، نام export و همچنین نوع export تون رو بنویسین . نام export تون باید هم نام تابع تون باشه و بصورت یه رشته ، در اولین آرگومان تابع DllExport (که در کلوشه ی بالای نام تابع مینویسین) ، بنویسین . در آرگومان دوم تابع DllExport ، نوع export که اغلب پیشنهاد میشه stdcall رو انتخاب کنین ، بنویسین . به این ترتیب که پروپرتی ای بنام CallingConvention (دقت کنین که در این پروپرتی ، حروف C ، بصورت حروف بزرگ هستند و باید این طوری بنویسین . یک حالت دیگه ی callingConvention بصورت کمل کیس هست که بعدش براتون علامت دو نقل قول میاره که این حالت منظور نیست) رو بنویسین و بعدش علامت مساوی بزارین (=) (البته خود اینتل لایسنس ویژال استودیو براتون میاره) و بعدش در فضای نام System.Runtime.InteropServices (این فضای نام رو بنویسین) و نقطه بزارین و enum ای بنام CallingConvention رو بنویسین (تا اینجا رو بازم خود اینتل لایسنس ویژال استودیو براتون میاره) و بعدش نقطه و بعدش متغییر که همون نوع خروجی مورد نظرتون هست را انتخاب کنین که اغلب نوع stdcall رو انتخاب میکنن برای unmanagedکد:using RGiesecke.DllExport;
یعنی به این صورت بنویسین :
کد:[DllExport("MyFunc", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
یه نمونه تابع کوچیک که دو تا عدد رو میگیره و جمع شونو برمیگردونه در سی شارپ که بصورت Unmanaged Export خروجی گرفته شد (البته اول ، نکاتی که گفته شد یعنی از نکته ی 1 تا 4 باید انجام بشه) :
کد:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using RGiesecke.DllExport; namespace ClassLibrary2 { public class Class1 { [DllExport("MyFunc", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)] public static int MyFunc(int a, int b) { return a + b; } } }
در مثال بالا ، به فضای نام RGiesecke.DllExport که اضافه شد و تابع DllExport که در بالای تابعی که نوشتیم (در بالای تابع MyFunc که نوشتیم) که در علامت کلوشه [] هست و آرگومان اول این تابع که نام Export مون که رشته ای هم نام تابع مون هست و همینطور آرگومان دوم این تابع رو دقت کنین)
حالا در اتوپلی برای فراخونی این تابع ، این کد رو بدین (البته در آرگومان اول تابع زیر در اتوپلی ، مسیر فایل dll تون که هر جا میزارید رو بدین) :
کد:result = DLL.CallFunction("AutoPlay\\Scripts\\ClassLibrary2.dll", "MyFunc", "5,10", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); Dialog.Message("Notice", result, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
راستی اینم بگم که Unmanaged Export هیچ ربطی به نسخه ی دات نت نداره و نسخه ی دات نت میتونه 4.5 و حتی بالاتر هم باشه
بعد دقت کنین چون پروژه رو بصورت x86 تولید کردین ، وقتی dll تون رو build کردین ، دیگه dll تون توی پوشه ی Debug ذخیره نمیشه . بلکه کنار پوشه ی Debug ، پوشه ای بنام x86 ساخته میشه که باز داخل خود همین پوشه ی x86 ، پوشه ی Debug ساخته میشه که dll تون داخل این پوشه قرار میگیره
6) تذکر : اتوپلی با تابع Dll.CallbackFunction اش فقط مقدار عدد و رشته رو میتونه به تابع داخل فایل dll بفرسته و دریافت کنه.
هر چیز دیگه ای بجز این در تابع مون (در dll) برگردونده شه مثل کل آرایه برگردونده شه (عضو خاصی از آرایه که عدد یا رشته رو برگردونه منظورم نیست) ، برنامه اتوپلی (اتوران) ، کرش میکنه
سعی کنید بولین هم ارسال نکنید ولی اشکالی نداره خروجی تابع تون در dll ، بولین برگردونه
مقدار بازگشتی تابع مون (در dll) اگه void بود ، در چهارمین آرگومان تابع DLL.CallFunction مون باید مقدار DLL_RETURN_TYPE_LONG رو انتخاب کنیم وگرنه نوع چیزی رو که برمیگردونه رو باید در چهارمین آرگومان این تابع انتخاب کنیم
باز هم یه تشکر گسترده از استاد علی کنم . خیلی ممنون استاد علی
آخرین ویرایش توسط SajjadKhati در تاریخ 03-07-16 انجام شده است
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
AMD>INTEL (03-07-16), M A H R A D (03-07-16), mohammad- (05-07-16)
آموزش نصب اتوماتیک فایل های msi
یه چند تا پست آموزشی و پروژه هست که تو فیلم ها گفته نشد ، واسه همین گفتم بگم دیگه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
این پست واسه قرار دادن و آموزش نصب اتوماتیک فایل ها (بدون اومدن پنجره ی واسه زدن دکمه های Next و ...) از طریق فایل های MSI :
چیزی نیس که ، یه خطه همش . خوندن نداره که برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
کد:InstallMsi = MSI.InstallProduct("AutoPlay\\Docs\\Gmail Notifier Pro 4.5.1.msi", "ACTION=INSTALL");
خوب دیگه ملومه از اسمش دیگه . باید نوع و پسوند فایل تون MSI (نه exe ها) باشه که تک و توک فایل های نصبی مثل نرم افزارهای Google Drive و ... با این پسوند ان (حیف .شانسو میبینی؟ اگه هموشون با این پسوند میشدن ، چی میشد برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید )
دومین نکته این که تو ورودی اول کد بالا ینی "AutoPlay\\Docs\\Gmail Notifier Pro 4.5.1.msi" باید مسیر فایل MSI ای که میخاین نصب کنین رو بدین (هر پوشه ای که میرین باید دو تا علامت \\ بزارین (یکی نمیشه ها) باز نگین نگفتی برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید )
سومین نکته هم اینه که همونطور تو راهنمای این دستور ملومه ، اگه میخاین فایل رو حذف کنین (ینی قبلا اگه نصب شده بود) ، باید تو ورودی دوم این کد ، رشته ی "REMOVE=ALL" رو وارد کنین (مثل همینی که نوشتم باید داخل دابل کوتیشن باشه ها ینی نوشته هه باید داخل علامت " " باشه چون از نوع رشته هه) که اینش به درد ما زیاد نمیخوره (حذف کی میکنه آخه برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) و اگه میخاین فایل msi رو نصب کنین تو ورودی دوم ، مثل کد بالا باید بنویسین "ACTION=INSTALL" و اگه میخاین بصورت administrator نصب کنین باید "ACTION=ADMIN" رو وارد کنین
اگه نصب با موفقیت انجام شه ، متغییر اش (که تو اینجا طرف چپ مساوی ینی InstallMsi میشه) برابر true میشه ینی true رو برمیگردونه و اگه نصب نشه یا مشکلی پیش بیاد ، false رو برمیگردونه یا همون ذخیره میکنه که تو راهنماش نوشته هه. مثلا اگه میخاین وقتی با موفقیت نصب شد پیام بده ، چون اگه با موفقیت نصب بشه ، متغییرش (InstallMsi) برابر با true میشه پس میگین اگه برابر با true شد ، یه پیام بده ینی اگه میخاین پیام بده ، در ادامه ی کد بالا ، اینو بنویسین :
کد:if InstallMsi==true then Dialog.Message("Notice", "your program installed successfully", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); end
موفق و پیروز و سربلند باشین
آخرین ویرایش توسط SajjadKhati در تاریخ 24-10-16 انجام شده است
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
salpc (23-10-16)
سلام
این کد اتصال usb و کلا device هست و نیازمند فعال سازی پلاگین MemoryEx هست .
در Global Function :
کد:WM_MOVING = 0x0216; WM_DEVICECHANGE = 0x0219; DBT_DEVICEARRIVAL = 0x8000; DBT_DEVTYP_VOLUME = 0x00000002; function EventHandler(hWnd, uMsg, wParam, lParam) if (hWnd == mainWinHdl and uMsg == WM_DEVICECHANGE) then --MainWindows_DEVICECHANGE if (wParam == DBT_DEVICEARRIVAL) then -- etesal device DEV_BROADCAST_HDRStructure = MemoryEx.DefineStruct( {UINT("dbch_size"); UINT("dbch_devicetype"); UINT("dbch_reserved"); } ); hdlDEVStruct = MemoryEx.AssignStruct(lParam, DEV_BROADCAST_HDRStructure); if (hdlDEVStruct.dbch_devicetype == DBT_DEVTYP_VOLUME) then -- etesal usb Dialog.Message("Notice", "usb device connected", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); end end end return Subclass.OldWinProc(hWnd, uMsg, wParam, lParam); end
در OnShow :
کد:mainWinHdl = Application.GetWndHandle(); Subclass.Create(mainWinHdl, EventHandler);
در OnShutDown :
کد:Subclass.Remove(mainWinHdl);
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
Speed Racer (25-05-18)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks