گفتگو هایی در باب سی شارپ

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سوال هاتون ربطی به این تاپیک نداره. در پیدا کردن حداقل و حداکثر ها، وقتی قراره مقداری در فرمولی طوری تعیین بشه که کمترین یا بیشترین مقدار خروجی بدست بیاد مشتق بکار میره، چون وقتی مشتق برابر صفر باشه یا تعریف نشده باشه یک نقطه بحرانی ئه.

ممنون استاد علی
یه مثال ریاضی میزدین ، بهتر متوجه میشدم . این جوری متوجه نشدم
اون قضیه ی Blure کردن رو هم که پرسیدم ، جواب میدین؟
 

the_king

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

قرار نیست که هر چیزی رو در این تاپیک متوجه بشید. هیچ ارتباطی با #C نداره. برای اینکه کاربرد مشتق رو متوجه بشید باید درس مشتق گیری و نقاط بحرانی مطرح بشه، می توانید به کتاب درسی ریاضی عمومی 1 رجوع کنید یا با یه جستجو ساده در اینترنت به نتیجه برسید. برای همین میگم سوال تون ربطی به این تاپیک نداره.
اون قضیه ی Blure کردن رو هم که پرسیدم ، جواب میدین؟
روال کلی Blur خیلی مشخص و واضح ئه، میانگیری از مقادیر پیکسل های مجاور. در اون نمونه کد تو متد Blur رو ببینید سه تا سطر تکراری بیشتر نیست که برای R و G و B پیکسل ها اجرا میشه. بررسی اش نه وقت گیره و نه پیچیدگی خاصی داره، روال اش با یک نگاه قابل تشخیص ئه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
قرار نیست که هر چیزی رو در این تاپیک متوجه بشید. هیچ ارتباطی با #C نداره. برای اینکه کاربرد مشتق رو متوجه بشید باید درس مشتق گیری و نقاط بحرانی مطرح بشه، می توانید به کتاب درسی ریاضی عمومی 1 رجوع کنید یا با یه جستجو ساده در اینترنت به نتیجه برسید. برای همین میگم سوال تون ربطی به این تاپیک نداره.

روال کلی Blur خیلی مشخص و واضح ئه، میانگیری از مقادیر پیکسل های مجاور. در اون نمونه کد تو متد Blur رو ببینید سه تا سطر تکراری بیشتر نیست که برای R و G و B پیکسل ها اجرا میشه. بررسی اش نه وقت گیره و نه پیچیدگی خاصی داره، روال اش با یک نگاه قابل تشخیص ئه.

ممنون
نه
درباره ی مشتق و مسائل ریاضی منظورم نبود . منظورم این بود که یه مثال برنامه نویسی ساده که به مشتق در ریاضی مربوط بشه و ببینم اون بیت مپ یا عکس ، چه تغییری میکنه؟ (حالا بماند)
-------------------------
اون کد MoreBlure را دیدم ولی برای من پیچیده هست باید حداقل یک یا چند ساعت براش وقت بذارم (شایدم بیشتر) تا همه ی کدهاشو دونه دونه واکاوی کنم (از متد لود و ...) .
روالی رو که گفتید ، من قشنگ متوجه نشدم . یعنی چی میانگیری از مقادیر پیکسل های مجاور؟ یعنی RGB ی پیکسل مجاور رو باید چی کار کرد؟ بعد اینکه حالا مقدار که پیدا شد ، باید در اون پیکسل ست کرد دیگه؟
قضیه ی HSL چجوری هه؟ یعنی یک پیکسل ، در RGB اش ، چی اش چجوری بره بالا ، H یا S یا L اش بالاتر میره؟
 

the_king

مدیرکل انجمن
اون کد MoreBlure را دیدم ولی برای من پیچیده هست باید حداقل یک یا چند ساعت براش وقت بذارم (شایدم بیشتر) تا همه ی کدهاشو دونه دونه واکاوی کنم (از متد لود و ...) .

ببخشید دیگه، تو زحمت می افتید. من از این بابت که شما برای یاد گرفتن چیزی باید چند ساعت برایش وقت بذارید عذر خواهی می کنم اما این بدیهی ترین کاری است که برای یادگرفتن چیزی باید انجام بشه.
روالی رو که گفتید ، من قشنگ متوجه نشدم . یعنی چی میانگیری از مقادیر پیکسل های مجاور؟ یعنی RGB ی پیکسل مجاور رو باید چی کار کرد؟

بخواهید از چند مقدار میانگین بگیرید چیکار می کنید؟ برای R و G و B چند پیکسل مجاور هم همونکار رو می کنید. چون کد رو نمی بینید متوجه نمیشید، وگرنه میانگین گرفتن فرمول سختی نداره که متوجه نشید. هر پیکسل R و G و B اش مجزا است، برای هر کدوم جداگانه بین چند پیکسل میشه میانگین گرفت. مقدار R چند پیکسل مجاور رو با هم جمع کرد و بر تعدادش تقسیم کرد، این میشه میانگین گرفتن از R
هر چقدر تعداد پیکسل های موثر در میانگیری و ضریب تاثیر شون نسبت به مقدار خود پیکسل مرکزی بیشتر باشه به همون نسبت بیشتر محو میشه، مثل Gaussian Blur
بعد اینکه حالا مقدار که پیدا شد ، باید در اون پیکسل ست کرد دیگه؟

قطعا همینطوره، مقدار پیکسلی رو تغییر ندید که خروجی نسبت به ورودی تغییری نمی کنه.

قضیه ی HSL چجوری هه؟ یعنی یک پیکسل ، در RGB اش ، چی اش چجوری بره بالا ، H یا S یا L اش بالاتر میره؟
متاسفانه با وجود تذکر هایی که میدم تمایلی به رعایت مبحث اصلی تاپیک ندارید، بعدا گلایه نکنید که چرا طبق روال برخورد شد.
کلا HSL فضای رنگ متفاوتی داره با RGB. اینطوری نیست که بگید فلان جزء زیاد باشه H و S زیاد میشه، ممکنه کم بشه، چون H رنگ بر حسب درجه و S شدت غلظت اونه که هیچکدوم رابطه خطی و مستقیم با مقادیر RGB ندارن. اما از اونجایی که L میزان روشنایی ئه طبعا هر چی RGB ها زیادتر بشن بیشتر میشه. Math behind colorspace conversions, RGB-HSL
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون استاد علی
منظورم این بود که شما سودوکد اش (راه و روش کلی اش) رو بگین و خودم فکر کنم و الگوریتم شو بدست بیارم ، خیلی راحت ترم تا اینکه روی پروژه ی نوشته شده فکر کنم و کدهاشو تجزیه و تحلیل کنم . حالا درست میکنم ان شاء ا... . ممنون
-----------------------------------
این بحث دیگه چون چندان ربطی به مبحث ریاضی نداشت ، ادامه شو اینجا میگم
همونطور که گفتین ، با همون تیک زدن مولفه های Visual Studio Extention Development و همه ی کمپوننت های سمت راست اش در ستاپ ویژال استودیو 2017 ، این فایل Microsoft.VisualStudio.Modeling.Sdk.15.0.dll توی لیست اومد
حالا این کلاس هایی که در فضای نام Microsoft.Graphics.Canvas.Effects Namespace :
Microsoft.Graphics.Canvas.Effects Namespace
هستن ، اغلب شون در اسمبلی Microsoft.Graphics.Canvas.dll هستن که این فایل در دسترس ام نیست و همچنین این کلاس های AutoFixAnalyzer و FilterEffect که میگه در اسمبلی Lumia.Imaging.dll هست . یا مثلا کلاس BlendEffect و از این دست کلاس ها و ...
باید باز کدوم مولفه را نصب کنم تا این فایل هایی که در بالا گفتم ، نصب بشن و در دسترس ام قرار بگیرن؟
کلا این مولفه های مهمی که حالا برای کارهای گرافیکی و هر کار دیگه ای کاربردی هه رو میگین؟ که هر بار ، دوباره نصب نکنم؟
میگم این ویژال استودیو (کلا دات نت) عجب کلاس هایی برای گرافیک داره . باهاش میشه یه نرم افزار افترافکت ساخت :green:
ممنون
 
آخرین ویرایش:

the_king

مدیرکل انجمن
ممنون استاد علی
منظورم این بود که شما سودوکد اش (راه و روش کلی اش) رو بگین و خودم فکر کنم و الگوریتم شو بدست بیارم ، خیلی راحت ترم تا اینکه روی پروژه ی نوشته شده فکر کنم و کدهاشو تجزیه و تحلیل کنم . حالا درست میکنم ان شاء ا... . ممنون
-----------------------------------
این بحث دیگه چون چندان ربطی به مبحث ریاضی نداشت ، ادامه شو اینجا میگم
همونطور که گفتین ، با همون تیک زدن مولفه های Visual Studio Extention Development و همه ی کمپوننت های سمت راست اش در ستاپ ویژال استودیو 2017 ، این فایل Microsoft.VisualStudio.Modeling.Sdk.15.0.dll توی لیست اومد
حالا این کلاس هایی که در فضای نام Microsoft.Graphics.Canvas.Effects Namespace :
Microsoft.Graphics.Canvas.Effects Namespace
هستن ، اغلب شون در اسمبلی Microsoft.Graphics.Canvas.dll هستن که این فایل در دسترس ام نیست و همچنین این کلاس های AutoFixAnalyzer و FilterEffect که میگه در اسمبلی Lumia.Imaging.dll هست . یا مثلا کلاس BlendEffect و از این دست کلاس ها و ...
باید باز کدوم مولفه را نصب کنم تا این فایل هایی که در بالا گفتم ، نصب بشن و در دسترس ام قرار بگیرن؟
کلا این مولفه های مهمی که حالا برای کارهای گرافیکی و هر کار دیگه ای کاربردی هه رو میگین؟ که هر بار ، دوباره نصب نکنم؟
میگم این ویژال استودیو (کلا دات نت) عجب کلاس هایی برای گرافیک داره . باهاش میشه یه نرم افزار افترافکت ساخت :green:
ممنون
این چیزهایی که میگید Package های NuGet هستند که ربطی به NET Framework. ندارند و از DirectX هم برای پردازش گرافیکی استفاده می کنند و باید بجای Add Reference با Manage NuGet Packages به پروژه تون اضافه شون کنید. هیچکدوم رو به عنوان قابلیت های اختصاصی ویژوال استدیو یا NET. در نظر نگیرید. اینها بیشترشون Wrapper ای هستند برای کتابخانه های اساسی تری که پایه شون ++C/C ئه Native بوده. اگه مایکروسافت DirectX رو با زبان های NET. کد نویسی کرده بود کارایی شون در حد فاجعه میشد. اینها پوسته های زیبا و جمع جوری هستند که وابسته به کد های خیلی پیچیده و بهینه شده کتابخانه های خارج از محیط NET. هستند.

کلاس هایی که بهم ربط پیدا می کنه تصاعدی زیاد میشه، مثل شاخه های درخت. هر چقدر به تعداد کلاس های بیشتری رفرنس بدید نه تنها وابستگی کم نمیشه بلکه مجبور میشید سایر کتابخانه ها رو هم اضافه کنید. فقط اگر یکبار سعی کنید کد همچین کلاس هایی رو با ابزار های مربوطه بردارید در پروژه تون Copy Paste کنید می بینید که هر کلاسی که برای استفاده شخصی اضافه می کنید، خطا میده که چند تا کلاس و ساختار دیگه تعریف نشده. هر چقدر کلاس ها رو بیشتر اضافه می کنید، بجای اینکه تعداد خطا ها کم بشه بدتر میشه و خطا ها زیادتر میشه. این ماهیت کتابخانه ها است. در نظر بگیرید که مایکروسافت این کتابخانه ها رو مستقل طراحی نکرده، همه شون برای استفاده از قابلیت های سایر کتابخانه ها کد دارند. برای همین یکدفعه می بینید برای یک استفاده کوچیک باید چند تا کتابخانه رو به پروژه اضافه کنید که 99 درصدش رو اصلا لازم ندارید.
یک مورد ساده به عنوان تجربه شخصی بگم، مثلا از ویندوز 7 به بعد می توانید یک Progressbar روی آیکون برنامه در Task bar داشته باشید که کاربر بدون اینکه نیاز به باز کردن فرم برنامه داشته باشه متوجه بشه چقدر روال پیشرفت کرده. اگه بخواهید برای استفاده از این قابلیت با API کار نکنید و مجموعه Windows API Code Pack رو برای NET. دانلود کنید، مجبور می شوید حداقل NET Framework 3.5 رو بکار بگیرید. چطور که برای استفاده از اون Microsoft.VisualStudio.Modeling.Sdk مجبورتون می کنه که فرضا از NET Framework 4.5 استفاده کنید. اگه سعی کنید فقط یک بخشی از اون کتابخانه ها که فقط لازم دارید رو پیاده سازی کنید خیلی از کد ها رو باید حذف کنید وگرنه تعداد خطا ها خیلی زیاد میشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
این چیزهایی که میگید Package های NuGet هستند که ربطی به NET Framework. ندارند و از DirectX هم برای پردازش گرافیکی استفاده می کنند و باید بجای Add Reference با Manage NuGet Packages به پروژه تون اضافه شون کنید. هیچکدوم رو به عنوان قابلیت های اختصاصی ویژوال استدیو یا NET. در نظر نگیرید. اینها بیشترشون Wrapper ای هستند برای کتابخانه های اساسی تری که پایه شون ++C/C ئه Native بوده. اگه مایکروسافت DirectX رو با زبان های NET. کد نویسی کرده بود کارایی شون در حد فاجعه میشد. اینها پوسته های زیبا و جمع جوری هستند که وابسته به کد های خیلی پیچیده و بهینه شده کتابخانه های خارج از محیط NET. هستند.

کلاس هایی که بهم ربط پیدا می کنه تصاعدی زیاد میشه، مثل شاخه های درخت. هر چقدر به تعداد کلاس های بیشتری رفرنس بدید نه تنها وابستگی کم نمیشه بلکه مجبور میشید سایر کتابخانه ها رو هم اضافه کنید. فقط اگر یکبار سعی کنید کد همچین کلاس هایی رو با ابزار های مربوطه بردارید در پروژه تون Copy Paste کنید می بینید که هر کلاسی که برای استفاده شخصی اضافه می کنید، خطا میده که چند تا کلاس و ساختار دیگه تعریف نشده. هر چقدر کلاس ها رو بیشتر اضافه می کنید، بجای اینکه تعداد خطا ها کم بشه بدتر میشه و خطا ها زیادتر میشه. این ماهیت کتابخانه ها است. در نظر بگیرید که مایکروسافت این کتابخانه ها رو مستقل طراحی نکرده، همه شون برای استفاده از قابلیت های سایر کتابخانه ها کد دارند. برای همین یکدفعه می بینید برای یک استفاده کوچیک باید چند تا کتابخانه رو به پروژه اضافه کنید که 99 درصدش رو اصلا لازم ندارید.
یک مورد ساده به عنوان تجربه شخصی بگم، مثلا از ویندوز 7 به بعد می توانید یک Progressbar روی آیکون برنامه در Task bar داشته باشید که کاربر بدون اینکه نیاز به باز کردن فرم برنامه داشته باشه متوجه بشه چقدر روال پیشرفت کرده. اگه بخواهید برای استفاده از این قابلیت با API کار نکنید و مجموعه Windows API Code Pack رو برای NET. دانلود کنید، مجبور می شوید حداقل NET Framework 3.5 رو بکار بگیرید. چطور که برای استفاده از اون Microsoft.VisualStudio.Modeling.Sdk مجبورتون می کنه که فرضا از NET Framework 4.5 استفاده کنید. اگه سعی کنید فقط یک بخشی از اون کتابخانه ها که فقط لازم دارید رو پیاده سازی کنید خیلی از کد ها رو باید حذف کنید وگرنه تعداد خطا ها خیلی زیاد میشه.

آها ممنون
اول اینکه من آخر wrapper را نفهمیدم چیه . وقتی کدهای غیر دات نت (native) را با کدهای دات نت (حالا تحت فایل dll و ...) باهاش ارتباط برقرار میکنن تا کاربر توسط این فایل ، راحت تر بتونه با فایل های native ، اونم بصورت غیر مستقیم (با فراخونی همین فایل دات نت که حاوی کدهایی هست که با کدهای native ارتباط برقرار کردن) ، ارتباط برقرار کنه رو wrapper میگن؟ درسته؟ مثلا مثل همون فایل کمپوننت AutoIt که برای دات نت طراحی شده بود و ...؟

مایکروسافت ، خودش این wrapper رو نوشت؟
و اینکه حالا به هر حال ، فایل Microsoft.Graphics.Canvas.dll (حالا چه wrapper باشه یا نه) رو برای استفاده کجا میشه گیر آورد و یا اینکه چجوری میشه نصب کرد؟
 

the_king

مدیرکل انجمن
آها ممنون
اول اینکه من آخر wrapper را نفهمیدم چیه . وقتی کدهای غیر دات نت (native) را با کدهای دات نت (حالا تحت فایل dll و ...) باهاش ارتباط برقرار میکنن تا کاربر توسط این فایل ، راحت تر بتونه با فایل های native ، اونم بصورت غیر مستقیم (با فراخونی همین فایل دات نت که حاوی کدهایی هست که با کدهای native ارتباط برقرار کردن) ، ارتباط برقرار کنه رو wrapper میگن؟ درسته؟ مثلا مثل همون فایل کمپوننت AutoIt که برای دات نت طراحی شده بود و ...؟


و اینکه حالا به هر حال ، فایل Microsoft.Graphics.Canvas.dll (حالا چه wrapper باشه یا نه) رو برای استفاده کجا میشه گیر آورد و یا اینکه چجوری میشه نصب کرد؟
Wrapper انگلیسی همون پوسته، لفاف و جلد ئه. یک کتابخانه ای هست که پروتکل ارتباطی اش ساده و هماهنگ نیست، در نتیجه راحت نمیتوانید ازش استفاده کنید. برای همین میان براش یه Wrapper طراحی می کنند که خودش چیز جدیدی اضافه نمی کنه و وابسته به اون کتابخانه هم هست و مستقل کاری انجام نمیده، ولی چون برای محیط خاصی طراحی شده کتابخانه رو سازگارش می کنه برای استفاده در اون یک محیط، مثل محیط NET.
مثل همونی که COM و ActiveX رو برای استفاده و رفرنس دادن در NET. مناسب می کنه. یا اون کمپوننت ها که فرضا کتابخانه unrar.dll ئه WinRar رو برای استفاده ساده در NET. مناسب می کنند.
مایکروسافت ، خودش این wrapper رو نوشت؟
کدوم شون؟ بله، کلا محصولات مایکروسافت رو خودش براشون Wrapper می نویسه.
و اینکه حالا به هر حال ، فایل Microsoft.Graphics.Canvas.dll (حالا چه wrapper باشه یا نه) رو برای استفاده کجا میشه گیر آورد و یا اینکه چجوری میشه نصب کرد؟
برید سراغ پکیج های NuGet ، با کنسول NuGet که بخواهید دانلودش کنید فرمانش اینجا است :
Win2D
توضیحاتش اینجا است:
Introduction
سورس کد اش هم اینجا است :
Win2D
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون
استاد علی ، میگم Net Core. با Net Framwork. چه فرقی دارن؟
و اینکه در این مقاله :
معرفی CUDA
گفت با زبان C میتونیم از cuda استفاده کنیم (تا از بار پردازنده ی cpu کم بشه) . این کار توی سی شارپ ، امکان پذیره؟ اگه آره ، چجوری هه (روند کلی اش)؟
و اصلا کلا گرافیک رو برای چه نوع محاسباتی ازش استفاده میکنن؟
بعد اینکه قابلیت تست مداوم (continuous testing) در نسخه 2017 چیه؟ و کار باهاش چجوری هه؟ مقاله ی زیر توضیح داد ولی من خوب متوجه نشدم :
تست مداوم (continuous testing) درNET.
 
آخرین ویرایش:

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد علی ، میشه توی سی شارپ ، یک آهنگ ای که داریم (مثلا mp3 که حالا مثلا با کمپوننت wmp باهاش کار میکنیم) ، تُن صدا را بصورت عدد دریافت کنیم؟ مثلا هر جا صدای mp3 کم شد (منظورم volume نیست . منظورم جاهایی که صدا یا خواننده توی mp3 آروم تر صحبت میکنه) ، اون عدد کم شه و هر جا تن صداش بلند تر شد ، اون عدد زیادتر شه؟
و مثلا هر 0.2 ثانیه اون عدد (مثلا به عنوان آرایه ای از اعداد) در کل mp3 آپدیت شه تا بشه مقایسه کرد که روند کم و زیادش چجوری هست
افترافکت یه قابلیتی برای فایل های صوتی اش داره که اگه کلیک راست کنیم ، گزینه ی keyframe assistance > convert audio to keyframe داره که همین کار را میکنه
توی سی شارپ میشه؟
 

the_king

مدیرکل انجمن
ممنون
استاد علی ، میگم Net Core. با Net Framwork. چه فرقی دارن؟

وقتی مایکروسافت NET. Framework رو طراحی می کرد بخش عمده ای از توجهش روی API ویندوز و پلتفرم ویندوز بود، و کاملا هم کد سورسش رو ارائه نکرد. برای همین انتقالش روی سایر پلتفرم ها مثل لینوکس که روی کد منبع باز تاکید داره، خیلی موفقیت آمیز نبود و در نتیجه خیلی ازش استقبال نشد. ظاهرا با NET Core. که هم کدش کاملا بازه و وابستگی به ویندوز و API اش نداره میخواد روی لینوکس و مک و ...NET. رو رواج بده. یک بخشی از ساختارشون شبیه هم هست ولی اساسا جدا و مستقل طراحی شده اند.
و اینکه در این مقاله :
معرفی CUDA
گفت با زبان C میتونیم از cuda استفاده کنیم (تا از بار پردازنده ی cpu کم بشه) . این کار توی سی شارپ ، امکان پذیره؟ اگه آره ، چجوری هه (روند کلی اش)؟

هر چیزی که مربوط به سخت افزار ئه یا باید برنامه نویسی اش در لایه سیستمی باشه و یا با واسطه درایوری انجام بشه. از اونجایی که برنامه های شما هیچکدوم در لایه سیستمی اجرا نمیشه و برنامه کاربری ئه کلا مستقیم نمی توانید با سخت افزاری در ارتباط باشید، فرقی نمی کنه که سخت افزار پرینتر ئه یا پردازنده CUDA. اصل قضیه ارتباط با یک سخت افزار ئه که منحصرا جزو منابع سیستم عامل ئه. اگر چیزی هم در #C قابل اجرا باشه با کمک یک کتابخانه است و کمپوننت است و لاغیر.
و اصلا کلا گرافیک رو برای چه نوع محاسباتی ازش استفاده میکنن؟
هیچ چیز خاصی، پردازنده همه منظوره است، مثل اینه که بپرسید با پردازنده داخل گوشی تلگرام رو اجرا می کنند یا واتساپ یا زاپیا. اصلا CUDA برای همینه که بتوانید برای انواع پردازش ها از پردازنده کارت گرافیکی استفاده کنید نه یک موارد خاص.

بعد اینکه قابلیت تست مداوم (continuous testing) در نسخه 2017 چیه؟ و کار باهاش چجوری هه؟ مقاله ی زیر توضیح داد ولی من خوب متوجه نشدم :
تست مداوم (continuous testing) درNET.
مربوط به مهندسی نرم افزار ئه، باید درس مهندسی نرم افزار رو خونده باشید و با جریان کاری تولید نرم افزار آشنا باشید تا متوجهش بشید. تو ایران که عملا معنی نداره اما اگه تولید محصول نرم افزاری بر اساس اصول مهندسی نرم افزار باشه این Continuous Testing کمک می کنه که زمان کمتری تلف بشه و سرعت چرخه افزایش پیدا کنه و در ضمن تا حد امکان چرخه تولید رو از داخل خود ویژوال استدیو تعقیب کنید و کمتر به ابزار های خارج محیط ویژوال استدیو نیاز پیدا کنید.
 

the_king

مدیرکل انجمن
سلامی مجدد
استاد علی ، میشه توی سی شارپ ، یک آهنگ ای که داریم (مثلا mp3 که حالا مثلا با کمپوننت wmp باهاش کار میکنیم) ، تُن صدا را بصورت عدد دریافت کنیم؟ مثلا هر جا صدای mp3 کم شد (منظورم volume نیست . منظورم جاهایی که صدا یا خواننده توی mp3 آروم تر صحبت میکنه) ، اون عدد کم شه و هر جا تن صداش بلند تر شد ، اون عدد زیادتر شه؟
و مثلا هر 0.2 ثانیه اون عدد (مثلا به عنوان آرایه ای از اعداد) در کل mp3 آپدیت شه تا بشه مقایسه کرد که روند کم و زیادش چجوری هست
افترافکت یه قابلیتی برای فایل های صوتی اش داره که اگه کلیک راست کنیم ، گزینه ی keyframe assistance > convert audio to keyframe داره که همین کار را میکنه
توی سی شارپ میشه؟
خروجی کارت صوتی رو نمیدونم با چه کمپوننت ای باید بگیرید، ندیدم همچین موردی، اما میدونم همون کتابخانه Un4seen BASS ای که در MMB هم استفاده داره، قبل از اینکه داده رو به خروجی صوتی بفرسته میتوانید داده اش رو دریافت کنید و حتی تغییر بدید، یعنی همزمان با پخش صوت اسپکتروم و افکت صوتی و ... داشته باشید. خودش همچین قابلیتی رو ذاتی داره و فوق العاده کتابخانه مجهز و خوبیه اما بعید میدونم بتوانید راحت باهاش کار کنید، حوصله میخواد که ندارید. Windows Media Player رو میدونم که همچین چیزی رو نداره. اگه باشه با کمک یک پلاگینه که تا حالا مشابهش رو هم ندیدم. NAudio هم این قابلیت رو ظاهرا داره چون دمو اش همچین چیزی رو نشون میده. اما یک مورد دیگه هم هست، اگر بخواهید با صوت غیر فشرده PCM که فایل های WAV ئه کار کنید که برای شروع کار هم خیلی جالب ئه، همون بایت های داخل فایل WAV رو بخوانید کافیه، چون دقیقا همون موج صوتی رو بصورت نقطه به نقطه ذخیره کرده که رسم شون کنید منحنی صوتی میشه که پخش می کنید. MP3 رو نمیتوانید مستقیم تحلیل کنید چون داده اش فشرده است ولی WAV ئه PCM دقیقا همون چیزیه که فرستاده میشه به خروجی صوتی و جون میده برای امتحان کردن فرمول هایی که افکت صوتی ایجاد می کنه. در ضمن برای پخش WAV احتیاجی به WMP ندارید، System.Media.SoundPlayer هست که میتونه بدون فایل از حافظه هم داده رو پخش کنه، اما دیگه قابلیت جلو و عقب کردن نداره.
naudio
BASS
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
هر چیزی که مربوط به سخت افزار ئه یا باید برنامه نویسی اش در لایه سیستمی باشه و یا با واسطه درایوری انجام بشه. از اونجایی که برنامه های شما هیچکدوم در لایه سیستمی اجرا نمیشه و برنامه کاربری ئه کلا مستقیم نمی توانید با سخت افزاری در ارتباط باشید، فرقی نمی کنه که سخت افزار پرینتر ئه یا پردازنده CUDA. اصل قضیه ارتباط با یک سخت افزار ئه که منحصرا جزو منابع سیستم عامل ئه. اگر چیزی هم در #C قابل اجرا باشه با کمک یک کتابخانه است و کمپوننت است و لاغیر.

هیچ چیز خاصی، پردازنده همه منظوره است، مثل اینه که بپرسید با پردازنده داخل گوشی تلگرام رو اجرا می کنند یا واتساپ یا زاپیا. اصلا CUDA برای همینه که بتوانید برای انواع پردازش ها از پردازنده کارت گرافیکی استفاده کنید نه یک موارد خاص.

ممنون استاد علی
الان کتابخونه ای هست که در دات نت (یا غیر دات نت) بتونه پردازش را بر دوش هسته های CUDA در کارت گرافیک بندازه؟ مخصوصا موقع کار با توابع گرافیکی و کلاس Graphics
اگه آره ، چیه؟
مگه پردازنده ی گرافیکی ، برای کارهای گرافیکی و رسم ها فقط استفاده نمیشه؟ یعنی پردازنده ی گرافیکی ، میتونه کار پردازنده ی cpu رو کنه؟ اگه آره ، پس چرا نمیشه پردازنده ی گرافیکی ، بدون cpu در یه سیستمی داشت؟ و دوما چرا خیلی از نرم افزارها ، از cuda برای سرعت بیشترشون استفاده نمیکنن؟ مثلا افترافکت ، فقط موتور ray trace اش با یکی دو تا افکت اش از cuda استفاده میکنه . خیلی از نرم افزارها اصلا این قابلیت استفاده رو هم ندارن


خروجی کارت صوتی رو نمیدونم با چه کمپوننت ای باید بگیرید، ندیدم همچین موردی، اما میدونم همون کتابخانه Un4seen BASS ای که در MMB هم استفاده داره، قبل از اینکه داده رو به خروجی صوتی بفرسته میتوانید داده اش رو دریافت کنید و حتی تغییر بدید، یعنی همزمان با پخش صوت اسپکتروم و افکت صوتی و ... داشته باشید. خودش همچین قابلیتی رو ذاتی داره و فوق العاده کتابخانه مجهز و خوبیه اما بعید میدونم بتوانید راحت باهاش کار کنید، حوصله میخواد که ندارید. Windows Media Player رو میدونم که همچین چیزی رو نداره. اگه باشه با کمک یک پلاگینه که تا حالا مشابهش رو هم ندیدم. NAudio هم این قابلیت رو ظاهرا داره چون دمو اش همچین چیزی رو نشون میده. اما یک مورد دیگه هم هست، اگر بخواهید با صوت غیر فشرده PCM که فایل های WAV ئه کار کنید که برای شروع کار هم خیلی جالب ئه، همون بایت های داخل فایل WAV رو بخوانید کافیه، چون دقیقا همون موج صوتی رو بصورت نقطه به نقطه ذخیره کرده که رسم شون کنید منحنی صوتی میشه که پخش می کنید. MP3 رو نمیتوانید مستقیم تحلیل کنید چون داده اش فشرده است ولی WAV ئه PCM دقیقا همون چیزیه که فرستاده میشه به خروجی صوتی و جون میده برای امتحان کردن فرمول هایی که افکت صوتی ایجاد می کنه. در ضمن برای پخش WAV احتیاجی به WMP ندارید، System.Media.SoundPlayer هست که میتونه بدون فایل از حافظه هم داده رو پخش کنه، اما دیگه قابلیت جلو و عقب کردن نداره.
naudio
BASS

ممنون استاد علی
منظورتون در قضیه ی فایل WAV و کلاس System.Media.SoundPlayer ، استفاده از عضو Stream در این کلاس هست؟
من کلا با کار کرد Stream ها آشنا نیستم . در واقع تا حالا فایل صوتی را نخوندم (توسط Stream) و فایل های دیگه ای را هم که خوندم (توسط Stream) ، نمیدونم اصلا اطلاعات واقعی شو چجوری میشه استخراج کرد . مثلا فایل های ویدئویی را خوندم . خوب؟ ولی اصلا اطلاعات (رشته ی) درهم میده و تجزیه و تحلیل اش را بلد نیستم . منظورم اینه که مثلا در فایل ویدئویی ، اطلاعات اش زمانی به درد آدم میخوره که بشه فهمید مثلا اولا فریم 1000 اش از کجا (کدوم خط) تا کجاست و دوما در فریم 1000 اش چه تصویری ذخیره شده (چون میدونیم که فیلم ، مجموعه ای از عکس ها و بیت مپ هاست) و توی اون بیت مپ (فریم 1000) هم مثلا در نقطه ی فلان ، چه رنگی وجود داره ؟ حالا فایل صوتی فیلم را که کلا روند فایل صوتی رو نمیدونم چجوری ذخیره میشه و چجوری هست
 
آخرین ویرایش:

the_king

مدیرکل انجمن
ممنون استاد علی
الان کتابخونه ای هست که در دات نت (یا غیر دات نت) بتونه پردازش را بر دوش هسته های CUDA در کارت گرافیک بندازه؟ مخصوصا موقع کار با توابع گرافیکی و کلاس Graphics
اگه آره ، چیه؟
کجا هست؟ تو کامپیوتر من؟ نه نیست، مورد اول رو که باید تو گوگل جستجو کنید، فکر نمی کنم اینکه من همچین کتابخانه ای ندارم دلیل باشه که نباشه. سوال دومتون هم کلا نامربوطه به کارکردش، کارکردش اینطوری نیست که وسط روتین های گرافیکی تون نقشی داشته باشه. پردازنده اش پردازنده یک کارت گرافیکی ئه، نه اینکه خودش موتور گرافیکی باشه، خودش فقط یک پردازنده است.
مگه پردازنده ی گرافیکی ، برای کارهای گرافیکی و رسم ها فقط استفاده نمیشه؟ یعنی پردازنده ی گرافیکی ، میتونه کار پردازنده ی cpu رو کنه؟
نه، پردازنده گرافیکی عملا به این شکل وجود نداره. پردازنده ای که قراره رسم دو بعدی و سه بعدی انجام بده به تمامی اون قابلیت های محاسباتی پردازنده های همه منظوره احتیاج داره، اگه محاسبات جمع و تفریق و ضرب و تقسیم و توان و لگاریتم و سینوس و کسینوس و ... رو نداشته باشه که نمیتونه کارشو انجام بده، برای همین نهایتش یک پردازنده است مثال سایر پردازنده های همه منظوره.
اگه آره ، پس چرا نمیشه پردازنده ی گرافیکی ، بدون cpu در یه سیستمی داشت؟
داشتن با استفاده کردن فرق می کنه، اون BIOS داخل مادربورد و اون ویندوز روی هارد دیسک به زبان ماشین پردازنده اصلی طراحی و کد نویسی شده اند، نه زبان ماشین پردازنده کارت گرافیکی. بماند که مادربورد هم ارتباط بین کارت گرافیکی رو به اون شکل فراهم نمی کنه که باهاش سیستمی بوت بشه.
و دوما چرا خیلی از نرم افزارها ، از cuda برای سرعت بیشترشون استفاده نمیکنن؟ مثلا افترافکت ، فقط موتور ray trace اش با یکی دو تا افکت اش از cuda استفاده میکنه . خیلی از نرم افزارها اصلا این قابلیت استفاده رو هم ندارن
اولا همه سیستم ها که امکانات سخت افزاری CUDA رو ندارند که از اون هزینه و زمانی که صرف طراحی اش شده استفاده کنند، ثانیا همه نرم افزار ها که با CUDA یا هر سیستم مشابه دیگری نمی توانند سریعتر بشوند، ثالثا بازنویسی برای استفاده از همچین قابلیت هایی همچین راحت و کم هزینه نیست که هر شرکتی روش سرمایه گذاری کنه.
ممنون استاد علی
منظورتون در قضیه ی فایل WAV و کلاس System.Media.SoundPlayer ، استفاده از عضو Stream در این کلاس هست؟
لازم نیست حتما Stream باشه، ولی به هر حال Stream زمانی که حجم فایل زیاده خیلی مناسبتر از فراخوانی کاملش در یک حافظه آرایه بایتی ئه چون Stream به تدریج که پخش میشه بخش لازمش رو در حافظه فراخوانی می کنه و لازم نیست به اندازه حجم کل فایل حافظه تخصیص بده.
من کلا با کار کرد Stream ها آشنا نیستم . در واقع تا حالا فایل صوتی را نخوندم (توسط Stream) و فایل های دیگه ای را هم که خوندم (توسط Stream) ، نمیدونم اصلا اطلاعات واقعی شو چجوری میشه استخراج کرد . مثلا فایل های ویدئویی را خوندم . خوب؟ ولی اصلا اطلاعات (رشته ی) درهم میده و تجزیه و تحلیل اش را بلد نیستم . منظورم اینه که مثلا در فایل ویدئویی ، اطلاعات اش زمانی به درد آدم میخوره که بشه فهمید مثلا اولا فریم 1000 اش از کجا (کدوم خط) تا کجاست و دوما در فریم 1000 اش چه تصویری ذخیره شده (چون میدونیم که فیلم ، مجموعه ای از عکس ها و بیت مپ هاست) و توی اون بیت مپ (فریم 1000) هم مثلا در نقطه ی فلان ، چه رنگی وجود داره ؟ حالا فایل صوتی فیلم را که کلا روند فایل صوتی رو نمیدونم چجوری ذخیره میشه و چجوری هست
چرا همه چی رو با هم قاطی می کنید، من در مورد فایل WAV توضیح میدم بعد میگید فایل ویدئویی؟ صحبت ویدئو بود؟ شما که توقع ندارید که فایل ویدئویی فشرده روی فایل رو خط به خط متنی بخونید و تجزیه و تحلیل کنید. معلومه که نمیشه. پخش فایل ویدئویی Splitter داره، Decoder داره، اینها رو که نمیشه مستقیم دور زد و از فایل اطلاعات قابل پخش درآورد.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون استاد علی
در لینک زیر :

C# How to get Audio Decibel values with time span

طرف در پست دوم گفته با همین NAudio ای که گفتین ، چجوری دسیبل را حساب کنیم . در واقع دسیبل همون چیزی هست که ما میخوایم؟
اما من متوجه نشدم .
شاید چون در بحث درک مفهوم sample rate و sample depth مشکل دارم (این دو رو هم در لینک زیر خوندم . هر چند یه چیزهای خیلی جزئی مفهمیدم ولی اغلبش رو متوجه نشدم) :
Sampling (signal processing) - Wikipedia

این 3 خط اش هم زیاد متوجه نشدم :

کد:
short sample16Bit = BitConverter.ToShort(buffer,index);
double volume = Math.Abs(sample16Bit / 32768.0);
double decibels = 20 * Math.Log10(volume);
sample16Bit را چرا بر حداکثر مقداری که توی 16 بیت خونه جا میشه (یعنی عدد 32768) تقسیم میکنه؟ در خط سوم هم چرا لگاریتم شو میگیره؟ من کاربرد لگاریتم را نمیدونم
 

the_king

مدیرکل انجمن
ممنون استاد علی
در لینک زیر :

C# How to get Audio Decibel values with time span

طرف در پست دوم گفته با همین NAudio ای که گفتین ، چجوری دسیبل را حساب کنیم . در واقع دسیبل همون چیزی هست که ما میخوایم؟
هم بله و هم نه، نحوه مواجهه باهاش رو هم در نظر بگیرید، گوش در فرکانس های مختلف حساسیت های متفاوتی داره، مثل اینه که شما رقص نور اسپکتروم 10 باندی که هی ستون های عمودی بلند و کوتاه میشه رو بخواهید خلاصه کنید در یک باند، چون فرکانس تو اون تک باندی نقشی نداره، خیلی به بلندی و کوتاهی چیزی که میشنوید مربوط نیست، با موزیک هماهنگه اما ربطی به گوش نداره، چون حساسیت فیزیکی گوش تون رو لحاظ نکردید.
اما من متوجه نشدم .
شاید چون در بحث درک مفهوم sample rate و sample depth مشکل دارم (این دو رو هم در لینک زیر خوندم . هر چند یه چیزهای خیلی جزئی مفهمیدم ولی اغلبش رو متوجه نشدم) :
Sampling (signal processing) - Wikipedia

این 3 خط اش هم زیاد متوجه نشدم :

کد:
short sample16Bit = BitConverter.ToShort(buffer,index);
double volume = Math.Abs(sample16Bit / 32768.0);
double decibels = 20 * Math.Log10(volume);
sample16Bit را چرا بر حداکثر مقداری که توی 16 بیت خونه جا میشه (یعنی عدد 32768) تقسیم میکنه؟ در خط سوم هم چرا لگاریتم شو میگیره؟ من کاربرد لگاریتم را نمیدونم
sample rate میگه من چند وقت به چند وقت از منحنی صوت نمونه برداری می کنم، sample depth میگه من نمونه ها رو با چه دقتی ثبت می کنم.
فرض کنید مقدار داخل buffer ئه 1000 باشه، 1000 چی؟ کیلوگرم؟ لیتر؟ آمپر؟ واحدش چیه؟ واحد خاصی نداره، نمونه برداری از منحنی صوت بوده، چون فضای داده نمونه برداری اش 16 بیتی ئه، حداکثر 32768 جا میشه. اعداد هم علامت داره، منفی و مثبت داره. اونکه تقسیم بر 32768 میشه برای اینه که دامنه اش 1.0+ الی 1.0- باشه که قابل فهم تره، شما بخواهید دامنه اش چیز دیگری مثل 100.0 الی 100.0- باشه از ضریب دیگه ای استفاده می کنید، اما کارت صوتی اصولا مبنای ورودی اش یا همون 16bit و 24bit باینری integer ئه که بر چیزی تقسیم نمیشه، یا float ای که بخاطرش نمونه 16 بیتی رو تقسیم بر 32768 کرده. جور دیگه ای مرسوم نیست. اگر بخواهید از فیلتر و sin و cos اینا استفاده کنید قطعا خودتون هم میایید اون تقسیم بر 32768 رو انجام میدهید که اعشاری 1.0+ الی 1.0- بشه چون 1000 مقداری با واحد مشخصی نیست که بر اساسش محاسبات خروجی قابل فهمی داشته باشه.
ولوم رو هم قدر مطلق گرفته چون ولوم منفی معنی نداره. بحث لگاریتم رو هم عرض کردم، حساسیت گوش انسان خطی نیست، یعنی حساسیت تون روی 6kHZ مثل 3kHZ یا 12kHZ نیست یا شدت 20dB رو دو برابر 10dB یا نصف 40dB حس نمی کنید. وقتی میخواهید ولوم رو کم و زیاد کنید عملا لگاریتمی کم و زیاد میشه نه خطی، چون اگه خطی کم و زیاد میشد احساس میکردید که پیچ ولوم خرابه و یجا زیادی حساسه یجا اصلا حساس نیست. و مهمتر اینه، نمونه ای که دریافت می کنید ممکنه هر مقداری باشه ولی چیزی نشنوید، چیزی که باعث میشه بشنوید به فرکانس ربط داره، یک خط ممتد که فرکانش حداکثر ئه برای گوش شما قابل شنیدن نیست، هر مقداری که میخواد باشه. مثل دست زدن، دو تا دست تون رو آروم و تدریجی بهم بزنید صدایی میشنوید؟ حرکتش شبیه دست زدنه، دست تون هم مسافت زیادی رو طی می کنه، ولی صدایی نداره، نه اینکه صدا نداره، گوش تون هر فرکانسی رو نمیشنوه. منحنی صوت هم همینطوره، اینکه منحنی بالا یا پایین بره کافی نیست، باید فرکانس بالا و پایین رفتن باید در محدوده ای باشه که گوش بشنوه، اینکه جایی بمونه و تکون نخوره صدایی تولید نمی کنه چون فرکانس میخواد. باید هی بره بالا و هی بیاد پایین.
اینکه شما یک لحظه از من عکس بگیرید و دستم در حالت دست زدن باشه دلیل بر این نیست که دست زدنم صدا داره، یا صداش بلند ئه، شما یک لحظه رو ملاک گرفتید. ممکنه من دستم همونجور ثابت باشه و اصلا تکونش ندم.
حالا اینها چه ربطی به این تاپیک داره قضاوت با خودتون.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
ممنون استاد علی
میگم من فایل C:\Windows\system32\wmp.dll را اضافه کردم (از toolbox و با کلیک کردن ، شی اکتیو ایکس نساختم و wrapper درست نکردم)
و طبق کد در لینک زیر :

Creating the Windows Media Player Control Programmatically (Windows)

بصورت کد نویسی از wmp شی ساختم و استفاده کردم . یعنی کدم اینه :


کد:
            WMPLib.WindowsMediaPlayer windowsMediaPlayer = new WMPLib.WindowsMediaPlayer();
            windowsMediaPlayer.URL = @"E:\Mp3\Mp3\CD 1\Hamed Zamani\1\Khabari Hast (128).mp3";
            windowsMediaPlayer.controls.play();

حالا سئوالم اینه که اون WMPLib.WindowsMediaPlayer که یک اینترفیس هه . از اینترفیس که نمیشه شی ساخت . پس اینجا چجوری هه که کمپایلر مشکل نمیگیره؟!!
قبلا هم منظورم همین روش و بصورت کدنویسی ایجاد شی از wmp بود
 

the_king

مدیرکل انجمن
سلام
ممنون استاد علی
میگم من فایل C:\Windows\system32\wmp.dll را اضافه کردم (از toolbox و با کلیک کردن ، شی اکتیو ایکس نساختم و wrapper درست نکردم)
و طبق کد در لینک زیر :

Creating the Windows Media Player Control Programmatically (Windows)

بصورت کد نویسی از wmp شی ساختم و استفاده کردم . یعنی کدم اینه :


کد:
            WMPLib.WindowsMediaPlayer windowsMediaPlayer = new WMPLib.WindowsMediaPlayer();
            windowsMediaPlayer.URL = @"E:\Mp3\Mp3\CD 1\Hamed Zamani\1\Khabari Hast (128).mp3";
            windowsMediaPlayer.controls.play();

حالا سئوالم اینه که اون WMPLib.WindowsMediaPlayer که یک اینترفیس هه . از اینترفیس که نمیشه شی ساخت . پس اینجا چجوری هه که کمپایلر مشکل نمیگیره؟!!
قبلا هم منظورم همین روش و بصورت کدنویسی ایجاد شی از wmp بود
شما تصور می کنید که به C:\Windows\system32\wmp.dll رفرنس دادید، در Solution Explorer پروژه تان References > WMPLib رو ببینید و در Properties اش Path رو بررسی کنید. شما به Interop.WMPLib.dll رفرنس دادید.
اون کدی که شما میسازید با COM در ارتباط مستقیم نیست، Interop.WMPLib میان کد شما و wmp.dll قرار گرفته و واسطه شده و نقش WindowsMediaPlayer بیشتر از تعریف صرفا یک اینترفیس ئه. اولا کلاسی که ازش شی ساخته میشه با صفت CoClass مشخص شده، یعنی اینطوری نیست که کامپایلر ندونه با new میخواد از چه کلاسی شیء بسازه. و ثانیا میدونه که برای ساختن یک شی باید کجا رو بگرده یا بصورت فنی چه متد سازنده ای رو Invoke کنه. هر کتابخانه COM ای کد GUID منحصربفرد خودشو داره که در Registry ویندوز هم ثبت شده. برای همین زمانی که دارید از WMPLib.WindowsMediaPlayer شی میسازید از اینترفیس ئه شیء نمیسازید، دارید از کلاس WindowsMediaPlayerClass یک شی COM که کد GUID اش در Registry ویندوز ثبت شده میسازید :
کد:
    [CoClass(typeof(WindowsMediaPlayerClass))]
    [Guid("6C497D62-8919-413C-82DB-E935FB3EC584")]
    public interface WindowsMediaPlayer : IWMPPlayer4, _WMPOCXEvents_Event
    {
    }
تفاوت میان یک اینترفیس عادی و این مثال در اون دو صفت CoClass و Guid ئه که در عملکرد ویژوال استدیو و رفتار کد تاثیر داره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
ممنون استاد علی
ثبت کمپوننت (activex) در رجیستری مجازی و قضیه ی تابع BoxedAppSDK_RegisterCOMLibraryInVirtualRegistry چیه؟
و اینکه کلا کلاسی توی دات نت برای کار با کمپوننت ها وجود داره؟ مثلا اینکه با استفاده از اون کلاس بفهمیم که activex ای ثبت هست یا نه یا لیست activex های ثبت شده را بهمون برگردونه و ... ؟
 

the_king

مدیرکل انجمن
سلام
ممنون استاد علی
ثبت کمپوننت (activex) در رجیستری مجازی و قضیه ی تابع BoxedAppSDK_RegisterCOMLibraryInVirtualRegistry چیه؟

یک مورد عمومی نیست، هر کتابخانه ای مشخصات خودش رو داره. یک SDK ای برای کار با سیستم مجازی طراحی شده که واسه خودش اجزاء یک سیستم مجازی رو پیاده سازی کرده. طبعا یکی از اون اجزاء مجازی Registry مجازی ئه. حالا هر چیزی که در Registry حقیقی قابل ثبت شدنه در اون Registry مجازی هم قابل ثبت شدن میشه، مثل همون مشخصات کتابخانه های COM.
و اینکه کلا کلاسی توی دات نت برای کار با کمپوننت ها وجود داره؟ مثلا اینکه با استفاده از اون کلاس بفهمیم که activex ای ثبت هست یا نه یا لیست activex های ثبت شده را بهمون برگردونه و ... ؟
کاملا برای ویندوز کار با بخش های سیستمی Registry یک مورد Internal ئه. یعنی تقریبا هر چیزی که سیستم عامل داخل Registry ثبت می کنه از دید مایکروسافت Internal خودش محسوب میشه. به این معنا که مایکروسافت با یک روال خاص خودش که گاهی مستند هست و گاهی نیست در Registry ساختاری رو ثبت می کنه که خیلی رغبتی نداره شما در پیاده سازی اش دخالتی بکنید چون هر باگی در کدتون باشه و مشکل ایجاد بشه بعدا از ویندوزش ایراد می گیرند. مثل درایور ها نیست که کد رو بفرستید از لابراتوار مایکروسافت تاییدیه بگیرید. مایکروسافت نه تضمین می کنه که در ویندوز های بعدی همون روال رعایت بشه، نه اشتیاقی نشون میده که شما تو این ساختار ها سرک بکشید و نه الزما روتین هایی در API ارائه می کنه که بخواهید از طریق اونها اینکار رو انجام بدید. مثال های زیادی هم از این سیاست مایکروسافت هست. مثل همون ثبت فونت و منوی های Shell ئه Explorer و ...
بنابر این کاری که با بررسی اون بخش های Registry انجام می دهید نه تنها توسط مایکروسافت با کتابخانه های اضافی حمایت نمیشه که حتی ممکنه در ویندوز های بعدی بخاطر تغییراتی ناسازگار بشه و نباید انتظار داشته باشید که بیاد در NET Framework. برایش متد طراحی کنه. کاریه که خیلی برنامه های سیستمی انجام میدن ولی همه شون خودشون با کد نویسی انجام میدن. ممکنه برای نسخه های متفاوت ویندوز هم لازم باشه بخشی اش رو تغییر بدید.
 

جدیدترین ارسال ها

بالا