Friday, November 7, 2008

การทำ login SSH อัตโนมัติ โดยไม่ต้องใส่ Password

การทำ login SSH อัตโนมัติ

ผมเป็นคนหนึ่งที่ใช้ SSH อยู่เป็นประจำทุกครั้งที่ใช้ internet เลยก็ว่าได้และเกือยทุกครั้งต้องมานั้ง login เพื่อเข้าใช้งานมันน่าเบื่อ เสียเวลา และบางทีเราต้อง login หลายๆเครื่องยิ่งเสียเวลา บทความต่อไปนี้ผมจะพูดถึงวิธีการที่ทำให้เราสามารถ login SSH อัตโนมัติ จะทำให้เราประหยังเวลามากขึ้นทีเดียวครับ

ในทีนี้ผมจะใช้ Client เป็น WindowsXP ส่วน SSH Server นั้น Run อยู่บน Windows 2003 X64 นะครับ ไว้โอกาศหน้าผมจะนำเสนอเป็น linux หรือ unix ค่อยว่ากันอีกทีครับ

ก่อนอื่นเลยสิ่งที่เราต้องมีเพื่อใช้งานคือ

  1. Putty มันคือ SSH client นั่นเองครับ ผมคิดว่าคนที่ใช้ SSH เกือบร้อยเปอเซ็นรู้จักมันดีครับ
  2. Pageant มันคือเครื่องมือที่จะช่วยให้เราทำการ login SSH แบบอัตโนมัตินั่นเองแหละครับหรือเรียกให้ดูดีหน่อยก็ SSH authentication agent
  3. PuTTYgen มันคือเครื่องเมือในการสร้าง public key และ private key เพื่อใช้ในการ นั่นเองครับ เรียกชื่อฝรั่งว่า generation utility

เครื่องเมือเหล่านี้หา Download ได้ฟรีครับไม่ต้องเสียเงิน http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

ตอนนี้เราก็มีเครื่องเมือครบแล้ว เรามาเริ่มกันเลย

ขั้นตอนแรกเลยสิ่งที่ต้องทำคือการสร้าง public key เพื่อนนำไปวางไว้ที่ server และprivate key เอามาใช้งาน กับ client ครับ การสร้าง key เริ่มต้นด้วยการ เปิดโปรแกรมที่เรา download มาคือ PuTTYgen จะได้หน้าตาดังรู้ป

จากนั้นกด Generate ครั้บ แล้วเลื่อ mouse ไปมาเพื่อทำการสุ่มค่า ออกมาดังรูป

ภายหลังจักนั้นเราก้จะได้ออกมาหน้าตาอย่างงี้ครับ

ถึงตอนนี้แล้วให้เราใส่

comment ของเราเลยครับเพื่อช่วยจำว่ามันคืออะไร จะใส่ไม่ใส่ก็ได้แล้วแต่

ส่วน key passphrase นั้นจะใส่ก็ได้ครับ แต่ในที่นี้ผมไม่ใส่เพราะถ้าใส่มันก็จะถามเราเวลาเรา load ซึ่งผมไม่อยากจะเสียเวลาตรงนั้นอีก

จากนั้นให้ทำการ Save key ไว้ในเครื่องครับ ve public

ในนี้ผมใช้ชื่อ publickey-web2

จากนั้นก็ Save private key มันจะขึ้นมาเตือนว่าเรายังไม่ได้ใส่ key passphrase ให้ตอบ ok ไปเลยครับแล้วก็ ใส่ชื่อ ไฟลืในที่นี้ผมใส่ชื่อเป็น private-web2.ppk

จากนั้นให้ทำการ upload file public key (ในที่นี้ของผมเป็น publickey-web2) ไปยัง server ครับ

แล้วหลังจากนั้นเราก้ไป config ที่ server ซึ่งในที่นี้แต่ละ SSH Server จะมีวิธีการ config ไม่เหมือนกัน แต่หลักการทำงานเหมือนกันครับ ในที่นี้ผมเสนอคือ Bitvise WinSSHD ที่ run อยู่บน windows 2003 x64 ครับ ผมขอข้ามขั้นตอนการ Set user ไปนะครับขอเป้นขั้นตอนการใส่ public key เลยนะครับ

ขึ้นตอนการใส่ public key นั้น หลังจากที่เรา upload file public key ไปแล้ว ให้ ไปที่ หน้า Account ของเราที่ใช้งาน จากนั้นคลิ๊กที่ public key แล้วเลือก import จากนั้นเลือกไฟลืที่เราทาร upload ขึ้นไปครับ กด close จากนั้นให้ทำการ password authentication เป็น disable เพื่อที่เราจะไม่ได้ใส่ password อีกเราจะใช้ผ่าน key แทนจะได้ค่าดังรูป

หลังจากนั้น ก็ทำการ restart service ของ SSH Server ครับ

ทีนี้มาถึงขั้นตอนการ config ที่ฝั่ง client กันบ้างแล้วครับ

ให้เราทำการเปิด pageant.exe ขึ้นมา แล้วทำการ add key แล้วเลือก private key save ไว้ในเครื่องของครับ

หลังจากที่ add key แล้วก็ปิดไปได้ครับ แต่โปรแกรมมันจะยังคง run อยู่ จะขึ้นเป็น icon เล็กๆด้านขวามือของ task bar ครับ

ขึ้นตอนการ config ก็มีแค่นี้ครับง่ายมากใช่ไหมละครับ หลังจากนั้นเราก็จะมา config putty กันเพื่อนให้ทำการ login อัตโนมัติ

ก่อนอื่นเลยเปิด putty ขึ้นมาแล้วเข้าไปที่ Connection -àdata แล้วทำการกรอก Username ที่ใช้ login ตรง auto-login ตามรูปครับ

หลังจากนั้นไปที่ SSHàAuth เพื่อทำการเลือก ไฟล์ private key ซึ่งก็คือ ไฟล์เดียวกับที่เลือกใน pageant นั่งเองครับ

ดังรูป

จากนั้นแล้วให้กลับไปยัง session เพื่อใส่ ip หรือ domain name ของ server จากนั้นก้ใส่ saved Sessions แล้วทำการกด save เพื่อบันทึกค่า config ต่างๆของเราไว้เพื่อเรียกใช้คราวหน้าครับ

ส่วนในเรื่องการ config putty อื่นๆนั้นก้ตามที่ต้องการใช้งานครับ ไม่ว่าจะเป็น tunnels เพื่อทำการ Port Forwarding อันนี้ก็แล้วแต่จะทำกันครับ จะไม่ขอพูดในที่นี้

เท่านั้นก็เสร้จแล้ว ลอง กด open ดูครับจะเห้นว่าเราไม่ต้องใส่ user name กับ password อีกต่อไปแล้ว มันจะทำการ login อัตโนมัติให้เลยครับ

อืมแล้วถ้าเราจะทำการ ให้มัน login ทุกครั้งที่เปิดเครื่องทำไง???

เรื่องนี้ง่ายมากครับ

ก่อนอื่นเลย ทำการ create shortcut ของ pageant จากนั้นกด คลิ๊กขวาที่ shortcut แล้วเลือก Properties เลือก Tab Shortcut ไปที่ช่อง target จากนั้น ใส่ path ของ private key ลงไปต่อท่าย เช่น

"C:\Documents and Settings\username\Desktop\pageant.exe" "C:\Documents and Settings\ username \Desktop\privatekey_web2.ppk"

จากนั้น เปิด notepad ขึ้นมาแล้วพิมพ์ ตามนี้ครับ

C:\Documents and Settings\ username\Desktop\pageant.lnk

C:\Documents and Settings\ username\Desktop\putty.exe -load "web2"

หลังจากนั้น Save เป็น นามสกุล .bat เช่น puttyAutoLogin.bat จากนั้นนำไปวางไว้ที่

C:\Documents and Settings\ username \Start Menu\Programs

แค่นี้ก็เสร้จแล้วครับ ทีนี้เวลาที่เรา Login เข้า windows putty จะทำการ login อัตโนมัติหรือหากจะให้ login เข้าทุกครั้งตั้งแต่เปิดเครื่องเลยเราอาจจะต้องทำการสร้าง service ขึ้นมา ซึ่งวิธีนี้ผมจะนำเสนอในภายหน้านนะครับ

วันนี้เอาไว้แค่นี้ก่อนนะครับอาจจะไม่ละเอียดนักแต่ก็พอเป็นแนวทางได้

AutoCAD.NET: แปลงตัวเลขเป็นตัวอักษร หรือที่เรียกว่า Number To Words

AutoCAD.NET: แปลงตัวเลขเป็นตัวอักษร หรือที่เรียกว่า Number To Words

แปลงตัวเลขเป็นตัวอักษร หรือที่เรียกว่า Number To Words

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

เวลาเราเช็คเงินบนมือถือของเราครับ

มาดู Code กันเลยดีกว่าว่าเป็นยังไงในที่นี้ผมเขียนทั้งที่เป็นภาษาอังกฤษและที่เป็นภาษาไทย

ในภาษาอังกฤษนั้นเวลาอ่านตัวเลข จะมี one ten hundred thousand million billion และเลขที่ตั้งแต่ 11-19 ที่จะเป็น Eleven, Twelve, Thirteen ... ไปเรื่อยๆ และหลักสิบก็จะเป็น

Twenty , Thirty ไปเรื่อยๆเช่นกัน โดยใน ภาษาอังกฤษ นั้นไม่มีคำเรียกหลักหมื่น และหลักแสน เราจะเรียกเป็น ten thousand และ hundred thousand แทนและมักจะใส่ and ก่อนที่จะถึงตัวเลขสุดท้าย

ซึ่งต่างจากภาษาไทยครับ

แต่ภาษาไทยหากลงท้ายด้วยเลขหนึ่งแล้วมักจะใช้คำว่าเอ็ด เช่น 11 เราเรียกว่าสิบเอ็ดไม่ใช่สิบหนึ่งอซึ่งรายละเอียดตรงนี้ขึ้นอยู่กับว่าเราจะใช้แบบใดครับ ซึ่งบางคนก็เรียตัวเลขนี้ว่า 101 หนึ่งร้อยหนึ่ง บางคนก็เรียกว่า ร้อยเอ็ด

และในภาษาไทยหลัก 20-29 นั้นจะเรียกเป็นยี่ หลักการคล้ายๆกับ ภาษาอังกฤษในหลักสิบ

รายละเอียดว่าทำยังไงไปดูกันที่ Code เลย ครับ

public class NumberToWordsConvertor

{

private const int MAX_DIGIT_ARRAY_TH = 6;//สะหรับภาษาไทยแบ่งกันที่หลักล้าน

private const int MAX_DIGIT_ARRAY = 4;//สำหรับภาษาอังกฤษแบ่ที่หลักพัน

private string[] _smallNumbers = new string[] {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};

private string[] _smallNumbersTh = new string[] { "ศูนย์", "หนึ่ง", "สอง", "สาม", "สี่", "ห้า", "หก", "เจ็ด", "แปด", "เก้า"};

private string[] _tens = new string[] { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };

private string[] _scaleNumbers = new string[] { "", "Thousand", "Million", "Billion" };

private string[] _scaleNumbersTh = new string[] { "","สิบ","ร้อย", "พัน", "หมื่น", "แสน" };

//สำหรับแปลงเป็นภาษาอังกฤษ

public string NumberToWords(int number)

{

// หากเป็น 0 ให้ค่าแรกไปเลย

if (number == 0)

return _smallNumbers[0];

int[] digitGroups = new int[MAX_DIGIT_ARRAY];

// ทำให้เป็นพวกทังหมดก่อนครับ

int positive = Math.Abs(number);

for (int i = 0; i < MAX_DIGIT_ARRAY; i++)

{

digitGroups[i] = positive % 1000;

positive /= 1000;

}

string[] groupText = new string[MAX_DIGIT_ARRAY];

for (int i = 0; i < MAX_DIGIT_ARRAY; i++)

groupText[i] = ThreeDigitGroupToWords(digitGroups[i]);

string combined = groupText[0];

bool appendAnd;

appendAnd = (digitGroups[0] > 0) && (digitGroups[0] < 100);

for (int i = 1; i < MAX_DIGIT_ARRAY; i++)

{

if (digitGroups[i] != 0)

{

string prefix = groupText[i] + " " + _scaleNumbers[i];

if (combined.Length != 0)

prefix += appendAnd ? " and " : ", ";

appendAnd = false;

combined = prefix + combined;

}

}

if (number < 0)

combined = "Negative " + combined;

return combined;

}

// สำหรับภาษาไทย

public string NumberToWordsTh(int number) {

string combined = "";

int newnumber = 0;

if (number == 0)

return _smallNumbersTh[0];

int[] digitGroups = new int[MAX_DIGIT_ARRAY_TH];

int positive = Math.Abs(number);

if (positive > 999999)

{

newnumber = positive / 1000000;

positive = positive % 1000000;

}

for (int i = 0; i < MAX_DIGIT_ARRAY_TH; i++)

{

digitGroups[i] = positive % 10;

positive /= 10;

}

string[] groupText = new string[MAX_DIGIT_ARRAY_TH];

for (int i = 0; i < MAX_DIGIT_ARRAY_TH; i++)

{

if (digitGroups[i] > 0)

{

if (digitGroups[i] == 1 && i == 0 && digitGroups[i+1]>0)

{

groupText[i] = "เอ็ด";

}else if ((digitGroups[i] == 2 && i == 1))

{

groupText[i] = "ยี่";

}else if (!(digitGroups[i] == 1 && i == 1)) {

groupText[i] = _smallNumbersTh[digitGroups[i]];

}

}

}

combined += groupText[0];

for (int i = 1; i < MAX_DIGIT_ARRAY_TH; i++)

{

if (digitGroups[i] != 0)

{

string prefix = groupText[i] + _scaleNumbersTh[i];

combined = prefix + combined;

}

}

if (newnumber > 0) {

combined = NumberToWordsTh(newnumber) + "ล้าน" + combined;

}

if (number < 0)

combined = "ลบ " + combined;

return combined;

}

// ตรงนี้ใช้กับ ภาษาอังกฤษอย่างเดียวครับ

private string ThreeDigitGroupToWords(int threeDigits)

{

string groupText = "";

int hundreds = threeDigits / 100;

int tensUnits = threeDigits % 100;

if (hundreds != 0)

{

groupText += _smallNumbers[hundreds] + " Hundred";

if (tensUnits != 0)

groupText += " and ";

}

int tens = tensUnits / 10;

int units = tensUnits % 10;

if (tens >= 2)

{

groupText += _tens[tens];

if (units != 0)

groupText += " " + _smallNumbers[units];

}

else if (tensUnits != 0)

groupText += _smallNumbers[tensUnits];

return groupText;

}

}

หลังจากนั้นเวลาเรียกใช้ก็

int number = 2147483647;

NumberToWordsConvertor convertor = new NumberToWordsConvertor()

String resultEng = convertor.NumberToWords(number).ToUpper();

String resultTh = convertor. NumberToWordsTh (number);

จะได้ผลออกมาดังนี้ครับ

TWO BILLION, ONE HUNDRED AND FORTY SEVEN MILLION, FOUR HUNDRED AND EIGHTY THREE THOUSAND, SIX HUNDRED AND FORTY SEVEN

สองพันหนึ่งร้อยสี่สิบเจ็ดล้านสี่แสนแปดหมื่นสามพันหกร้อยสี่สิบเจ็ด

ในที่นี้เราใช้ตัวแปรประเภท int ใน C# จัมีค่ามากที่สุดคือ 2147483647 ฉนั้นหากตัวเลขมากกว่านี้แล้วจะทำให้ผลออกมาไม่ถูกต้องครับ

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

Friday, October 17, 2008

เกี่ยวกับ blogger

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

ผมเองจบ Computer Engineering เป็นคนชอบคอมพิวเตอร์มาตั้งแต่เด็ก(เริ่มสนใจเมื่อตอนเจ็ดขวบ ปี 1989)

เมื่อสมัยนั้นยังไม่มีแม้แต่จอสีจะใช้เลยครับ ความสนใจพิเศษคือ ทางด้านเทคโนโลยีคอมพิวเตอร์นี่แหละครับแต่มากๆก็เกี่ยกับ Computer Scurity

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

เป็น Programmer แต่ต้องดูแลระบบ Server ด้วยและยังต้องทำแบบไปด้วย ความสามารถ

-Programming Technology

JAVA, EJB, Hibernate, Struts, JSP, AJAX, PHP, C#, ASP.NET, VBA(Excel), JAVA Script, XML, XSD , XNA, HTML and Midlet –

Application Server and Network

LAN, WAN, Wireless network, IIS, Apache, Apache Tomcat, Exchange Server, Microsoft Office SharePoint Server, VPN, Active Directory, LDAP, HTTP, HTTPS, DNS, Kerberos, SSH, Mail Server (SMTP,POP3,IMAP)

- Database Management System

MySQL, SQL Server and Oracle

- Operating system

Windows XP, Vista, Windows 2000, Windows 2003 ,Windows 2003x64 , FreeBSD, MacOS and WindowCE

-Tools

VS.NET, Eclipse, Jbuilder, AutoCAD (2D) , Dreamweaver

เท่าที่นึกออกและใช้งานอยู่ปัจจุบันก็มีเท่านี้ครับถ้านึกออกแล้วไม่อยู่ในรายการวันหน้าจะมาใส่ใหม่นะครับ ตอนนี้ทำงานอยู่ที่บริษัทเอกชนแห่งหนึ่งสำนักงานใหญ่อยู่ที่ US

และช่วงนี้มาเขียน Blog ได้เพราะว่าเริ่มจะว่างบ้างแล้ว ซึ่งเมื่อก่อนทำงานหนักมากๆครับ แบบทำทุกอย่างจริงๆ เพื่ออยู่รอด แต่ช่วงนี้ปัญหาทางด้านการเงินของประเทศนี้ไม่ค่อยจะดีนักเลยทำให้ผมมีเวลาว่างมากขึ้นครับ

เลยคิดว่ามาเขียนความรู้ต่างๆที่เราทำมาให้คนอื่นที่ยังไม่รู้ได้รู้บ้าง หลังจากที่เมื่อก่อนเอาเวลาว่างไปเล่นเกมซะหมด หากใครมีข้อแนะนำเกี่ยวกับ บทความหรือมีข้อสงสัยก็ ส่ง กันเข้ามาได้

Selection Filter เลือก object เฉพาะที่ต้องการ

Selection Filter เลือก object เฉพาะที่ต้องการ

ในบทความขี้ผมจะพูดถึงการเขียนโปรแกรมให้เราสามารถเลือกเฉพาะ ประเภท object ที่ต้องการ อย่าเช่น

เลือกเฉพาะ MText, Text, หรือว่า ฺ Block เพื่อที่ไม่ให้ผู้ใช้งานเลือก object ที่ไม่เกี่ยวข้องกับโปรแกรมที่เราจะเขียน




ใน ตัวอย่างนี้ผมได้เขียนออกมา คือคำสัง SELT เป็นคำสั่งที่ ผู้ใช้จะเลือกได้เฉพาะ Text หรือ Mtext เท่านั้นและหลังจาก
นั้นมันจะแสดงตัวอักษรใน Text หรือ Mtext นั้นออกมาครับดังรูป








มาดูตัวอย่าง Code กันเลยครับ

/*********************************************************/
using System;

using System.Collections;

using System.Collections.Generic;

using System.Reflection;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.ApplicationServices;

using System.IO;

using System.Net;

using System.Net.Sockets;

using System.Management;

using System.Text;

using System.Diagnostics;

 

namespace SelectionFilterObject

{

public class ACADDevepoerCommand

{

[CommandMethod("SELT")]

public void SelectText(){

//เรียกใช้ document ปัจจุบัน

Document doc = Application.DocumentManager.MdiActiveDocument;

Editor ed = doc.Editor;

Database db = HostApplicationServices.WorkingDatabase;

Transaction tr = db.TransactionManager.StartTransaction();

try {

//เลือกเฉพาะ ประเภทของ object ที่เราต้องการ

TypedValue[] filList = { new TypedValue(-4, "<or"), new TypedValue(0, "TEXT"), new TypedValue(0, "MTEXT"), new TypedValue(-4, "or>") };

 

SelectionFilter filter = new SelectionFilter(filList);

PromptSelectionOptions opts = new PromptSelectionOptions();

opts.MessageForAdding = "Select Text Object references: ";

 

//ทำการเลือกเฉพาะที่เราต้องการ

PromptSelectionResult res = ed.GetSelection(opts, filter);

if (res.Status != PromptStatus.OK)

return;

SelectionSet selSet = res.Value;

 

//ราการ ObjectId ของ Object ที่เราเลือก

ObjectId[] idArray = selSet.GetObjectIds();

foreach (ObjectId blkId in idArray)

{

 

Object obj = tr.GetObject(blkId, OpenMode.ForRead);

if (obj is MText)//ตรวจดุว่าเป็น Mtext หรือไม่

{

 

MText m = obj as MText;

ed.WriteMessage("\nContent=" + m.Text);//แสดงค่าออกมา

 

}

else if (obj is DBText)//ตรวจดูว่า เป็น Text หรือไม่

{

DBText dbtext = obj as DBText;

ed.WriteMessage("\nContent=" + dbtext.TextString);//แสดงค่าออกมา

}

}

 

 

}catch (Autodesk.AutoCAD.Runtime.Exception ex) {

ed.WriteMessage(("\nException: " + ex.Message));

}

finally

{

tr.Dispose();

}

 

}

 

 

}

}



/*********************************************************/



จะเห็นได้ว่า ง่ายมากเลยใช่หรือเปล่าครับ ส่วนวิธีนำไปทดสอบ runนั้น ก็ใช้คำสั่งเดิมคือ NETLOAD

ครับ วงันี้เอาไว้แค่นี้ก่อนนะครับ ไว้วันหน้าจะมาใหม่

Monday, October 13, 2008

MidTab 17 สำหรับ AutoCAD 2008

เป็น Application เล็กๆ แต่ได้มากทีเดียวเวลาที่เราเปิด ไฟล์หลายๆไฟล์หร้อมกัน ทำให้สดวกเวลาสลับไฟล์ครับ สามารถ download ได้ที่นี่ครับ http://www.siammsn.com/acad/MdiTab17.zip

Saturday, October 4, 2008

เริ่มต้น .NET กับ AutoCAD

ความเป็นจริงแล้วเราสามารถใช้หลายภาษาในการเขียนโปรแกรมเพื่อใช้งานร่มกันกับ AutoCAD แต่ที่ผมนำเสนอ .NET ในที่นี้ก้เพราะว่า มันง่ายและสดวกในการเขียนและเรียกใช้งาน แถมยัง สามาถเรียกใช้งาน libary ต่างๆที่คนอื่นทำไว้ได้โดยง่าย ไม่ว่าจะเป็น .NET เองหรือว่าเป็น COM ส่วนรายละเอียดอื่นๆนั้นผมไม่ขอพูดถึงเข้าไปหาอ่านได้ที่ AutoCAD Developer Center .NET ในที่นี้เราสามารถเลือกเขียนได้ด้วยภาษาที่เราถนัดนะครับ ไม่ว่าจะเป็น C# VB.NET J# หรือ F# ก็ตามแต่ และยังมีอีกหลายๆภาษาที่ไม่ได้กล่าวถึง แต่ในที่นี้ผมจะนำเสนอเป็น c# ก็เพราะว่าเราผมถนัดที่สุดใน บรรดาภาษาที่ใช้ใน .NET ครับ (ตามจริงถนัด Java ซะมากกว่า) เริ่มเขียน C# กับ AUTO CAD 2008 เหตุผลที่ว่าทำไมต้อง AUTO CAD 2008 ทำไมไม่ ไม่ใช้ 2006 หรือ 2007 มันก็ใช้งานควบคู่กับ c# ได้เหมือนกันนิ ง่ายๆครับ เพราะว่าผมใช้ 2008 ไม่มี version อื่น ก่อนอื่นเลยสิ่งที่เราต้องมีก่อนลงมือเขียนเนียคือ tools ต่างๆที่จะใช้ อย่างแรกเลยคือ VS.NET 2008 SP1 ซึ่งเป็นเครื่องมือหลักของทาง Microsoft ที่ใช้ในการพัฒนา software หาได้ง่ายมาก ตามตลาด software บ้านเราหรือจะ Download Version free ได้ที่ Visual Studio 2008 Express Editions ที่ขาดไม่ได้อย่างที่สองแน่นอนมันคือ AUTO CAD 2008 เพราะ title มันก็บอกอยู่แล้วว่าเป็น C# กับ Auto CAD 2008 ผมคงไม่อธิบายวิธี install โปรแกรมนะครับ เพราะว่ามันคงไม่ยากวุ้นวายอะไร อีกอย่างคือ ObjectARX หา Download ได้ที่ Developer Center จะได้มาเป็น exe ไฟล์จากนั้นให้เราแตกไฟล์ที่อยุ่ข้างในมาไว้ที่ Folder ที่เราต้องการในที่นี้ผมเลือกเป็น C:\MyJobs\ObjectARX 2008 ครับ เอาเป็นว่าหากมีเครื่องมือครับแล้วก็ลุยกันเลย ตัวอย่างนี้เป็นตัวอย่างง่ายๆคือการเรียกใช้ command บน Auto CAD นั่นเองครับ เริ่มแรกเลยเราต้อง เปิด VS.NET 2008 ขึ้นมาก่อนเพื่อนที่จะสร้าง Project ใหม่ คลิ๊กที่ File---> New Project -->Visual C# จากนั้นเลือก Class Libraly แล้วก็ใส่ชื่อ Project ของเราลงไป ดังภาพด้านล่างนี้ครับ แล้วกด OK จากนั้นให้ทำการ Add Reference ลงไปใน project เพื่อที่จะเรียกใช้งาน Libary ของ AutoCAD ได้โดยคลิ๊กขวาที่ References จากนั้นเลือก Add Reference ไปที่ Browse แล้วเข้าไปที่ Path ที่เราทำการ install AutoCAD 2008 ลงไป แล้วเลือกไฟล์ดังนี้ acdbmgd.dll acmgd.dll เสร้จแล้วเรามาเริ่มสร้าง class กันเลยดีกว่า โดยไปที่ คลิ๊กขวาที่ Project Name เลือก Add-->New Item จากนั้นเลือก Class ตัวอย่างในที่นี้ของผมชื่อว่า HelloWorldCommand.cs ดังรูปครับ จากนั้นพิมพ์ ดังตัวอย่างนี้ครับ using System; using System.Collections.Generic; using System.Linq; using System.Text; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.ApplicationServices; namespace HelloCommand { public class HelloWorldCommand { [Autodesk.AutoCAD.Runtime.CommandMethod("HELLO")]//คำสัง public void Hello(){ Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; ed.WriteMessage("Hello AutoCAD..."); } } } เสร็จแล้ว ทำการ Build Project เพื่อให้ได้ไฟล์ .dll ออกมา โดยคลิ๊กขวาที่ Project แล้วเลือก Build หลังจากนั้นเราจะได้ไฟล์ .dll ออกมา ในที่นี้ผมได้ HelloCommand.dll นำไปทดสอง run ใน AutoCAD เลยดีกว่า เปิด AutoCAD 2008 ขึ้นมาครับ จากนั้นพิมพ์ ที่ command ด้วยคำสั่ง NETLOAD จากนั้นก็เลือกไฟล์ .dll ของเรา ตามรูป จากนั้นทดสองคำสั่งของเราเองได้แล้วครับ โดยพิมพ์คำว่า HELLO ลงไปยัง Command ของ AutoCAD จะได้ผลออกมาดังรูป เห็นหรือเปล่าครับว่าง่ายขนาดไหน วันนี้เอาไว้แค่นี้ก่อนนะครับ ไว้วันหน้าจะมาต่อบทความถัดไป