ورود

View Full Version : سوال: میخوام در هنگام اتصال فلش مموری به پورت usb برنامم باز شه



Armin62
شنبه 04 دی 1389, 01:30 صبح
در هنگام فعال بودن برنامه میخوام با اتصال فلش مموری به پورت usb برنامم باز شه چطور میشه این کار رو انجام داد
مثل ویروس کشها که فورا فعال میشن

ali.rezaei7
شنبه 04 دی 1389, 11:13 صبح
درود.
ابتدا برنامه Notepad باز کنید. و دستورات زیر رو بنویسید.


[autorun]
Open=AppName.exe

به جای AppName نام فایل برنامتونو بزارید.
بعد از اینکار فایل رو بانام autorun.inf در ریشه درایو ذخیره کنید و همچنین فایل برنامه رو در ریشه درایو کپی کنید
.
از این به بعد زمانی که فلشو به سیستم متصل کنید، برنامه اجرا می شود.

Felony
شنبه 04 دی 1389, 12:57 عصر
درود.
ابتدا برنامه Notepad باز کنید. و دستورات زیر رو بنویسید.


[autorun]
Open=AppName.exe

به جای AppName نام فایل برنامتونو بزارید.
بعد از اینکار فایل رو بانام autorun.inf در ریشه درایو ذخیره کنید و همچنین فایل برنامه رو در ریشه درایو کپی کنید
.
از این به بعد زمانی که فلشو به سیستم متصل کنید، برنامه اجرا می شود.
چه ربطی به سوال ایشون داشت ؟!

وقتی دستگاهی به سیستم متصل میشه یا از سیستم جدا میشه پیغام WM_DEVICECHANGE به تمام برنامه های در حال اجرا ارسال میشه ، باید یک Message Handler برای برنامتون بنویسید و تو اون وقتی پیغام WM_DEVICECHANGE رو دریافت کردید بررسی کنید که دستگاه از نوع USB بوده بعد فرم برنامتون رو نمایش بدید .

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

Armin62
شنبه 04 دی 1389, 16:03 عصر
من برنامشو دارم ولی نام درایو رو میخوام که نمیتونم دریافت کنم
اینجا قرار میدمش اگه ممکنه دوستان کمک کنند

butterfly8528
یک شنبه 05 دی 1389, 03:23 صبح
سلام .
با استفاده از سورس کدی که ضمیمه کردم ، میتونید به محض وصل شدن و شناسایی USB به سیستم ، آن را شناسایی و نامش را مشاهده کنید .
موفق باشید .

Armin62
یک شنبه 05 دی 1389, 15:58 عصر
این برنامه که شما گذاشتید که اصلا چنین کاری رو انجام نمیده

کسی میتونه برنامه پست 4 رو تغییر بده به طوری که نام درایو USB نمایش داده بشه

mbf5923
یک شنبه 05 دی 1389, 18:25 عصر
توي انجمن قبل از دادن پست جديد و ايجاد تاپيك اگه جستجو كنيم سورس تخم گذاري مرغ ها هم موجوده :قهقهه:
فقط بايد به خودمون زحمت بديم از سرچ بالاي صفحات استفاده كنيم
http://barnamenevis.org/showthread.php?77567-%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88-USB

butterfly8528
دوشنبه 06 دی 1389, 01:26 صبح
سلام .


این برنامه که شما گذاشتید که اصلا چنین کاری رو انجام نمیده
لطفا اول برنامه رو اجرا کنید ، بعد فلش مموری رو به سیستم وصل کنید . به محض شناسایی فلش مموری ، برنامه از حالت Minimize خارج میشه و نام و ID فلش رو بر روی فرم چاپ میکنه .


کسی میتونه برنامه پست 4 رو تغییر بده به طوری که نام درایو USB نمایش داده بشه
اگر دقت کنید در این برنامه هم که در پست 4 قرار دادید ، نام فلش مموری نمایش داده میشه !


توي انجمن قبل از دادن پست جديد و ايجاد تاپيك اگه جستجو كنيم سورس تخم گذاري مرغ ها هم موجوده
فقط بايد به خودمون زحمت بديم از سرچ بالاي صفحات استفاده كنيم
http://barnamenevis.org/showthread.p...B%8C%D9%88-USB
100%

موفق باشید .

pcdownload.bloghaa.com
دوشنبه 06 دی 1389, 09:03 صبح
با عرض سلام
برای چنین کار ساده ای نیاز به این همه تخصص:لبخندساده: نیست.
خیلی ساده دو شی drivelist روی فرم قرار می دهیم.
یکی از drivelist ها را هر 1 دهم ثانیه به وسیله یک تایمر refresh میکنیم.
در هر بار ریفرش کر دن چک می کنیم که آیا listcount درایو لیست ها باهم برارند یا نه.
اگر برابر نبودند یعنی یک درایو جدید اضافه شده است.
و سپس به وسیله File System Object چک می کنیم آیا درایو اضافه شده فلش مموری است یا خیر.
همین.

الان به وی بی دسترسی ندارم(تو کافینتم) و گرنه کدشو برات می نوشتم.
----------------------------------------
end of comment

Armin62
دوشنبه 06 دی 1389, 14:04 عصر
دوست عزیز pcdownload.bloghaa.این کار شما مشکل رو حل میکنه ولی راه استانداردی نیست چون تایمر باعث میشه که رم و پردازنده به طور مداوم اشغال باشه

Armin62
دوشنبه 06 دی 1389, 14:08 عصر
آقای mbf5923 ممنون از راهنمایتون ولی در اون پست هم راه حل منطقی وجود نداره البته Mbt925 عزیز راه حل صحیحی رو معرفی کردن ولی نام درایو جدید رو مشخص نمی کنه

در مود گفته دوستمون butterfly8528 باید بگم برنامه ای که من در پست 4 گذاشتم به هیچ عنوان این کار رو نمیکنه و در مورد برنامه ای که خودتون قرار دادین در قسمت DeviceName هیچ نامی چاپ نمیشه یا لااقل رو سیستم من این اتفاق نمی افته

butterfly8528
دوشنبه 06 دی 1389, 23:50 عصر
سلام .


در مود گفته دوستمون butterfly8528 باید بگم برنامه ای که من در پست 4 گذاشتم به هیچ عنوان این کار رو نمیکنه
به عکس ضمیمه شده توجه کنید .


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

Armin62
سه شنبه 07 دی 1389, 14:18 عصر
butterfly8528 جان ممنون از توجهت برنامه ای خودم قرار دادم نام فلش مموری رو مشخص میکنه ولی نام درایو ساخته شده رو نه
من نام درایو رو میخوام

pcdownload.bloghaa.com
سه شنبه 07 دی 1389, 20:00 عصر
با عرض سلام
دوستان خود ویندوز برای تشخیص یک دیوایس جدید از یک حلقه بی نهایت یا callback function استفاده می کنه.
یه راه حل خوب همونیه که گفتم.گر چه شما در انتخاب کد برای برنامه خود آزاد هستید.
ضمنا زیاد نگران اشغال cpu نباشید. چون اولا یک تایمر و چند تا کد داخل آن حتی اگه بخواهید سیستم عامل هم بسازید
چندان تاثیری در سرعت سیستم شما نخواهد داشت.(مگر اینکه کامپیوترتان با نفت کار کند).
دوما cpu ما از multi processing استفاده می کند.
-----------------------------------------------------------------
همیشه سعی کنید برای کامپیوتر های امروز و فردا برنامه بنویسید نه برای کامپیوتر های دیروز.

butterfly8528
چهارشنبه 08 دی 1389, 01:05 صبح
سلام.

دوستان خود ویندوز برای تشخیص یک دیوایس جدید از یک حلقه بی نهایت یا callback function استفاده می کنه.
دوست عزیز این رو بر چه اساسی گفتید ؟؟؟

pcdownload.bloghaa.com
چهارشنبه 08 دی 1389, 02:23 صبح
خوب دوست من کسی به کد های ویندوز دسترسی نداره تا بدونه ویندوز از چه روشی برای
این کار استفاده می کنه.اما خوب خود ویندوز راهم با اسمبلی و c++ نوشتن پس باید از قوانین برنامه نویسی پشتیبانی کنه.
برای با خبر شدن لحظه به لحظه از یک چیز از نظر برنامه نویسی چند راه بیشتر وجود نداره:
1.چک کردن با تایمر
2.چک کردن با حلقه بی نهایت
3.چک کردن با callback function

نمونه 1: مثل همون روشی که توضیح دادم.
نمونه 2: اطلاع برنامه از پیغام های ارسال شده به آن.
نمونه 3: تشخیص فشرده شدن کلید های صفحه کلید.


که برای برنامه های سطح سیستم بیشتر از 2 مورد اخر استفاده می شه.
اگه شما با نظر من مخالفید خوشحال میشم نظرات شما رو هم بدونم.

Felony
چهارشنبه 08 دی 1389, 07:58 صبح
دوستان خود ویندوز برای تشخیص یک دیوایس جدید از یک حلقه بی نهایت یا callback function استفاده می کنه.



3.چک کردن با callback function
نمونه 3: تشخیص فشرده شدن کلید های صفحه کلید.


بسم الله ... !
شما در کل مفهوم Callback Function رو متوجه نشدید ، Callback Function ها Function هایی هستن که شما تو برنامتون مینویسید و توابع API ویندوز اونها رو صدا میزنن ، مثلا تابع EnumWindows هندل پنجره های باز رو به کاربر میده ، برای استفاده از این تابع اول باید یک Callback Function تو برنامتون تعریف کنید و بعد اون رو به تابع EnumWindow پاس بدید ، ویندوز به صورت خودکار برای هر پنجره ای که پیدا میکنه Callback Function ی که شما تو برنامتون نوشتید رو صدا میزنه و هندل پنجره رو به عنوان پارامتر بهش میده حالا شما تو اون تابع میتونید هر کدی نوشته باشید ، مثلا هندل رو تو یه ListBox اضافه کنید ؛ به این میگن Callback Function .


خوب دوست من کسی به کد های ویندوز دسترسی نداره تا بدونه ویندوز از چه روشی برای
این کار استفاده می کنه.اما خوب خود ویندوز راهم با اسمبلی و c++ نوشتن پس باید از قوانین برنامه نویسی پشتیبانی کنه.


به کدهای ویندوز دسترسی ندارید ولی به مستنداتی مثل Windows Internals که دسترسی دارید !

pcdownload.bloghaa.com
چهارشنبه 08 دی 1389, 21:56 عصر
دوست عزیز من خوب می دونم مفهوم callback function چیه؟
من گفتم از حلقه بی نهایت [COLOR="red"]یا[/ COLOR] callbackfunction
خب اگر ویندوز از هیچ کدوم از اینها استفاده نمی کنه بفرمایید از چه روشی استفاده می کنه؟

Felony
پنج شنبه 09 دی 1389, 06:18 صبح
دوست عزیز من خوب می دونم مفهوم callback function چیه؟
اگر میدونستید اون توضیح رو ارائه نمیکردید ، من هرچی فکر میکنم رابطه ای بین Callback Function با حلقه بی نهایت و اتصال سخت افزار پیدا نمیکنم .


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

pcdownload.bloghaa.com
جمعه 10 دی 1389, 01:16 صبح
سلام به دوستان.
آقا توی ویندوز یک نفر مثل شما که ننشته مدام به یک چیز گیر بده .
برای این که بفهمه دستگاه جدیدی اضافه شده باید پشت سر هم.چک کنه.که وقفه جدیدی به cpu داده شده یا نه.

داداش اگه شما زبان یاد می گیری من خودم زبان نوشتم.نمی خواد در مورد توابع و این جور چیزا بهم یاد بدی.
ضمنا من فکر میکنم شما به واژه سیستم حساسیت دارید.چون هر جا من از این کلمه استفاده کردم شما یه ... انداختی تو بحث.

Felony
جمعه 10 دی 1389, 06:24 صبح
سلام به دوستان.
آقا توی ویندوز یک نفر مثل شما که ننشته مدام به یک چیز گیر بده .
برای این که بفهمه دستگاه جدیدی اضافه شده باید پشت سر هم.چک کنه.که وقفه جدیدی به cpu داده شده یا نه.

داداش اگه شما زبان یاد می گیری من خودم زبان نوشتم.نمی خواد در مورد توابع و این جور چیزا بهم یاد بدی.
ضمنا من فکر میکنم شما به واژه سیستم حساسیت دارید.چون هر جا من از این کلمه استفاده کردم شما یه ... انداختی تو بحث.
کسی نگفت که از حلقه استفاده میکنه یا نمیکنه ، گفتم اون Callback Function معناش چیز دیگه ای هست ! ؛ بیکار هم نیستم که سر پست های فاقد محتوا با شما بحث کنم .

@ بحث علمی تاپیک تموم شد و کم کم داره به کل کل کشیده میشه ، من هم دیگه اینجا کاری ندارم ، موفق باشید .

Armin62
سه شنبه 14 دی 1389, 17:21 عصر
ممنون از دوستان بحث داغی رو داشتید ولی ...
را حل اینکه برنامه بتونه تشخیص بده که آیا درایو جدیدی به وجود اومده یا نه در پست 4 وجود داره ولی راه حلی برای بدست آوردن نام درایو هنوز بی جواب مونده
دوستان میتونن کمک کنند

ابوذر محمودی
سه شنبه 14 دی 1389, 21:15 عصر
در هنگام فعال بودن برنامه میخوام با اتصال فلش مموری به پورت usb برنامم باز شه چطور میشه این کار رو انجام داد
مثل ویروس کشها که فورا فعال میشن

با درود!
دوست عزیزم این کد رو من تو آنتی ویروس خودم دارم ازش استفاده میکنم تو همه ویندوز ها هم جواب میده و یه سورس کامله!
یکم واست تغییرش دادم.
اما واسه اینکه بعد وصل شدن فلش به سیستم برنامت اجرا بشه،باید برنامه رو تو systray قرار بدی و تو قسمتی از این برنامه که درایو ها را شناسایی میکنه باید کد maximize کردن برنامتو قرار بدی.
هسته اصلی برنامت کد شناسایی فلش هست،بقیش دیگه آسونه،امیدوارم مفید باشه.

http://personal100.persiangig.com/vb/device_info.zip

Anis131313
یک شنبه 09 مرداد 1390, 02:45 صبح
با سلام و خسته نباشید خدمت دوستان برنامه نویس
لینک پست شماره 23 (بالایی) کار نمیکنه ، کسی این سورس کد رو داره ؟؟؟

محسن واژدی
یک شنبه 09 مرداد 1390, 08:02 صبح
سلام علیکم
فایل بالا را ضمیمه پست کردم

موفق باشید

farboodj1375
یک شنبه 09 مرداد 1390, 10:59 صبح
چجوری میشه محتویات فلش رو بدست آورد؟؟؟

farboodj1375
یک شنبه 09 مرداد 1390, 11:10 صبح
منظورم فایلهایی بود که توی فلش هست.

محسن واژدی
سه شنبه 11 مرداد 1390, 13:23 عصر
چجوری میشه محتویات فلش رو بدست آورد؟؟؟
برای بدست آوردن کل محتویات فلش بایستی از یک جستجوگر (search) استفاده کنید
روش های مختلفی برای نوشتن search وجود دارد که ساده ترین آنها استفاده از تابع dir() است
کنترل search را میتوانید هم در انجمن و هم با جستجو در google بیابید

موفق باشید