VB6 หรือ VB.NET สำหรับการเขียนติดต่อกับ Fingerprint
VB6 มันตกไปแล้วครับ โปรแกรมที่เขียนด้วย VB6 ที่พัฒนาใหม่ ๆ มีน้อยมากครับ ส่วนใหญ่ก็ .NET นี่แหละครับ
.NET ในเมืองไทยคนเขียนเป็นเยอะน่ะครับ
Date :
2011-08-25 22:16:48
By :
webmaster
ก็เขียน C# แล้วไป Convert เป็น Vb.NET เลยครับ นิดเดียวเองไม่ใช่หรอครับ User Interface
http://www.developerfusion.com/tools/convert/csharp-to-vb/
Date :
2011-08-26 00:44:32
By :
13crowns
ขอบคุณทุกท่านครับ ตัดสินใจว่าจะใช้ C# ครับ พอดีไปค้น ๆ เจอตัวอย่างมา ทำไว้ดี เดวลองศึกษาดู
Date :
2011-08-26 12:53:33
By :
bankjetdo
เจอปัญหาครับ นี้คือโค๊ด Form1.cs นะครับ ของตัวเดโมรันได้ปกติ
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Data.OleDb;
using System.Collections;
namespace Biokey01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private System.Timers.Timer showpicture = new System.Timers.Timer();
bool isConnected;
int FMatchType;
int fpcHandle;
int time = 0;
int i = 3;
object VerTemplate;
object RegTemplate;
string RegTemplateStr;
string izkfpver;
private void button2_Click(object sender, EventArgs e)
{
if (rdb10.Checked)
{
axZKFPEngX1.FPEngineVersion = "10";
}
else
axZKFPEngX1.FPEngineVersion = "9";
izkfpver = axZKFPEngX1.FPEngineVersion;
axZKFPEngX1.SensorIndex = 0;
if (axZKFPEngX1.InitEngine() == 0)
{
fpcHandle = axZKFPEngX1.CreateFPCacheDB();
statusBar1.Panels[1].Text = "Sensor Connected!";
txtb1.Text = axZKFPEngX1.SensorCount.ToString();
txtb2.Text = axZKFPEngX1.SensorIndex.ToString();
txtb3.Text = axZKFPEngX1.ImageWidth.ToString();
txtb4.Text = axZKFPEngX1.ImageHeight.ToString();
txtb5.Text = axZKFPEngX1.SensorSN;
FMatchType = 0;
isConnected = true;
btnCloseSensor.Enabled = true;
//groupBox5.Enabled = true;
//groupBox3.Enabled = true;
}
else
{
txtb1.Text = "";
txtb2.Text = "";
txtb3.Text = "";
txtb4.Text = "";
txtb5.Text = "";
isConnected = false;
btnCloseSensor.Enabled = false;
}
}
private void btnCloseSensor_Click(object sender, EventArgs e)
{
axZKFPEngX1.EndEngine();
//btnCloseSensor.Enabled = false;
//groupBox5.Enabled = false;
//groupBox3.Enabled = false;
}
private void btnbrowse_Click(object sender, EventArgs e) //save FP image
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
Cursor = Cursors.WaitCursor;
saveFileDialog1.FileName = "template";
saveFileDialog1.Filter = "";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if (radioButton1.Checked)
axZKFPEngX1.SaveBitmap(saveFileDialog1.FileName + ".bmp");
else
axZKFPEngX1.SaveJPG(saveFileDialog1.FileName + ".jpg");
MessageBox.Show("Save Success", "Warn", MessageBoxButtons.OK);
Cursor = Cursors.Default;
}
else
{
Cursor = Cursors.Default;
return;
}
}
private void button2_Click_1(object sender, EventArgs e)
{
if (isConnected)
{
if (axZKFPEngX1.IsRegister)
{
axZKFPEngX1.CancelEnroll();
}
axZKFPEngX1.EnrollCount = 3;
axZKFPEngX1.BeginEnroll();
time = 1;
}
else
MessageBox.Show("No sensor connected", "error");
}
private void btnVerify_Click(object sender, EventArgs e)
{
if (txtbThreshold1.Text == "" || txtbThrehold2.Text == "")
{
MessageBox.Show("The 1:1Threhold and the 1:N Threhold can not be null!", "error!");
return;
}
if (axZKFPEngX1.IsRegister)
{
axZKFPEngX1.CancelEnroll();
}
if (radioButton3.Checked)
{
FMatchType = 1;
}
else
{
FMatchType = 2;
}
axZKFPEngX1.BeginCapture();
}
private void axZKFPEngX1_OnCapture(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnCaptureEvent e)
{
VerTemplate = e.aTemplate;
byte[] vertemplat = (byte[])VerTemplate;
int score =9;
int processedFPNumber = 1;
int ID;
string tempstr;
string Template = axZKFPEngX1.GetTemplateAsString();
if (e.actionResult)
{
bool ddd = false;
string temp;
int fingerid = 0;
if (txtfpID.Text == "")
fingerid = 0;
else
fingerid = Convert.ToInt32(txtfpID.Text);
axZKFPEngX1.OneToOneThreshold = Convert.ToInt32(txtbThreshold1.Text);
axZKFPEngX1.Threshold = Convert.ToInt32(txtbThrehold2.Text);
temp = axZKFPEngX1.GetTemplateAsString();
if (FMatchType == 1)
{
try
{
FileStream stream1 = new FileStream(txtPass.Text.Trim() + "/" + txtfpID.Text.Trim() + ".dat", FileMode.OpenOrCreate, FileAccess.Read);
byte[] tmpbyte = File.ReadAllBytes(txtPass.Text.Trim() + "/" + txtfpID.Text.Trim() + ".dat");
object fuck = tmpbyte;
if (axZKFPEngX1.VerFinger(ref fuck, vertemplat, false, ref ddd)) //ำกถศษ๑ำอ
//if (axZKFPEngX1.VerFingerFromStr(ref Template, temp, false, ref ddd))
{
tempstr = "Verify 1:1 Success! FingerNum is " + fingerid.ToString();
statusBar1.Panels[2].Text = tempstr;
}
else
{
statusBar1.Panels[2].Text = "1:1 Verfy fail!";
}
Template = "";
}
catch
{
statusBar1.Panels[2].Text = "no such a number template!";
}
}
if (FMatchType == 2)
{
ID = axZKFPEngX1.IdentificationInFPCacheDB(fpcHandle, VerTemplate, ref score, ref processedFPNumber);
if (ID > 0)
{
tempstr = "1:N Verify success! fingerID:" + ID.ToString() + " processedFPNumber is:" + processedFPNumber.ToString();
statusBar1.Panels[2].Text = tempstr;
}
else
statusBar1.Panels[2].Text = "1:N Verify fail!";
}
}
}
private void axZKFPEngX1_OnEnroll(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnEnrollEvent e)
{
int i = 0;
if (e.actionResult)
{
RegTemplate = e.aTemplate;
byte[] tmp = new byte[0];
tmp =(byte[]) e.aTemplate;
string sse;
axZKFPEngX1.AddRegTemplateToFPCacheDB(fpcHandle, Convert.ToInt32(txtbIndex.Text), e.aTemplate);
saveFileDialog1.Filter = "*.dat|*.dat";
saveFileDialog1.FileName ="./template data/"+ txtbIndex.Text.Trim()+".dat";
File.WriteAllBytes(saveFileDialog1.FileName, tmp);
}
}
private void axZKFPEngX1_OnImageReceived(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnImageReceivedEvent e)
{
Graphics g = pictureBox1.CreateGraphics();
int dc = g.GetHdc().ToInt32();
axZKFPEngX1.PrintImageAt(dc, 0, 0, pictureBox1.Width, pictureBox1.Height);
showpicture.Interval = 100;
showpicture.Start();
}
private void axZKFPEngX1_OnFeatureInfo(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnFeatureInfoEvent e)
{
string strTemp="FP Quality:";
if (e.aQuality == 0)
{
strTemp = strTemp + "Qualified";
}
else
{
if (e.aQuality == 1)
{
strTemp = strTemp + "Feature points not enough";
}
else
strTemp = strTemp + "Unqualified";
}
if (axZKFPEngX1.IsRegister)
if (axZKFPEngX1.EnrollIndex != 1)
//strTemp := strTemp + #13+ 'Register status: still press finger ' + IntToStr(ZKFPEngX1.EnrollIndex-1) + ' time!';
strTemp = strTemp + "\r\n finger enroll:press finger " + (axZKFPEngX1.EnrollIndex - 1).ToString() + " times again";
else
strTemp = strTemp + "\r\n finger enroll: success enroll";
statusBar1.Panels[2].Text = strTemp;
}
private void Form1_Load(object sender, EventArgs e)
{
showpicture.Elapsed += new System.Timers.ElapsedEventHandler(showpicture_Elapsed);
}
void showpicture_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
Graphics g = pictureBox1.CreateGraphics();
int dc = g.GetHdc().ToInt32();
axZKFPEngX1.PrintImageAt(dc, 0, 0, pictureBox1.Width, pictureBox1.Height);
}
catch
{
}
}
~Form1()
{
showpicture.Elapsed -= new System.Timers.ElapsedEventHandler(showpicture_Elapsed);
}
private void btnselect_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.dat|*.dat";
openFileDialog1.FileName = "./";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filepaths = Directory.GetCurrentDirectory();
txtPass.Text = filepaths;
}
}
private void button1_Click(object sender, EventArgs e)
{
string path = txtPass.Text.Trim();
string[] files = Directory.GetFiles("./template data", "*.dat*");
if (files.Length != 0)
{
foreach (string filename in files)
{
FileInfo inf = new FileInfo(filename);
string name = inf.Name;
int ddd = name.IndexOf('.');
string fingerid= name.Remove(ddd);
FileStream stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read);
byte[] buffer = File.ReadAllBytes(filename);
axZKFPEngX1.AddRegTemplateToFPCacheDB(fpcHandle, Convert.ToInt32(fingerid), buffer);
}
}
}
}
}
แต่พอผมสร้าง Form2.cs แล้วจะลอง connect กับตัวแสกนลายนิ้วมือง่ายๆ ด้วยโค๊ดนี้
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Data.OleDb;
using System.Collections;
namespace Biokey01
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (axZKFPEngX1.InitEngine() == 0)
{ MessageBox.Show("เชื่อมต่อได้","เริ่มระบบ",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}else {
MessageBox.Show("ไม่สามารถเชื่อมต่อได้","เริ่มระบบ",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}
}
}
}
ผมลงรันแล้ว ไม่ผ่าน มันบอกว่ผมไม่มีคลาส axZKFPEngX1 พิมพ์แบบ auto complete มันก็ไม่ขึ้น (vs 2008) ทั้ง ๆ ที่ผม Add Reference ไฟล์ไปแล้วนะครับ ทั้ง AxInterop.ZKFPEngXControl.dll กับ Interop.ZKFPEngXControl.dll
ผมยังขาดอะไรอีกหรอครับ
แนะนำด้วยครับ ขอบคุณครับ
ประวัติการแก้ไข 2011-08-26 16:34:32
Date :
2011-08-26 16:32:58
By :
bankjetdo
Hi, please help me, I'm russian, and I bough the fingerprint scanner, that works with this controller, but the code is not working, because I dont have the Interop.ZKFPEngXControl.dll files...
please share the files, thanks, Alexei V.
Date :
2012-03-23 01:25:01
By :
Alexei
ขอตัวโปรแกรม มาศึกษาหน่อยครับ ที่ [email protected]
ขอบคุณครับ
Date :
2013-04-24 09:40:11
By :
tab
จริง ๆ แล้วจากประสพการณ์ นะครับ เมื่อเปรียบเทียบ VB6 กับ ASP.Net C#
ข้อดีของ VB6 เมื่อเทียบกับ ASP.Net C#
1. vb6... Controls มี Events เยอะมาก ให้คุณใช้งานมากกว่า
2. พัฒนาบน Windows Form (Windows App) การใช้งาน Controls ต่าง ๆ ง่ายมาก
3. ออกแบบง่าย จะวาง Controls ไว้ตรงไหนก็ได้ ไม่มีข้อจำกัด แล้วแต่คุณสะดวก
4. ออกรายงาน Report ง่ายมาก มี Crystal Report ที่ Active เวลา Design ไม่ว่าคุณจะ Preview หรือ Design คุณจะเห็นข้อมูลจริงทั้ง
หมดโดยที่ยังไม่ได้รันโปรแกรม
5.จากข้อ 4 การสร้างรายงาน คุณสามรถสร้างโดยตรงจาก Database เลย ไม่จำเป็นต้องผ่าน Dataset หรือ อะไรทั้งสิ้น
6.การเรียกใช้งานตัวโปรแกรมเร็วกว่า เพราะเรียกไฟล์ต่าง ๆ ที่เครื่องเลย ไม่ต้องรอ Download
7.สามารถเรียกใช้งาน ผ่านระบบแลนได้ดีมาก
8. มีเทคโนโลยีให้เลือกใช้ในการติดต่อกับ Database ที่ง่ายและหลากหลายวิธี เช่น datacontrols, DAO,RDO,ADO,ASP และใช้งานร่วม
กันได้อีกด้วย
9. Source Code สั้นกว่า ดูง่ายกว่า
10. ปัญหาน้อยกว่า การใช้คำสั่งในการ Insert,Update ,Edit,delete ง่ายกว่ามาก
ข้อเสีย ของ VB6
1. ใช้ได้เฉพาะในระบบ Lan หรือ Stand alone เท่านั้น เรียกผ่าน Web ไม่ได้
2. Form มีขนาดจำกัด ไม่สามารถ ขยายไปทางขวา หรือขยายลงล่างได้
3. เวลาจะติดตั้งที่ตัวเครื่อง ต้องทำการ Setup โปรแกรม ทุกเครื่องที่เรียกใช้โปรแกรม ในขณะที่ Web App ไม่ต้องติดตั้ง
คร่าว ๆ นะครับ ถ้าคุณเคยเขียน ASP.Net C# มาแล้ว ...VB6 หมูมาก สำหรับคุณ (จริง ๆ นะ)
ลองพิจารณาดูนะครับ
Date :
2013-04-25 10:24:40
By :
ผ่านมาเห็นแล้วอยากช่วย
No. 7
1 - 10
และ
1 - 3
กระผมก็ให้ ***** 5 ดาวครับ
ขอบคุณครับ
Date :
2013-04-25 10:33:30
By :
ผ่านมา
เรียน คุณผ่านมาเห็นแล้วอยากช่วย
(ผมไม่มีใครเลย)
รบกวนช่วยกระผมหน่อยได้ไหม? (ฝากอีเมล์ไว้ก็ได้ครับ)
ขอบคุณมากครับครับผม
Date :
2013-04-25 10:45:09
By :
ผ่านมา
เรียน คุณผ่านมา
ผมว่าคุณผ่านมา เท่าที่สังเกตจากหลาย ๆ กระทู้ ถ้าเป็นคนคนเดียวกันจริง ๆ ผมว่าคุณเป็นคนที่เก่งมากนะครับ
จะให้ผมช่วยอะไรหรอครับ .?
มิบังอาจครับ แต่ถ้าจะให้ช่วยจริง ๆ ถ้าผมมีความรู้ผมยินดีที่จะช่วย จนหมดใส้หมดพุง ถ้าไม่รู้ก็จะไปถามเพื่อน ๆ ไปค้นหามาให้...ครับ
เพราะผมถือว่า การให้ความรู้เป็นวิทยาทานอย่างหนึ่ง และการที่ผมบอกเขาไป ความรู้ของผมมิได้ลดน้อยลงไป แต่กลับจะเพิ่มพูนมาก
ขึ้น จากการได้คำถามใหม่ ๆ ความรู้ใหม่ ๆ ครับ และการค้นคว้าไปพบกับสิ่งใหม่ และเข้าใจความรู้สึกของคนที่ไม่รู้จริง ๆ ครับ
ด้วยความยินดีครับ
ผ่านมาเห็นแล้วอยากช่วย
Date :
2013-04-25 17:45:29
By :
ผ่านมาเห็นแล้วอยากช่วย
เรียน คุณผ่านมาแล้วอยากช่วย
www.goodluck.smpksme.com
User Name : Dang
Password : 2516
เข้าหน้าจอ กำหนดค่าเริ่มต้น --> สำหรับผู้ดูแลระบบ --> ข้อมูลกลุ่มผู้ใช้งาน
มันมีอะไรซ่อนอยู่ตั้งมากมาย
***** ผมซ่อนบางอย่างเอาไว้ที่หน้าจอ ป้อนข้อมูลประจำงวด
***** ผมซ่อนการดึงข้อมูล >= 500,000 ระเบียน ในครั้งเดียว
ขอบคุณในความกรุณาครับผม
[email protected]
ปล. ทุกอย่างมันมีที่มาและที่ไป แต่จุดหมายปลายทาง กระผมไม่อาจจะล่วงรู้ได้ครับ
Date :
2013-04-25 19:29:56
By :
ผ่านมา
VB6 == PageFrame/Iframe แต่ในบางกรณีกระผมจำเป็นต้องใช้
Date :
2013-04-25 19:38:28
By :
ผ่านมา
เรียน คุณผ่านมาครับ
ใส่ User Name และ Password แล้ว เข้าไม่ได้ครับ มันเด้งกลับออกมา ไม่ทราบว่า เป็นเพราะอะไรครับ
ขอบพระคุณอีกครั้งครับ ที่ได้กรุณาให้เกียรติ
Date :
2013-04-25 20:07:12
By :
ผ่านมาเห็นแล้วอยากช่วย
IE >=9
FireFox >= 400
Chrome >= 1000
Dang
2516
Click OK
ปล. Dang & 2516 มันมีที่มาและที่ไป สมัยนั้นผมเคยไปแอบหลงรักเด็กคนหนึ่ง แต่เขาไม่รู้ แต่ผมเป็นได้แค่ ชู้ทางใจ
Date :
2013-04-25 21:25:24
By :
ผ่านมา
แต่ทุกวันนี้ ผมรู้ว่าผมรักเขามาก แต่ผมมีภรรยาแล้ว
และก็ยังติดต่อกันอยู่ แบบชู้ทางใจ (ปัจจุบัน เธอก็ยังไม่ได้แต่งงาน)
ผมไม่มีอะไรเกินเลย กับ รักแรกของผม จริงฯ ครับ
รักแรก และ แรกรัก
แต่และที่สำคัญ ผมมีภรรยาแล้ว นี่คือหน้าที่ที่ผมต้องปฏิบัติกับภรรยาของผม
(เธอไม่ได้ผิดอะไร)
มันเป็นไปไม่ได้ ที่ผมจะหวลกลับไปหาอดีต บนโลกของความจริง
Date :
2013-04-25 21:42:34
By :
ผ่านมา
เนื้อเพลง ตลอดกาล
รัก แรก แทรกความหวานฉ้ำล้ำ ทั้งมวล เหมือนชวน ให้ใจต้องเสน่หา เหมือนดั่ง สายน้ำชื่นฉ่ำเย็น ไหลผ่านมา สองอุรา พาให้ฝันใฝ่
รักมั่น ไม่มีวันเปลี่ยนผัน หัวใจ ไม่ใฝ่ มีใจเพียงเพื่อเธอ แม้โลก หยุดหมุน รักก็ยังมั่นเสมอ ฟ้ามีดาว ฉันมีเธอ ตลอดกาล ขอให้รักเรายังอยู่คู่ฟ้า ไม่มีวันร้างรา พลัดพรากจากไกล ให้ฉันให้เธอรักมั่นจริงใจ ตลอดไปนานเท่านาน ตลอดกาล ขอให้รักเราเคียงอยู่คู่ฟ้า ไม่มีวันร้างรา พลัดพรากจากไกล ให้ฉันให้เธอรักมั่นจริงใจ ตลอดไปนานเท่านาน ตลอดกาล
Date :
2013-04-25 21:48:29
By :
ผ่านมา
อ๋อ...ครับ พอดี IE ของผม 7 เท่านั้น
ผมเห็นใจ และเข้าใจคุณ "ผ่านมา" นะครับ และแอบอิจฉาเบา ๆ กับความเก่ง ความสามารถ ของคุณ....
ยินดีกับมิตรภาพ ยินดีที่ได้กรุณาให้เกียรติ และยินดีที่ได้มีโอกาสรู้จักกับคนเก่ง ๆ เช่นนี้ ...
เพื่อเป็นการขอบพระคุณในมิตรภาพ ผมก็ขอฝาก Link นี้ให้คุณ "ผ่านมา" นะครับ
http://www.youtube.com/watch?v=y9hJ25UcBeQ
http://www.youtube.com/watch?v=1pqFq5a3uYw
http://www.youtube.com/watch?v=N-701F8jw_s
ขออนุญาต เจ้าของ Web ด้วยนะครับ วันนี้
แหม๋...ถ้าอยู่ใกล้ ๆ กัน จะชวนชนแก้ว ซะนี่
ผ่านมาเห็นแล้วอยากช่วย
Date :
2013-04-25 22:17:31
By :
ผ่านมาเห็นแล้วอยากช่วย
Load balance : Server 04