මම අද කතා කරන්න යන්නේ අපේ මූළික පාඩම් මාලා වලින් පොඩ්ඩකට මිදිල ඔයාලට වැදගත් වේවි කියල හිතෙන codes ගැන කතා කරන්නයි. මටත් මේ ගැන යොයන්න වුනේ මගේ යාළුවෙකුගේ අවශ්ය තාවයකට program එකක් ලියන්න වුන නිසියි. ඉතින් මම හිතුවා ඔයාලත් එක්කත් ඒ දේවල් බෙදා ගන්න.
ඇයි අපිට Port Programming අවශ්යය
සමහර programs වලදි අපිට අපේ computer එකට පිටතින් ඇති hardware එකකින් data ගන්න සහ ඒවාට data යවන්න අවශ්ය වෙනව. මේ සඳහා අපිට computer එකේ තිබෙන විවිධ වූ ports භාවිතා කරන්න පුළුවන් වුනත් අපි අතර ජනප්රිය වුන port එකක් තියෙනව ඒ සඳහා, ඒ තමයි Serial Port එක. නමුත් දැන් නම් ගොඩක් computers වල මේ port එක එන්නේ නෑ. නමුත් භාවිතයේ සරල බව නිසාම (USB වලට සාපේක්ෂව) අදටත් භාවිතා වෙනව. ඒ නිසා මම හිතුව ඒ ගැන කතා කරන්න.
Program එක ගැන
මම code කරන්න තෝර ගත්තේ C#.Net කියන programming language එක, ඒ සඳහා විශේෂ හේතුවක් නැති වුවත් C# කියන්නේ මගේ ප්රියතම programming language එක නිසා තොරගත්ත. .Net වලදි නම් මෙය ඉතා පහසු කරල තියෙනව Framework එක මගින්.
අපි මුලින්ම කරන්න ඕන අවශ්ය කරන system classes ටික import කර ගන්න ඒක,
using System.IO.Ports;
using System.Threading;
දැන් අපි serial port object එකක් අවශ්ය කරන parameters දීල හදාගන්න ඕන.
SerialPort myserialPort = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
myserialPort.Handshake = Handshake.None;
ඊළගට අපි event handler එකක් හඳා ගන්න ඕන serial port එකට data ලැබුනම run වෙන්න,
myserialPort.DataReceived += new SerialDataReceivedEventHandler(SP_DataReceived);
දැන් අපි හදා ගත්ත serial port එක open කරන්න ඕන ඒක භාවිතා කරන්න කලින්.
myserialPort.Open();
දැන් අපි අපේ computer එකේ serial port එක හරහා data ලබා ගන්න සහ යවන්න සූදානම්. අපිට serial port එකෙන් ලැබෙන data, UI එකට ගන්න delegate භාවිතා කරන්න වෙනව. ඒ .Net framework එක cross-thread actions වලට ඉඩ ලබා නොදෙන නිසා. අපි delegate භාවිතා කරන්නෙ Non-UI Thread එකක ඉදල UI Thread එකට data ලියන්නයි.
private delegate void SetTextDeleg(string text);
දැන් අපි කලින් හදා ගත්ත event handler එකට ලබා දුන්න method එක code කරන්න ඕන data ලැබුනම run වෙන්න.
void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = _serialPort.ReadLine();
this.BeginInvoke(new SetTextDeleg(SI_DataReceived), new object[] { data });
}
දැන් SI_DataReceived method එක code කරන්න ඕන අපිට ලැබෙව data UI එකට ලියන්න.
private void si_DataReceived(string data)
{
textBox1.Text = data.Trim();
}
Data ගන්න වැඩේ හරි දැන්, අපි බලමු කොහොමද data යවන්නේ කියල, ඒ සඳහාත් අපි පොඩි method එකක් ලියමු. data ලියන්න කලින් අනිවාර්යයෙන්ම port එක open කරල තියෙන්න ඕන.
try
{
if(!(myserialPort.IsOpen))
myserialPort.Open();
myserialPort.Write("SI\r\n");
}
catch (Exception ex)
{
MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
}
දැන් ඔක්කොම වැඩ ටික හරි. අවසානයටම ඔයාලගේ program එක close වෙන කොට port එක close කරන්න.
myserialPort.Close();
මම මේ code එක ඉතාමත් සරල අන්දමින් කලේ ඔයාලට අවශ්ය නම් මේක තව සංකීර්ණ ලෙස ඔයාලගේ අවශ්යතාවවය අනුව යොදාගන්න පුළුවන්.
මට ඔය delegate කියන ක්රමය ගැන දැනගන්න ඔ්න ඒ ගැන vb.net ලිපියක් පලකරනවද
ReplyDeleteඉක්මනින්ම ඒ ගැනත් කියන්නම්කෝ....
Deleteඔව් ඔව් ඉක්මනටම කියන්න.මමත් මේ ලිපිය කියවන අතරතුරේ මේ ගැන කියන්න කියල කොමෙන්ට් එකක් දාන්න හිතුවේ... :)
Deleteහොඳයි හොඳයි මම ඊලග ලිපිය විදිහට ඒක දාන්නම් කෝ...
Deleteලොවෙත් නෑ... සිරා බ්ලොග් එක.. ඇයි මට මේක කලින් හම්බ නොවුනේ අයියෝ....
ReplyDeleteටිකක් හෙව්වනම් හම්බ වෙනව.... :)
Deleteමම vb.net වලින් keyman වගේ සොෆ්ට්වෙයා එකක් හදමින් ඉන්නවා ඒකේ keystroke ලබාගන්න ආකාරය හා keystroke දෙන ක්රමය කියලාදෙන්න පුලුවන්ද
ReplyDeleteමුලින්ම කියන්න ඕන ඔයා VB නැතුව C# වගේ භාවිතා කරනවානම් වැඩේ ලේසි වෙනව. මොකද ටිකක් advance දේවල් vb වලින් code කරන කොට පන යනව. keystrokes ගන්න ක්රමය ඇත්තටම මට මතක නෑ මේ වෙලාවේ. මම ඒක හොයල ඔයාට කියන්නම්.
Deleteඔය වැඩේදිත් delegate කතාවක් තියෙනවා මම කෝඩ් එකක් හොයා ගත්තා ඒක තේරුම් මදි ඒකයි ඇහුවේ
ReplyDeleteඔයා හොයාගත්ත code එක මට එවනවද එතකොට මට ඒක බලල ඔයාට විස්තර කරල දෙන්න පුළුවන්.
Delete
ReplyDeletehttps://www.dropbox.com/s/7ainnfiznqywt8d/keyboard_hook_test.rar
මේ කයි මම කිව්ව ෆ්රෝග්රෑම් එක මේකෙ එකම key stroke එක දෙපාරක් පෙන්වනවා ඒකට හේතුව දැනගත යුතුයි
ඒ වගෙම key stroke ලබාදෙන විදියත් කියලා දෙන්න
මම ඉක්මනින් ඔයාට උත්තරයක් දෙන්නම්...
Deleteමං ගාව තියෙන code එකක් ඔයාට දෙන්නම් මේක C# code එකක්. මම හිතන්නේ මේ code එක තේරුම් ගන්න ලේසි වේවි ඔයාට. මේ App එක නම් console එකක්. ඒ වුනත් ඔයාට Module එක use කරන්න පුළුවන්.
Deletehttps://www.dropbox.com/s/w9aau6yiqivcvdr/ArticleKeyLog.rar
උදව්වට බොහොම ස්තුතියි මට key stroke දෙන හැටිත් කියල ෙදනවද
ReplyDeleteඔයා පොඩ්ඩක් මේ article එක බලන්නකෝ....http://www.codeproject.com/Articles/18366/Sending-Keystrokes-to-another-Application-in-C
Deleteමම ඔයාගේ උපදෙස් අනුව කී මෑන් වගේ වෘදුකාංගයක් හදමින් ඉන්නවා.
ReplyDeleteදැනට හදපු එක මෙතනින් ගන්න.
https://www.dropbox.com/s/4xt7f4lt2oayrs8/key_board_hook_test.zip
දැනට fm-abhaya වලට හදපු කොටස සෑහෙන්න ඉවරයි.
ඔෆීස් 2013 දී කී මෑන්වල අවුලක් තියෙනවා මේකේ ඒ ප්රශ්නේ නෑ.
මම මෙතන දී බලාපොරොත්තු වෙන්නේ යුනිකේත විජයසේකර යතුරු පුවරුව පාවිච්චි කරන්න.
මට තව උදව්වක් ඕන වෙලා තියෙනවා ,වම් Alt බොත්තම ඔබලා “ද“ එබුවාම ඳ වැදෙන විදියට මේක හදන හැටි කියලා දෙනවද? ලොකු උදව්වක්.(මම හිතන්නේ මෙතන දී Alt යතුර එබුවාම key stroke මෙම මෘදුකාංගයට විතරක් ලැබෙන විදියට සැකසිය යුතුයි.) ඒ වගේම timer එකක් නැතුව කෙලින්ම යතුරක් ඔබන විටම මෘදුකාංගය ක්රියා කරවන්න පුලුවන් විදියකුත් හැකිනම් කියා දෙන්න
මට ඉතාමත් සතුටුයි ජගත් ඔයා ගැන. ඔයා කරන්න හඳන්නේ ඉතාමත් වටිනා දෙයක් මම මට පුළුවන් හැම උදව්වක්ම කරන්නම්. මම මේ ගැනත් බලල ඉක්මනින්ම ඔයාට පිළිතුරක් දෙන්නම්.
Deleteඔයා පොඩ්ඩක් මේ Tutorial එක බලනවද මම හිතන්නේ ඔයා හොයන දේ එතන තියෙනව.. http://revolt.alexjf.net/blog.php?action=read&item=15
Deleteමම සෑහෙන දුරට මෘදුකාංගය අවසන් කලා
Deletehttps://www.dropbox.com/sh/99luzxqgvrda6yh/JpjWOoL0DW/KeyMan_1.1.rar
මට තව උදව් දෙකක් ඕනවෙලා තියෙනවා
1. මේකෙ Alt + "ද" ගැහුවාම “ඳ“ වැදෙනවා නමුත් ඉන්පසු backspace
එබුවාම Undo වෙනවා මේකට හේතුව හොයලා දෙන්න
(පස්සේ මම පොඩි විසඳුමක් මේකට හොයාගත්තා Alt ඔබලා අතහැරියාම chr(2) වැදෙන්න සලස්සලා
මේකට හේතුව මොකක්ද? බලන්න
https://www.dropbox.com/s/gr9b6j3hz4y2n35/KeyMan_1.1X.rar )
2. MS WORD වලින් ෆොන්ටයක් තේරුවාම මේකෙ ඒකට අදාල ක්ලාස් එක ලෝඩ් වෙන්න
WORD plugin එකක් හදන හැටි හැකිනම් කියලා දෙන්න
මේක විජයසේකර සිංහල යුනිකේත යතුරු පුවරුවට අනුව හදලා තියෙනවා
වෙනසකට තියෙන්නේ ඉස්පිලි හෝ පා පිලි දෙකක් එබුවාම දීර්ඝ ඉස්පිල්ල හෝ පාපිල්ල වැදෙන විදියට හදලා තියෙනවා
ඇත්තටම ඔයා කරන්න අගය කළ යුතු දෙයක් ..... මගෙන් සුබ පැතුම්... (y)
Deletemacho man me programe language gena mukuth danne ne bn vbs nam dnnw bn mewa igena ganne kohend kiypnkoo
ReplyDeleteමේක බලන්න;
Deletehttps://www.lynda.com/C-tutorials/C-Essential-Training/188207-2.html
https://www.tutorialspoint.com/csharp/
https://channel9.msdn.com/Series/C-Sharp-Fundamentals-Development-for-Absolute-Beginners
මෙම ලිපිය ඉතා ප්රයෝජනවත්.මම
ReplyDeleteමගේ බ්ලොග් අඩවිය තුළ C # හා වෙනත් Microsoft .net මාතෘකා පිළිබඳ ලිපි ලිවීමට ඇත http://www.dotnetstuffs.com