PDA

View Full Version : برنامه دوربین مخفی ( USB )



Mehrdad Tehrani
پنج شنبه 07 تیر 1386, 18:59 عصر
سلام به همه دوستان برنامه نویس

من می خوام یه برنامه بنویسم که یه وب کم رو مدیریت کنه یعنی ::متفکر:

1- تشخیص اتصال یو اس بی
2- روشن کردن وب کم و خاموش کردن وب کم
3- دادن دستور عکس برداری به وب کم
4- از بین بردن اتصال یو اس بی


لطفا هرچی اطلاعات و کمپونت و دی ال ال در این رابطه دارید همین جا بزارید ... :اشتباه:
خیلی خیلی خیلی ممنون !

Mehrdad Tehrani
پنج شنبه 07 تیر 1386, 21:15 عصر
کسی ما رو راه نمیندازه ؟

noorsoft
پنج شنبه 07 تیر 1386, 22:27 عصر
من این برنامه را چند سال پیش نوشتم باید بگردم و برات ارسال کنم

DAMAVAND
پنج شنبه 07 تیر 1386, 22:39 عصر
سلام به همه دوستان برنامه نویس

من می خوام یه برنامه بنویسم که یه وب کم رو مدیریت کنه یعنی ::متفکر:

1- تشخیص اتصال یو اس بی
2- روشن کردن وب کم و خاموش کردن وب کم
3- دادن دستور عکس برداری به وب کم
4- از بین بردن اتصال یو اس بی


لطفا هرچی اطلاعات و کمپونت و دی ال ال در این رابطه دارید همین جا بزارید ... :اشتباه:
خیلی خیلی خیلی ممنون !

سلام
خوب شما میخوای یه برنامه برای کار با بنویسی درست !
حالا چرا دوربین مخفی ??????!!!!!!!!!:متفکر: :متفکر:

اگه بخواید از توابع API استفاده کنید هیچ فرقی نمیکنه که دارید تو چه زبانی ازش استفاده میکنید
در ضمن شما باید از توابع موجود AVICAP32.dll استفاده کنید که یکی از DLL های خود ویندوز است.
اگه جستجو میکردید زودتر به نتیجه میرسید !!!
این مثال تو VB.net است که البته همون طور که گفتم چون از توابع API استفاده شده
خیلی فرقی نمیکنه که تو چه زبانیه زحمت تبدیلش با خودتون !

http://barnamenevis.org/forum/showthread.php?p=356913#post356913

Mehrdad Tehrani
جمعه 08 تیر 1386, 00:01 صبح
لطف کن و همین جا برام بزار ! ممنون

Mehrdad Tehrani
جمعه 08 تیر 1386, 15:03 عصر
چی شد پس ، نذاشتی ! کارم لنگ مونده ....

Mehrdad Tehrani
جمعه 08 تیر 1386, 19:49 عصر
کسی نیست ما رو کمک کنه ؟

amirhosein
شنبه 09 تیر 1386, 12:00 عصر
یه سرچ بزن تو اینترنت زودتر به جواب میرسی

Mehrdad Tehrani
شنبه 09 تیر 1386, 16:26 عصر
چرا کسی جواب نمیده ؟

CodeMasterX
شنبه 09 تیر 1386, 19:11 عصر
اول توابع و کد زیر رو به بخش General فرم اضافه کنید :



Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PrintWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long

Private mCapHwnd As Long

Private Const CONNECT As Long = 1034
Private Const DISCONNECT As Long = 1035
Private Const GET_FRAME As Long = 1084
Private Const WS_CHILD As Long = &H40000000
Private Const WS_VISIBLE As Long = &H10000000


حالا یه کنترل Timer و یک کنترل PictureBox به فرم اضافه کنید.توی رویداد Load فرم مربوطه کد زیر رو بنویسید :



pichDC = Picture1.hdc
mCapHwnd = capCreateCaptureWindow("BetterCam", WS_CHILD Or WS_VISIBLE, 0, 0, 320, 240, Picture2.hWnd, 0)
DoEvents
SendMessage mCapHwnd, CONNECT, 0, 0
Timer1.Enabled = True



کد زیر رو هم برای کنترل تایمر اضافه کنید :



SendMessage mCapHwnd, GET_FRAME, 0, 0
Call PrintWindow(mCapHwnd, Picture1.hdc, 0)


کد زیر هم باید به رویداد QueryUnload فرم اضافه بشه :



Timer1.Enabled = False
SendMessage mCapHwnd, DISCONNECT, 0, 0


این برنامه فقط به سخت افزار شما (وب کم، دوربین خانگی یا هر چی که روی ویندوز نصب بشه، پورت و طریقه اتصال هم مهم نیست) وصل میشه و فریم فریم عکس میگیره و توی کنترل عکس شما نشونشون میده.

برای کارهای پیچیده تر مثل پردازش تصویر، MotionDetection و ذخیره ورودی ها در فرمت های ویدوئی مثل AVI,WMV باید تو بخش دات نت ازم کمک بخواین، یا وی بی 6 دست بالم بسته است.

Mehrdad Tehrani
شنبه 09 تیر 1386, 19:53 عصر
مرسی خیلی حال دادی ! فقط میشه بگی چطور USB رو مدیریت کنم :

خاموشش کنم - تشخیص اتصال بدم و....

CodeMasterX
شنبه 09 تیر 1386, 23:55 عصر
شما Constant های کد رو ببین، با SendMessage میتونی این کارها رو بکنی.

Mehrdad Tehrani
یک شنبه 10 تیر 1386, 10:04 صبح
ممنون میشم اگه یه مثال بزاری ....

Mehrdad Tehrani
یک شنبه 10 تیر 1386, 13:22 عصر
من اشنایی با Send message ندارم ، اگه میشه یه مثال خوب بذاری Codmaster جان

Mehrdad Tehrani
یک شنبه 10 تیر 1386, 16:44 عصر
چرا این سایت این جوری شده ، هیچ کس جواب نمیده !!!

sasanhe
یک شنبه 10 تیر 1386, 18:53 عصر
virtguard v.2.02
اینم یه نگاه بنداز

Mehrdad Tehrani
یک شنبه 10 تیر 1386, 19:27 عصر
کسی نیست ؟

CodeMasterX
یک شنبه 10 تیر 1386, 23:06 عصر
شرمنده، خیلی وقتم مشغوله دیر به دیر میام تو سایت.
ببین آقا مهران (اگه درست گفتم) شما توی کد یه جا هست که نوشته شده SendMessage CONNECT درسته ؟ این خط دستور مقدار مشخصی رو که با مقدار ثابت CONNECT تعریف شده با تابع SendMesasge به دستگاه سخت افزاری میفرسته که دستگاه رو روشن می کنه.شما توی لیست Constant ها اگه یه نگاه بندازی، یه مقداری هست که با DISCONNECT تعریف شده، میتونی با این دستگاه رو خاموش کنی.مابقی مقادیر مربوط به تابع cap رو که برای دستگاه های ویدوئی طراحی شده رو میتونی تو اینترنت پیدا کنی.

موفق باشی.

Mehrdad Tehrani
یک شنبه 10 تیر 1386, 23:19 عصر
مرسی ارمین جان از توجهت . سعی میکنم خودم راش بندازم مشکلی پیش اومد باهات در میون میزارم . ممنون

راستی من مهردادم نه مهران

Mehrdad Tehrani
دوشنبه 11 تیر 1386, 11:37 صبح
ارمین می دونی چه جوری میشه تشخیص داد که همین الان یه وسیله یو اس بی ( وب کم ، کول دیسک ، رم ریدر و...) به سیستم وصل شده ؟

CodeMasterX
سه شنبه 12 تیر 1386, 01:54 صبح
یه متغیر از نوع Long تعریف کن و باهاش مقدار CONNECT رو به دستگاه بفرست (با تابع SendMessage)، مقدارش اگر بیشتر از صفر باشه یعنی وصله.

Mehrdad Tehrani
سه شنبه 12 تیر 1386, 12:37 عصر
من نمی خوام یه تایمر بزارم هی چک کنه ببینه وصله یا نه...می خوام که

به محض اتصال یو اس بی و شناخت ویندوز، برنامه ی منم اونو بشناسه ...!

majidghost
سه شنبه 12 تیر 1386, 13:22 عصر
خوب شما راهی که آرمین جان گفت رو تو یه حلقه تو یه ترد دیگه اجرا کن و هر وقت دید وصله یه مسیج به فرم اصلی بفرسته.
ولی باید قبلش یه تابع درست کنی و فرم اصلیت رو به اون هوک کنی.

Mehrdad Tehrani
سه شنبه 12 تیر 1386, 14:31 عصر
متاسفانه من اطلاعاتی درباره هوک کردن و کاربردش ندارم ، اگه میشه بیشتر توضیح بدی مهدی جان

majidghost
سه شنبه 12 تیر 1386, 15:10 عصر
اولا اینکه اسم من مجید ه نه مهدی.

هوک:
هوک در لغت به معنای قلاب است.
هنگامی که شما برای مثال رو form1 کلیک میکنی, درایور موس شما یه مسیج به form1 میفرسته که مسیجه به form1 میفهمونه که روش کلیک شده. هنگامی که مسیجی به form1 فرستاده میشه این پیغام درون یک پرودس (تابع) پردازش میشه و رویداد form1_Click صدا زده میشه. ولی این پرودس درون کدها نیست بلکه درون کدهای مخفی form1 پنهان شده است و ما نمیتوانیم همه ی مسیجهایی که به form1 فرستاده میشود را ببینیم ولی بعضی از آنها را میتوانیم درک کنیم. منظورم همان form1_click است که البته این یک پدیده(event) است.
ما وقتی form1_click را که یک پدیده است میبینیم بدنبال یک علت میگردیم , چون هر معلولی نیازمند یک علت است و معلول (form1_click) بدون علت بوجود نمیاید(مسیجی که به form1 فرستاده میشود) -- برهان علیت , سال سوم راهنماییی کتاب دینی--
حالا ما میخواهیم مسیجهایی که به form1 فرستاده میشوند را خودمان درون یک تابع که خودمان طراحی میشوند پردازش کنیم , بدین منظور ما باید تابع پردازش مسیجهای form1 را تغییر دهیم به تابعی که خودمان میخواهیم بدین منظور ما از api ای به نام SetWindowLong استفاده میکنیم.
تعریف تابع:

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Longپارامترها:
Hwnd: هندل form1
هندل فرم1 اینه= form1.hwnd
nIndex: مقدار اینو 4- قرار بده.
dwNetLong:
با اپراتور addressof و نام تابع خودت اینو پاس بده.

مثال:


SetWindowLong (form1.hWnd,-4,addressof WindowProc)البته باید قبلش باید یه تابع اینجوری در یک ماژول تعریف کنی به صورت پابلیک:


Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
End Functionاون موقع هرچی مسیج به form1 فرستاده میشه اون تابع اجرا میشه.

امیدوارم استفاده کرده باشید.

Mehrdad Tehrani
سه شنبه 12 تیر 1386, 15:21 عصر
مرسی از توضیحت اقا مجید

می دونی چطوری میشه فهمید وسیله ای که به سیستم الان وصل شد وب کم هست یا چیزه دیگه ؟

majidghost
سه شنبه 12 تیر 1386, 15:26 عصر
اینو نمیدونم, از آقا آرمین بپرس.

Mehrdad Tehrani
سه شنبه 12 تیر 1386, 16:18 عصر
خوب شما راهی که آرمین جان گفت رو تو یه حلقه تو یه ترد دیگه اجرا کن و هر وقت دید وصله یه مسیج به فرم اصلی بفرسته.
ولی باید قبلش یه تابع درست کنی و فرم اصلیت رو به اون هوک کنی.

لطف می کنی از همین راهی که می گی یه مثال بنویسی !!!

ممنون

majidghost
سه شنبه 12 تیر 1386, 16:30 عصر
در اسرع وقت.

majidghost
سه شنبه 12 تیر 1386, 16:54 عصر
امیدوارم بدردت بخوره :تشویق:

Mehrdad Tehrani
سه شنبه 12 تیر 1386, 19:38 عصر
دستت درد نکنه داداش

majidghost
سه شنبه 12 تیر 1386, 19:43 عصر
خواهش میکنم, حالا کار کرد؟

Mehrdad Tehrani
سه شنبه 12 تیر 1386, 20:24 عصر
اره خب کار کرد
شما کنترلی واسه رایت سی دی تو وی بی نداری اقا مجید ؟

majidghost
سه شنبه 12 تیر 1386, 23:08 عصر
ندارم ولی به محض یافتن میزارم.

majidghost
سه شنبه 12 تیر 1386, 23:36 عصر
بیا امیدوارم بدردت بخوره, ولی قبلش Readme.txt رو حتما بخون شاید کار نکنه.

منبع (http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=62011&lngWId=1)

CodeMasterX
سه شنبه 12 تیر 1386, 23:43 عصر
مگه اینکه لیستی از اسم سخت افزار ها داشته باشی و از رو اونا یه جوری تشخیص بدی.
ویندوز همه دستگاه های ویدوئی رو به CamDevice میشناسه.

ftmotlagh
چهارشنبه 13 تیر 1386, 09:37 صبح
سلام من میخواستم بدونم چه جوری میشه اسم وب کمی که وصل به کامپیوتر رو پیدا کنم؟؟؟

ftmotlagh
چهارشنبه 13 تیر 1386, 12:01 عصر
راستی یادم رفت بگم نحوه عکس برداری و ذخیره فیلم هم بگید.
متشکرم

Fagat_tanhaie
شنبه 16 تیر 1386, 01:11 صبح
vb بدلی ساپورت نکردن Directshow برای کار با وب کم مناسب نیست
برای نتایج بهتر باید از دات نت استفاده کنی . همه چیزهایی که دنبالش می گردی تو سایت
CodeProject در مودش بحث شده.

موفق باشی

ftmotlagh
شنبه 16 تیر 1386, 08:22 صبح
یعنی از اینجا به بعد VB کم میاره ؟

CodeMasterX
شنبه 16 تیر 1386, 18:24 عصر
کم نمیاره ولی خوب شد که دوستمون اشاره کردن.
برای کارهای پیچیده تر ولی راحتتر باید از DirectShow استفاده کنید که دات نت ازش کاملا پشتیبانی می کنه.وی بی 6 هم که شکر خدا رو به انقراض هست.

majidghost
پنج شنبه 28 تیر 1386, 18:32 عصر
ای بابا, آرمین جان کم لطفی میکنی بلاخره شما قبل از اینکه دات نت یاد بگیری داشتی vb6 یاد میگرفتی!

M8SPY_OK
پنج شنبه 28 تیر 1386, 19:38 عصر
کم نمیاره ولی خوب شد که دوستمون اشاره کردن.
برای کارهای پیچیده تر ولی راحتتر باید از DirectShow استفاده کنید که دات نت ازش کاملا پشتیبانی می کنه.وی بی 6 هم که شکر خدا رو به انقراض هست.


سلام
توی فروم VB6 داری این حرف رو مزنی ؟ :لبخند:

sohrab o
جمعه 29 تیر 1386, 05:01 صبح
دوستان به جای کل کل بیخودی بیشتر به مطالب آموزنده بپردازید.
البته اینو من نباید می گفتم
باز هم شرمنده