學(xué)習(xí)是讓我們了解更多我們未知的東西,然后用這些東西更好的幫助我們學(xué)習(xí)和工作,為什么我會(huì)歸結(jié)在嵌入式里面呢?因?yàn)槲覍W(xué)C#本意是為了做wince 的APP 開發(fā),然后順便做了一個(gè)工具,給大家分享。
學(xué)習(xí)C# 是一個(gè)機(jī)緣巧合,由于公司需要用平板電腦開發(fā)界面程序,本人只會(huì)一點(diǎn)C語(yǔ)言,因此四處尋找一本C#的書,開始了C#學(xué)習(xí)之旅。
首先是邊看書,邊在電腦上面演示他的例子,書非常的厚,適合我們這種現(xiàn)學(xué)現(xiàn)用的,哈哈。書的光盤如下
在經(jīng)過3天時(shí)間后,我從從沒接觸過C#到了做出了一個(gè)wince
的界面操作軟件,回想下其實(shí)很簡(jiǎn)單的。我用的是VS2008,做好了wince 的界面軟件后,我又在想是不是我要用這個(gè)軟件做一些我們用的一些工具,來幫助我干一些事呢?也不枉費(fèi)我浪費(fèi)近一周的時(shí)間來學(xué)習(xí)撒,哈哈。有了這個(gè)想法,我就很快地行動(dòng)了,首先讓我們見識(shí)下我的神器軟件------Dxp_sch_Tools,看到名字就知道了,是幫我們畫SCHlib 的工具,里面的各個(gè)按鍵可以指定坐標(biāo),方便我們進(jìn)行不同分辨率,不同軟件版本的兼容,但是有些繁瑣,請(qǐng)大家見諒,
的界面操作軟件,回想下其實(shí)很簡(jiǎn)單的。我用的是VS2008,做好了wince 的界面軟件后,我又在想是不是我要用這個(gè)軟件做一些我們用的一些工具,來幫助我干一些事呢?也不枉費(fèi)我浪費(fèi)近一周的時(shí)間來學(xué)習(xí)撒,哈哈。有了這個(gè)想法,我就很快地行動(dòng)了,首先讓我們見識(shí)下我的神器軟件------Dxp_sch_Tools,看到名字就知道了,是幫我們畫SCHlib 的工具,里面的各個(gè)按鍵可以指定坐標(biāo),方便我們進(jìn)行不同分辨率,不同軟件版本的兼容,但是有些繁瑣,請(qǐng)大家見諒,
讓我們上神器的照片。
基本操作流程如下:
(1) 首先建立一個(gè)excel 文件,然后在excel 的第一列是用來我們放置1----XX
的序號(hào),我們手工設(shè)置的,方便我們統(tǒng)計(jì)引腳數(shù)目,因?yàn)槲覀冊(cè)谧?/span>BGA 的時(shí)候,他的引腳不是1,2,3,因此我們專門用第一列來放置我們的統(tǒng)計(jì)數(shù)據(jù),當(dāng)然我們也可以不放,只要你知道就好。
的序號(hào),我們手工設(shè)置的,方便我們統(tǒng)計(jì)引腳數(shù)目,因?yàn)槲覀冊(cè)谧?/span>BGA 的時(shí)候,他的引腳不是1,2,3,因此我們專門用第一列來放置我們的統(tǒng)計(jì)數(shù)據(jù),當(dāng)然我們也可以不放,只要你知道就好。
(2) 下面一步,就是拷貝我們PDF里面的引腳和編號(hào),到excel 中,其中引腳序號(hào)放在第2列,引腳名稱放在第三列
(3)用神器導(dǎo)入excel ,然后設(shè)置好我們需要放置的引腳數(shù)目,放置的引腳之間的步進(jìn),這個(gè)步進(jìn)是像素點(diǎn)的步進(jìn)。就是2個(gè)引腳之間的像素點(diǎn)步進(jìn)我們可以用截圖工具獲取。如果你不知道怎么獲取或者不知道具體像素,你可以設(shè)置成20,40這些數(shù)據(jù),設(shè)置的就比較大,然后看他們放置的情況進(jìn)行縮放
(4)設(shè)置右邊各個(gè)菜單的像素點(diǎn),這些像素點(diǎn)都是以屏幕的左上角為參考原點(diǎn)得到的,如下圖示例設(shè)置右邊各個(gè)菜單的像素點(diǎn),這些像素點(diǎn)都是以屏幕的左上角為參考原點(diǎn)得到的,如下圖示例
(5) 然后點(diǎn)擊開始繪圖,就開始放置引腳了,放置好引腳后我們還需要調(diào)整一下引腳讓他變得更漂亮,然后我們的lib就繪制完成
總結(jié):神器總的制作時(shí)間其實(shí)就只有3天,它的功能其實(shí)就是幫我們放置引腳,因?yàn)楫?dāng)我們面臨幾百、幾千個(gè)引腳的時(shí)候,一個(gè)一個(gè)的手工放置,是不是難免出錯(cuò)呢?那么我們拷貝官方的pdf 引腳序列,然后讓神器幫我們完成,那么是不是又快準(zhǔn)確率又高呢?
由于博客傳不了工程,有需要工程的,可以單獨(dú)Q 我。
上傳源碼文件如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using Microsoft.Office.Interop.Excel; using System.IO; using System.Runtime.InteropServices; using System.Timers; using System.Diagnostics; namespace readexcel { public partial class Form1 : Form { [DllImport("User32")] public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo); [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y); [System.Runtime.InteropServices.DllImport("user32")] private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); const int MOUSEEVENTF_MOVE = 0x0001; //移動(dòng)鼠標(biāo) const int MOUSEEVENTF_LEFTDOWN = 0x0002;// 模擬鼠標(biāo)左鍵按下 const int MOUSEEVENTF_LEFTUP = 0x0004; //模擬鼠標(biāo)左鍵抬起 const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模擬鼠標(biāo)右鍵按下 const int MOUSEEVENTF_RIGHTUP = 0x0010; //模擬鼠標(biāo)右鍵抬起 const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; //模擬鼠標(biāo)中鍵按下 const int MOUSEEVENTF_MIDDLEUP = 0x0040; //模擬鼠標(biāo)中鍵抬起 const int MOUSEEVENTF_ABSOLUTE = 0x8000; //標(biāo)示是否采用絕對(duì)坐標(biāo) public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { button1.Text = "打開文件"; button2.Text = "開始繪圖"; button3.Text = "Exit"; textBox1.Text = "";// 清空顯示 textBox2.Text = "1"; textBox3.Text = "260";// 初始化坐標(biāo)點(diǎn) textBox4.Text = "36"; textBox5.Text = "280"; textBox6.Text = "88"; textBox7.Text = "830"; textBox8.Text = "665"; textBox10.Text = "602"; textBox11.Text = "112"; textBox9.Text = "5"; } // 讀取文件以及調(diào)用填充 private void button1_Click(object sender, EventArgs e) { openFileDialog1.AddExtension = true;//設(shè)置是否自動(dòng)在文件中添加擴(kuò)展名 openFileDialog1.CheckFileExists = true;//檢查文件 openFileDialog1.Filter = "Excel文件(.xls)|*.xls"; openFileDialog1.FileName = "";// 清空默認(rèn)名 if (openFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog1.FileName; dgExcel.DataSource = GetExcelData("openFileDialog1.FileName "); } } // 讀取excel 填充gridview private System.Data.DataTable GetExcelData(string path) { // string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; string strCon = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO;IMEX=1';", openFileDialog1.FileName); OleDbConnection conn = new OleDbConnection(strCon); string strCom = "select * from [sheet1$]"; OleDbDataAdapter oda = new OleDbDataAdapter(strCom, strCon); System.Data.DataTable dt = new System.Data.DataTable(); try { oda.Fill(dt); } catch (Exception e) { MessageBox.Show(e.Message); } return dt; } // 放置引腳助程序 System.Timers.Timer myTimer; string aa, bb; int x,pin_numb; int place_x,place_y,pin_x,pin_y,ok_x,ok_y; int step, origin_x, origin_y; private void button2_Click(object sender, EventArgs e) { pin_numb = Convert.ToInt32(textBox2.Text); place_x = Convert.ToInt32(textBox3.Text); place_y = Convert.ToInt32(textBox4.Text); pin_x = Convert.ToInt32(textBox5.Text); pin_y = Convert.ToInt32(textBox6.Text); ok_x = Convert.ToInt32(textBox7.Text); ok_y = Convert.ToInt32(textBox8.Text); step = Convert.ToInt32(textBox9.Text); origin_x = Convert.ToInt32(textBox10.Text); origin_y = Convert.ToInt32(textBox11.Text); SetCursorPos(260, 36);//Place工具位置坐標(biāo) mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); System.Threading.Thread.Sleep(100); SetCursorPos(280, 88);// Pin位置坐標(biāo) mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); System.Threading.Thread.Sleep(100); for (x = 0; x < pin_numb; x++) { SendKeys.Send("{TAB}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{BKSP}");// 多刪除幾次以保萬一 System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{BKSP}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{BKSP}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); aa = dgExcel.Rows[x].Cells[2].EditedFormattedValue.ToString(); SendKeys.Send( aa ); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{TAB}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{BKSP}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{BKSP}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SendKeys.Send("{BKSP}"); System.Threading.Thread.Sleep(100); SendKeys.Flush(); bb = dgExcel.Rows[x].Cells[1].EditedFormattedValue.ToString(); SendKeys.Send( bb ); System.Threading.Thread.Sleep(100); SendKeys.Flush(); SetCursorPos(ok_x, ok_y);// OK 坐標(biāo) mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); System.Threading.Thread.Sleep(1000); SetCursorPos(origin_x, origin_y);// 放置引腳位置坐標(biāo) mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); System.Threading.Thread.Sleep(100); origin_y = origin_y + step; } } private void button3_Click(object sender, EventArgs e) { this.Close(); } } }