www.thaiio.com หน้ากระดานข่าวหลัก
Google
 
Web www.thaiio.com

หน้าแรกเวปไซด์หน้าแรก Thaiio.com คำถามถามบ่อยของกระดานข่าวคำถามถามบ่อยของกระดานข่าว ค้นหาค้นหา รายนามสมาชิกรายนามสมาชิก กลุ่มผู้ใช้งานกลุ่มผู้ใช้งาน
ข้อมูลส่วนตัวข้อมูลส่วนตัว คุณไม่มีข่าวสารใหม่คุณไม่มีข่าวสารใหม่ ออกจากระบบ [ thaiio ]ออกจากระบบ [ thaiio ]

ห้องVBส่วนตัวของแมงเม่า

 

หน้าืั้ต่อไป

ดูกระทู้ก่อนนี้ :: ดูกระทู้ถัดไป  
ผู้ส่ง ข้อความ
voyager



เข้าร่วมเมื่อ: 18 สค. 2005
ตอบ: 68
ที่อยู่: เชียงใหม่

ตอบตอบ: พ. สค. 24, 2005 2:17 pm    ชื่อกระทู้: ห้องVBส่วนตัวของแมงเม่า ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ใครอยาก post กระทู้เกี่ยวกับ visual basic 6.0 ทั้งที่เป็น hardware interface หรือ miscellaneous ถ้าไม่มีใคร post ก็จะมา post เอง 555555
กลับไปข้างบน
แสดงข้อมูลส่วนตัวของสมาชิก ส่งข่าวสารส่วนตัว ส่งอีเมล์ MSN
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: พ. สค. 24, 2005 3:37 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

Code of the day: ใช้ SetCursorPos API กำหนดตำแหน่ง curser

'Module
Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long

'Form:
Private Sub Command1_Click()
Dim SetCurPos As Long
If IsNumeric(Text1) Then
If IsNumeric(Text2) Then
SetCurPos = SetCursorPos(Text1, Text2)
Else
MsgBox "อย่าลืมว่าต้องใส่ทั้งสองช่อง!"
End If
Else
MsgBox "ใส่ตัวเลขเท่านั้นจ้า!"
End If
End Sub

ประยุกต์: โปรแกรม auto click
กลับไปข้างบน
Bluejoob



เข้าร่วมเมื่อ: 24 สค. 2005
ตอบ: 2
ที่อยู่: 80/38 บางเขน

ตอบตอบ: พ. สค. 24, 2005 5:52 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

อยากได้โปรแกรมหรือcode vb6 ที่ดึงภาพมาจาก webcam
กลับไปข้างบน
แสดงข้อมูลส่วนตัวของสมาชิก ส่งข่าวสารส่วนตัว ส่งอีเมล์ Yahoo MSN
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: พ. สค. 24, 2005 10:30 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

Idea Idea Idea Wink

Const WM_CAP As Integer = &H400
Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP + 10
Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP + 11
Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30
Const WM_CAP_SET_PREVIEW As Long = WM_CAP + 50
Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP + 52
Const WM_CAP_SET_SCALE As Long = WM_CAP + 53
Const WS_CHILD As Long = &H40000000
Const WS_VISIBLE As Long = &H10000000
Const SWP_NOMOVE As Long = &H2
Const SWP_NOSIZE As Integer = 1
Const SWP_NOZORDER As Integer = &H4
Const HWND_BOTTOM As Integer = 1
Dim iDevice As Long
Dim hHwnd 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 SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
Private Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, ByVal hWndParent As Long, ByVal nID As Long) As Long
Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Long, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Boolean

Private Sub cmdSave_Click()
Dim bm As Image
' Copy image to clipboard
SendMessage hHwnd, WM_CAP_EDIT_COPY, 0, 0
ClosePreviewWindow
picCapture.Picture = Clipboard.GetData
CommonDialog1.CancelError = True
CommonDialog1.FileName = "Webcam1"
CommonDialog1.Filter = "Bitmap |*.bmp|JPEG |*.jpeg"
On Error GoTo NoSave
CommonDialog1.ShowSave
SavePicture picCapture.Image, CommonDialog1.FileName
NoSave:
cmdStop.Enabled = False
cmdSave.Enabled = False
cmdStart.Enabled = True
End Sub

Private Sub cmdStart_Click()
iDevice = lstDevices.ListIndex
OpenPreviewWindow
End Sub

Private Sub cmdStop_Click()
ClosePreviewWindow
cmdStop.Enabled = False
cmdSave.Enabled = False
cmdStart.Enabled = True
End Sub

Private Sub Form_Load()
LoadDeviceList

If lstDevices.ListCount > 0 Then
lstDevices.Selected(0) = True
Else
cmdStart.Enabled = False
lstDevices.AddItem ("No Device Available")
End If
cmdStop.Enabled = False
cmdSave.Enabled = False
End Sub

Private Sub LoadDeviceList()
Dim strName As String
Dim strVer As String
Dim iReturn As Boolean
Dim x As Long
x = 0
strName = Space(100)
strVer = Space(100)
Do
iReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
If iReturn Then lstDevices.AddItem Trim$(strName)
x = x + 1
Loop Until iReturn = False
End Sub

Private Sub OpenPreviewWindow()
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.hwnd, 0)
If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
SendMessage hHwnd, WM_CAP_SET_SCALE, True, 0
SendMessage hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0
SendMessage hHwnd, WM_CAP_SET_PREVIEW, True, 0
cmdSave.Enabled = True
cmdStop.Enabled = True
cmdStart.Enabled = False
Else
DestroyWindow hHwnd
cmdSave.Enabled = False
End If
End Sub

Private Sub ClosePreviewWindow()
SendMessage hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0
DestroyWindow hHwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
If cmdStop.Enabled Then
ClosePreviewWindow
End If
End Sub
กลับไปข้างบน
บุคคลทั่วไป






ตอบตอบ: พฤ. สค. 25, 2005 1:19 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

Code of the day: Scott's LED ocx


Property: LEDState และ LEDFlashrate
LEDState:
- 0 = Off LED
- 1 = On LED
- 2 = Flashing LED
LEDFlashrate: Property ที่ใช้กำหนดค่าในการกระพริบของ LED

Public n As Integer
Private Sub Form_Load()
Timer1.Interval = 1
Timer1.Enabled = False
Timer2.Interval = 1000
Timer2.Enabled = False
Command1.Caption = "Start"
Command2.Caption = "Clear LED"
End Sub
Private Sub Command1_Click()
Static i As Integer
i = i + 1
i = i Mod 2
If i <> 0 Then
Command1.Caption = "STOP"
Timer1.Enabled = True
Timer2.Enabled = True
n = 0
Else
Command1.Caption = "RUN"
Timer1.Enabled = False
Timer2.Enabled = False
For m = 0 To 7
ForgeLEDb1(m).LEDstate = 0
Next m
n = 0
End If
End Sub
Private Sub Timer1_Timer()
If n < 8 Then
ForgeLEDb1(n).LEDstate = 1
Else
For m = 0 To 7
ForgeLEDb1(m).LEDstate = 0
Next m
End If
End Sub
Private Sub Timer2_Timer()
n = n + 1
If n > 8 Then n = 0
End Sub

ดาวน์โหลด ocx:http://members.tripod.com/forgesoft/
ประยุกต์: แสดงผล[/url]
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: ศ. สค. 26, 2005 9:04 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

Code of the day: Check IP ได้ง่าย ๆ ด้วย winsock

Private Sub cmdIp_Click()
Text1.Text = Winsock1.LocalIP
Text2.Text = Winsock1.LocalHostName
End Sub

ประยุกต์: -
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: อาทิตย์ สค. 28, 2005 10:55 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

Code of the day: MS agent



'Module
Public Bot As IAgentCtlCharacterEx

'Form

Private Sub Form_Load()
Agent1.Characters.Load "Robby", "robby.acs"
Set Bot = Agent1.Characters("Robby")
Bot.Show
End Sub
Private Sub Command1_Click()
Bot.Speak Text1.Text
End Sub
Private Sub Command2_Click()
End
End Sub
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: อ. สค. 30, 2005 11:02 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

Code of the day: เคลียร์ค่าใน text box

Private Sub Command1_Click()
For i = 0 To 99
Text1(i).Text = ""
Next i
End Sub
กลับไปข้างบน
En_tee
บุคคลทั่วไป





ตอบตอบ: พฤ. กย. 01, 2005 10:27 pm    ชื่อกระทู้: ให้โปรแกรมทำงานเหมือนโปรแกรม scan ไวรัส ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

พี่ครับผมส่ง mail ไปหาพี่แล้วแต่คิดว่าพีคงยังไม่ได้อ่าน ผมขอบคุณพี่มากนะครับที่ตอบคำถาม เกี่ยวกับ code คีย์บอร์ดที่หน้าเวบบอร์ดให้ผมแต่เนื่องจากผมศึกษา vb ได้ไม่ถึงเดือนผมก็เลยเข้าใจแค่บางส่วน แต่ก็ช่วยผมได้เยอะเลยขอบคุณมากครับ
พีครับแต่ผมมีเรื่องรบกวนอีกหน่อยครับ ผมจะทำยังไงให้โปรแกรมมันทำงานคล้ายโปรแกรม scan ไวรัส ประมาณว่าเช่นผมทำงานอยู่ที่หน้า ms word ถ้าผมพิมพ์ ตัว a ลงใน ms word หน้าจอก็จะขึ้นแสดง a ปกติแต่โปรแกรมของผมจะส่งเสียงเพลงออกมาด้วย
วัตถุประสงค์ของโปรแกรมคือ มันสามารถทำงานได้โดยที่เราทำงานอื่นอยู่เช่น ms word,ms excells,internet,หรือหน้าจอปกติโดยที่ยังไม่เข้าโปรแกรมอะไรเลยหากมีการกด a ก็จะมีเสียงเพลงเล่นขึ้นมาคล้ายโปรแกรม scan ไวรัส คอยดักจับอยู่ตลอดเวลา เห็นมีคนที่เค้าพอรู้เขาบอกว่าต้องติดต่อกับ API มันเเป็ยยังไงผมก็ไม่ค่อยรู้จักรู้จัก ผมเองก็เป็นมือใหม่ก็เลยไม่ค่อยเข้าใจ ก็เลยต้องขอให้พี่ช่วยหน่อยครับ ไกด์นำทางให้ผมหน่อยนะพี่ขอบคุณมากครับ
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: ศ. กย. 02, 2005 4:59 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ใช้ API "GetKeyState" นะครับ

1. สร้างปุ่มกดมา 1 อันตั้งชื่อให้มันว่า A
2. Timer 1 อันตั้ง interval=20

ผมทดลองโดยพิมพ์ A ที่ MS word(หรือโปรแกรมอะไรก็ได้) ทุกครั้งที่พิมพ์ caption ของปุ่มก็จะเปลี่ยนเป็นสีเหลือง(อย่าลืม set styleเป็น graphical ล่ะ) ถ้าจะประยุกต์ให้แสดงผลเป็นอย่างอื่นก็ใด้




'Module
Option Explicit
Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Private Keystate As Long
Private A As Boolean
Public Const VK_A = &H41
Public Function CheckKeys()
Keystate = GetKeyState(VK_A)
If (Keystate And &H80) = &H80 Then
Form1.A.BackColor = vbYellow
Else
Form1.A.BackColor = &H8000000A
End If
End Function

'Form
Option Explicit
Private Sub Timer1_Timer()
CheckKeys
End Sub
กลับไปข้างบน
เด็กตาดำๆ
บุคคลทั่วไป





ตอบตอบ: ส. กย. 03, 2005 6:45 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

พี่ครับ ช่วยสอนวิธีการ เขียน vb ให้ ส่ง sms เข้ามือถือหน่อยสิครับ
ผมรู้แค่ว่าต้องใช้ AT Command
ถ้าใช้โทรศัพท์บ้านส่งจะทำมีการเชื่อมต่อยังไง และถ้าจะใช้มือถือส่ง นี่จะง่ายกว่าโทรศัพท์บ้าน ไหมครับ วิธีทำ ทำยังไง
ขอแบบละเอียดๆ อ่าครับ ขอบคุณมากครับ
กลับไปข้างบน
เด็กตาดำๆ
บุคคลทั่วไป





ตอบตอบ: อาทิตย์ กย. 04, 2005 8:04 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

AT Command ซึ่งติดต่อพอร์ตของโทรศัพท์ อาจจะเป็น พอร์ตCom1 หรือ Com2 ก็ได้ แต่ถ้าหากในกรณีที่เป็นเน็ต adsl ซึ่งสายโทรศัพท์ต้องเชื่อมต่อกับ Router นี่ มันจะกลายเป็นพอร์ตอะไรครับ หรือว่าไม่สามารถส่ง sms ได้เลย
กลับไปข้างบน
บุคคลทั่วไป






ตอบตอบ: อาทิตย์ กย. 04, 2005 12:02 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ไม่เคยลองทำนะครับ แต่เท่าที่หาข้อมูลมาก็จะมีการส่งอยู่ 2 แบบ(ถ้าไม่ถูกต้องก็ขออภัยคร้าบบ)
1. SMS PDU format และ VB Mscom(บทความเกี่ยวกับ PDUhttp://www.dreamfabric.com/sms/) ถ้ามีเวลาจะลองทำดู

2. ผ่าน ICQ (ผ่านเวปไซต์)ผมลองดาวน์โหลด ICQ มาส่งดูแต่มันส่งไม่ได้ มี error "The cellular network is currently unable to send your message to the rececipient. Please try again later". ไม่รู้ว่ามันไปติดอะไร แต่ที่รู้แน่ ๆ คือ ICQ ที่เป็นโปรแกรมส่ง SMS ทั่วโลกยังส่งไม่ได้ นับประสาอะไรกับโปรแกรมที่เราทำเองละครับ Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad แต่ก็ลองเอาไปทำดูละกันครับ
โปรแกรม Idea
1. สร้าง text ชื่อ user.Text, pass.Text เพื่อรับค่าหมายเลข ICQ และ password
2. สร้าง text ชื่อ prefix.Text, number.Text เพื่อรับค่ารหัสประเทศ+หมายเลขเครือข่าย เช่นไทยคือ 66 และหมายเลขปลายทาง
เช่นป้อน 6601-5555555
3. Code
Private Sub Command1_Click()
'เปิดรับค่า log in log in
Inet1.OpenURL "http://web.icq.com/karma/dologin/1,,,00.html?uService=1&uLogin=" + user.Text + "&uPassword=" + pass.Text
'ส่ง message ผ่านทางเบอร์ปลายทาง เช่น66(01)5555555
Inet1.OpenURL "http://web.icq.com/sms/send_history/1,,,00.html?target=msghistory&prefix=+" + prefix.Text + "&carrier=aaa&tophone=" + number.Text + "&msg=" + msg.Text
End Sub
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: อาทิตย์ กย. 04, 2005 12:31 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

error ที่เกิดเมื่อส่งโดยโปรแกรม icq


โปรแกรมที่ทำ (ส่งออก smsได้ ตอนนี้ก็รออยู่ยังไม่มาซักที)
กลับไปข้างบน
เด็กตาดำๆ
บุคคลทั่วไป





ตอบตอบ: อาทิตย์ กย. 04, 2005 6:25 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

พี่ๆ พอจะมี ตัวอย่าง โปรแกรม vb ในการเขียน เล็กๆ น้อยๆ พอให้เป็นแนวทางได้ไหมครับ
จะใช้ vb Mscom อ่ะครับ เอาที่แบบใช้ได้จริงๆ อ่ะครับ ใช้หลักการของ AT Command เช่นโปรแกรมรับสายวางสายอีัตโนมัติ เงี่ยครับ แต่ใช้ AT Command ในการส่ง sms แทน
และถ้าจะใช้ Mscom เนี่ย เน็ต adsl ทำไม่ได้ใช่ไหมครับ เพราะว่า พอร์ตที่เชื่อมต่อมันไปต่อกับ Router เลย และไม่มีโมเด็ม หรือมีวิธีทำครับ รบกวนทีครับ ขอบคุณมากครับ

ปล.นี่เป็นโปรแกรมตอบรับอัตโนมัติ vb AT Command
http://saltnlight-e.com/project1.zip

แหล่งที่มา
http://saltnlight-e.com/programing.htm
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: จ. กย. 05, 2005 11:37 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ยังไม่ได้อ่านละเอียดนะนู๋ แต่ดูผ่านๆ ตา มันคือการควบคุมการทำงานของมือถือตาม AT command ไม่ใช่การเขียนโปรแกรมส่ง sms เหมือนที่พี่เข้าใจ จาก link ที่ 2ของน้อง ให้ดูหัวข้อ 7 กับ 8 น่าจะช่วยได้เยอะ

ลองใช้ keyword หาดูใน google พี่ลองดูแล้ว free source code มีเยอะมั๊กๆ copy มาใช้ได้เรยย Embarassed

MSComm1.Output = "AT+CMGS"
MSComm1.Output = "AT+CMGL"
MSComm1.Output = "AT+CMGR"
MSComm1.Output = "AT+CMGS"
MSComm1.Output = "AT+CMSS"
MSComm1.Output = "AT+CMGW"
MSComm1.Output = "AT+CMGD"


SMS AT command

AT+CMGL List Messagese
AT+CMGR Read Message
AT+CMGS Send Message
AT+CMSS Send Message from Storage
AT+CMGW Write Message to Memory
AT+CMGD Delete Message

จบ forum นี้ครับ(ห้ามกลับมาถามอีก) Cool
กลับไปข้างบน
thaiio



เข้าร่วมเมื่อ: 07 มีค. 2004
ตอบ: 17

ตอบตอบ: พ. กย. 07, 2005 1:24 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

สนับสนุนกระทู้นี้ครับ ผมเลยตรึงกระทู้ไว้ให้ค้างอยู่ด้านบนเลยนะครับ
กลับไปข้างบน
แสดงข้อมูลส่วนตัวของสมาชิก ส่งข่าวสารส่วนตัว ส่งอีเมล์ เข้าชมเว็บไซต์
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: พฤ. กย. 08, 2005 10:05 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ขอบคุณครับ webmaster
===============
Code of the day: โปรแกรมติดต่อ webcam โดยใช้ VB

ผมทึกทักเอามีหลายคนสงสัยว่า How can I detect webcam and command its?(โดยใช้ VB) ปกติแล้วหลาย ๆ คน คงคิดว่ามันต้องมี component อะไรซักอย่างเพื่อเป็นตัวเชื่อมต่อระหว่างโปรแกรมกับ Hardware(webcam) แน่ละหลาย ๆ คนเขียนโปรแกรมเป็นและมีกล้องแต่ไม่รู้จะไปหา component ตัวนั้นที่ไหนก็เลยติดแหง๊กตามหาคำตอบในเวปบอร์ดต่าง ๆ ........นี่ปัญหาของคุณใช่ไหม
ผมบอกได้ว่าคุณ ๆ คิดมากไปเพราะไมโครซอฟท์ได้คิดปัญหานี้ไว้ก่อนแล้วและก็แก้ให้แล้ว(จริง ๆ ใช้ประโยชน์ด้านอื่นๆมั้ง) และเขียนไว้ในหมวด Windows Multimedia หมู่ Multimedia Messages
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_wm_cap_set_scale.asp

ที่เรานำเอามาใช้ก็คือ
1. messagge ค้นหา driver
2. การจัดการเกี่ยวกับภาพ(preview,scale,WS..)

สรุปคือมันจะหา driver+device บนเครื่องคอมพิวเตอร์เราเอง เมื่อเจอแล้วก็เป็นหน้าที่ของเราที่จะเขียนโปรแกรมดึงภาพมาเก็บและแสดงผล

ทีนี่ก็มาเริ่มเขียนโปรแกรมกันเลย......รับรองได้ผล 100000000 % ผมลองมาแล้วและย้ำว่าไม่มีการเพิ่ม component ไดๆ ทั้งสิ้น(เผื่อมีคนจะถามอีก)




'ดูเหมือน code จะยาวเพราะ font มันสีเหมือนกัน แต่ถ้าคุณเอาไปวางบน VB จะเห็นชัดว่ามันสั้นนิดเดียวเอง......แปลกแต่จริงนะเออ????


Const WM_CAP As Integer = &H400
Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP + 10 'ติดต่อ webcam(โดยหาจาก driver)
Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP + 11 'Disconect webcam อันนี้สำคัญทีเดียว
Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30 'Copy ภาพจาก frame buffer นำมาเก็บในรูปของ clipboard เอาไว้ใช้สำหรับ save ภาพนิ่ง(jpg,bmp..)

Const WM_CAP_SET_PREVIEW As Long = WM_CAP + 50 'นำภาพจาก hardware มาเก็บที่ system memory แล้วนำมาแสดงบน window ผ่าน GDI function
Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP + 52 'Set frame
Const WM_CAP_SET_SCALE As Long = WM_CAP + 53 'ให้ able(True) หรือ disable scale(False) ภาพ
Const WS_CHILD As Long = &H40000000 'Window style จ้า
Const WS_VISIBLE As Long = &H10000000 'Window style จ้า
Const SWP_NOMOVE As Long = &H2
Const SWP_NOSIZE As Integer = 1
Const SWP_NOZORDER As Integer = &H4
Const HWND_BOTTOM As Integer = 1

Dim iDevice As Long ' Device ID ที่รับได้
Dim hHwnd As Long ' Handle to preview window

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 SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
Private Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, ByVal hWndParent As Long, ByVal nID As Long) As Long
Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Long, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Boolean

Private Sub Form_Load()
LoadDeviceList 'ก่อนอื่นต้องหาว่ามีกล้อง(webcam)ติดตั้งอยู่หรือไม่

If lstDevices.ListCount > 0 Then
lstDevices.Selected(0) = True 'ถ้ามีก็ OKey เตรียมตัวคลิก start ได้เรยยย มัน enable แล้ว
Else
cmdStart.Enabled = False 'ถ้าไม่มีก็จบ(ห่)
lstDevices.AddItem ("No Device Available")
End If

cmdStop.Enabled = False
cmdSave.Enabled = False
End Sub

Private Sub LoadDeviceList() 'ส่วนนี้ใช้หาว่ามีการติดตั้ง webcam อยู่หรือไม่
Dim strName As String
Dim strVer As String
Dim iReturn As Boolean
Dim x As Long
x = 0
strName = Space(100)
strVer = Space(100)
Do
iReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100) ' โหลด Driver และ version
If iReturn Then lstDevices.AddItem Trim$(strName) ' โหลดชื่อ Device ที่ detect ได้ลงใน lstDevices
x = x + 1
Loop Until iReturn = False
End Sub

Private Sub cmdStart_Click()
iDevice = lstDevices.ListIndex 'โหลด Device(Driver)จาก list.....
OpenPreviewWindow 'ไปดูการทำงานที่โปรแกรมย่อย OpenPreviewWindow
End Sub

Private Sub OpenPreviewWindow() 'เมื่อทุกอย่างพร้อมแล้วก็ลุยเรยยยยย

hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.hwnd, 0) 'ให้รับภาพผ่านทาง picture box

If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then 'ติดต่อ webcam

SendMessage hHwnd, WM_CAP_SET_SCALE, True, 0 'ตั้งค่า scale ให้เป็น False เพราะขนาดภาพจริงจะถูก fix ไว้ ถ้าเป็น True ขนาดภาพจะขยายเท่ากับ window preview

SendMessage hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0 'ตั้งค่า preview rate

SendMessage hHwnd, WM_CAP_SET_PREVIEW, True, 0 'ให้เริ่มรับภาพ(True) จาก webcam

cmdSave.Enabled = True
cmdStop.Enabled = True
cmdStart.Enabled = False
Else

DestroyWindow hHwnd 'ถ้ามีข้อผิดพลาดก็ให้ออกจาก window(แบบถูกที่ถูกทาง)

cmdSave.Enabled = False
End If
End Sub

Private Sub ClosePreviewWindow()

SendMessage hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0 'ยกเลิกการติดต่อโดยใช้ message WM_CAP_DRIVER_DISCONNECT ถ้าไม่ออกวิธีนี้ error แน่นอน ลองดูสิ

DestroyWindow hHwnd 'ออกจาก window
End Sub

Private Sub cmdStop_Click()
ClosePreviewWindow
cmdStop.Enabled = False
cmdSave.Enabled = False
cmdStart.Enabled = True
End Sub

หวังว่าจะเอาไปใช้ประโยชน์นทางที่ถูกที่ควรนะครับ Embarassed Embarassed
กลับไปข้างบน
En_tee
บุคคลทั่วไป





ตอบตอบ: พฤ. กย. 08, 2005 11:49 pm    ชื่อกระทู้: ผมไม่ได้หายจ้อยนะพี่ ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ช่วงที่หายไปผมทำโรบอทหุ่นยนต์อยู่ผมเลยไม่ได้เข้ามาเช็คอะไรเลย code ที่พี่ให้มาก็ลองแค่คืนนั้นเองครับมันมีงานหุ่นเข้ามาครับต้องขอโทษพี่ด้วยที่หายไปไม่ได้ตอบความคืบหน้าให้กับพี่ มันยุ่งจริงๆครับขอโทษทีจริงๆ ข้อมูลใหม่ที่พี่ให้ผมเยี่ยมเลยครับต้องขอบคุณมี่พี่ให้ผมอีกแล้ว ขอบคุณมากๆครับ
กลับไปข้างบน
เด็กดื้อ
บุคคลทั่วไป





ตอบตอบ: จ. กย. 12, 2005 6:53 pm    ชื่อกระทู้: ภาพที่ได้จัดถูกจัดเก็บไว้ที่ใหน ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

บอดพี่นี่แหล่งความรู้ของผมเลย ผมกำลังทำเรื่องกล้องพอดี แต่อยากทราบว่าภาพจะถูกจัดเก็บไว้ที่ใหนรึครับ
กลับไปข้างบน
บุคคลทั่วไป






ตอบตอบ: อ. กย. 13, 2005 9:52 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ขอบคุณมากครับ พี่แมงเม่า

ไม่ทราบว่าพี่มี เมล์ ป่าวครับ
ขอหน่อยได้ไหมครับ ตอนนี้กำลังทำโปรเจคอยู่ครับ รบกวนด้วยนะครับ
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: อ. กย. 13, 2005 11:10 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ตอนนี้ผมทำโปรแกรมกับ webcam ชื่อว่า motion detection การทำงานแบบนี้ครับ
1. ใช้ timmer จับภาพทุก 1/20 วินาที่(5 frames/sec)
2. นำภาพที่ได้มาหาจุดสี RGB
3. เอาจุดสีที่อ่านได้มาลบกัน แล้วดูว่าอยู่ในช่วงที่กำหนดไว้หรือไม่ เช่น R0=10, R1=20 ดังนั้นผลต่าก็เท่ากับ 10 ถ้าเรากำหนดว่าให้ capture ภาพที่มีจุดสีต่างกัน 5 จุดมันก็จะ capture ภาพนั้นไว้
4. ทำไปเพื่ออะไร
4.1 สมมุติว่าเราเปิด webcam ทิ้งไว้กล้องจะมีการตรวจสอบทุก ๆ 1/20 วินาทีว่าภาพโหลดมามีการเปลี่ยนแปลงของจุดสี(pixel)หรือไม่ภายใต้เงื่อนไข 5 pixcelหรือไม่
สมมุติว่าขณะนั้นมีหนูวิ่งผ่านกล้องเป็นเวลา 5 วินาที กล้องจะนำภาพมาโหลดไว้ที่ picture box พร้อมทั้งเอาแต่จุดสีของแต่ละภาพมาลบกันตามลำดับจนครับ 25 ภาพ(5sec*5ภาพ/sec)
4.2 ถ้าภาพที่ 1-4 แทบจะไม่ต่างกันเลย(ต่างกันน้อยกว่า 5 pixel) มันก็จะไม่ capture ภาพที่ 4 ไว้แต่มันจะต่างกันในภาพที่ 5 ดังนั้น ถ้าหนูวิ่งผ่านกล้องเป็นเวลา5วินาทีโดยไม่เปลี่ยนท่างทาง มันจะถูกถ่ายภาพเก็บไว้ 25/5 = 5 ภาพภายใต้เงื่อนไขการเปลี่ยนแปลง 5 pixel

โปรแกรมตัวนี้ผมทำไปประกวดที่ http://www.thaiware.com/ ลองดาวน์โหลดไปเล่นดูนะครับ ส่วน code นั้นง่าย ๆ มาก ๆครับต่อยอดจาก source ที่ผมเคย post ทิ้งไว้




http://www.geocities.com/ezy_math/Package.zip โปรแกรมตัวนี้ผมให้มันจับภาพเมื่อมีเปอร์เซนต์การเคลื่อนไหว(PCDR: pixel comparison, differrnt ratio;ตั้งชื่อเอง อิอิ)มากว่า 3 % และเก็บภาพไว้ในโฟลเดอร์ img
กลับไปข้างบน
แมงเม่า
บุคคลทั่วไป





ตอบตอบ: อ. กย. 13, 2005 11:16 am    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

อืมมมมมม link ผิดครับ
http://www.geocities.com/ezy_math/Package1.zip
กลับไปข้างบน
บุคคลทั่วไป






ตอบตอบ: อ. กย. 13, 2005 12:03 pm    ชื่อกระทู้: ตอบกระทู้ด้วยเครื่องหมายคำพูด(quote) แก้ไข/ลบคำตอบนี้ ลบคำตอบนี้ แสดง IP

ลองไปทำดูแล้วครับ เยี่ยมเลยครับ Very Happy Very Happy Very Happy Very Happy Very Happy

ผมใช้กล้องเวปแคม ของ ลอจิเทค ครับ
ภาพออกมาทำไมไม่ชัดเหมือนตอนใช้โปรแกรมที่แถมมาล่ะครับ
อ้อ... แล้วทำไมภาพมันกลับซ้ายเป็นขวาล่ะครับ อิอิอิ แถมดูเหมืือนภาพมันซูมๆๆ ด้วย :p
เราจะกำหนดขนาดของภาพได้รึป่าวครับ แล้วเวลากดเซฟ ภาพมันจะไปอยู่ที่ไหนเหรอครับ ???

ถามอีกนิดนึงครับ !!!
คือถ้าผมเอากล้องเวปแคมไปต่อบนฐานของมอเตอร์ (สเตปมอเตอร์) แล้วผมจะเพิ่มฟังก์ชั่น
การหมุนของกล้องเข้ามา สามารถทำได้ใช่ไหมครับ !!!
กะว่าจะสั่งงานผ่านพอร์ตปรินเตอร์ แต่ปัญหาคือสาย usb ของกล้องมันสั้นนิดเดียวเองครับ เราจะต่อสายให้ยาวได้ไหมครับ แล้วยาวได้สูงสุดเท่าไหร่ครับ

ยังไงรบกวนพี่แมงเม่า และพี่ๆทุกคนด้วยนะครับ :p


----------------------------------------------------------------------------------------

>>> http://www.geocities.com/ezy_math/Package.zip <<<
โหลดไม่ได้อ่ะครับพี่ -__-"
กลับไปข้างบน <