前言:
上次那篇android apps範例_camera就是為了這篇AR(擴增實境)預做準備的, 剛剛完成prototype,
程式碼在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog. 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上. 轉貼或引用本篇blog內文章段落, 不必交代出處.不過程式碼的部分是參考日本網站(google搜尋NyARToolkit)而做修改的,拿android 1.0版的老舊程式改成android 4.2版的,所以相關著作權法律的問題請注意一下!
過程:
AR(Augment Reality_擴增實境)近來頗流行的, 就是用攝影機拍攝進來的畫面經過電腦解析後,
將有用的資訊用文字或圖像的方式結合原來實景, 秀在螢幕上, 本範例就是用camera將實景拍攝進來,偵測畫面範圍內是否有mark(標示物)存在,若有的話就以文字方式秀座標在畫面內, 然後整個秀在螢幕上!
所有程式碼下載連結:
https://docs.google.com/file/d/0B6EVEd5P2B9cNDctbHJCVGFwOGs/edit?usp=sharing
5/5/2013補充:
4月22日 (13 天以前)
-整理code改版的心路歷程:
1.首先拿到android1.0版的程式後,匯入eclipse內,補足缺少的部分(target android4.2 project 目錄tree結構跟android 1.0 project差異大),修正紅色打叉的部分,舊function不能用的,用新function替代掉,沒用到的就註解掉是最快的,
2.找到程式執行入口(C語言來說的話就是void main();),觀看整個flow,原先project是利用網路串流取得攝影機畫面,現在改成用Acer Iconia B1 A71本身的前置鏡頭,
->若能成功透過攝影機抓到畫面後,呼叫偵測的部分來偵測畫面範圍內是否出現mark,若出現則用OpenGL ES畫3D cube,這部分因為OpenGL ES也是舊版的,完全不適用,為了減少麻煩,這部分的程式暫時拿掉,改用秀'TEXT文字'取代,
3.build and then run,啥畫面都沒有,只好重頭檢查起,到底camera打開沒有?只好另闢camera專案來研究一下,詳情請見另一篇android apps範例_camera,
4.研究好之後將camera這部分的code套用進來,成功可以預覽畫面,接下來弄capture(Canvas canvas);就是將攝影機畫面抓進來,偵測mark是否存在,然後秀文字的這段,因為畫布canvas無法用holder.lockcanvas產生畫布的物件,所以改成畫布另外自己形成一個view用framelayout.addView的方式疊在camera preview那個view的上面,可以達到畫面合成的目的.
->原先在capture();內要做完畫畫布的動作改成capture();內只要偵測到mark,回傳mark所在位置座標給畫布view透過invalidate();呼叫畫布重繪onDraw();即可!
5.進到capture();內第一件事情就是抓畫面,抓畫面反應要一段時間,所以呼叫takePicture();後要等它一陣子(thread.sleep(500)),才能進行下一階段_偵測mark,
->偵測mark這部分程式沒動過保持原先的code,
->接下來是若偵測到mark要回傳座標,原先是想透過在capture();內呼叫畫布這個view的method(setresultf();)來達成,結果capture();內部無法建立畫布這個view的物件自然無從調用setresultf();只好叫capture();將座標回傳囉,
6.但是又發生setresultf();內無法直接呼叫invalidate叫view重繪(主程序中不能隨便改變view的內容),只好叫holder去處理handlemessage,抓到message來做處理時就可呼叫invalidate();
7.但是又發生setresultf();內部要用傳回message傳回view的物件時,傳回空的view物件,導致錯誤發生,將view這個字換成this就ok了,
->測試ok,偵測到mark就秀紅色座標在畫面上,其實mark也只認黑白相間的四方框,框內文字不一定是要Hiro,
p.s.本軟體使用方法->先去日本網站抓mark.jpg印出來,拿在鏡頭前面晃就會出現一排紅色文字顯示座標,
042713
1.接042213進度,準備利用秀出來的TEXT(座標)畫紅色正方形外框框住mark->failed!因為那根本不是被偵測到的mark的四個頂點座標,而是座標變換矩陣,
->x,y,z 3d座標加上oritation(轉向),是專門餵給OpenGL ES的東西,所以現在直接跳過2D紅框,直接做OpenGL ES,等以後有空再來搞自己的2D偵測引擎,
->弄openGL ES前,先實驗一下,靜態固定座標秀3D 旋轉cube,發現被蓋掉一半,雖然程式是把openGL那層surfaceView疊加到camera preview之上,
042813
1.若只要2D->追code,轉換成opengl座標之前的座標是多少?<-failed!
2.另外一個TEXT mode未傳出的變數是誰?<-這招沒效,還是要去看src或官網,
3.做簡單openGL實驗(原點或是矩陣的影響力多大)<-亂try也不是辦法,還是上網去查openGL繪圖原理比較實在一點,
->昨晚弄3d的弄不出,只好回歸2d,可是座標頂點又弄不出來,
src code,官網(似乎openGL以原點為準,其他都是靠'定點座標'乘上'投影矩陣'或是'MODELVIEW'矩陣?
->先看書(有起始原點,再對照定點座標頂點,是否有乘上其他矩陣就不得而知了),再對照AR原始code有關openGL那段,
->看來還是要先玩會簡單的openGL例子再說了...
->next:
1.做簡單openGL實驗(原點或是矩陣的影響力多大),上網查openGL繪圖原理,
2.解決如何將camera的preview(surfaceView)跟openGL ES(surfaceView)疊在一起?
050113突破_成功疊兩層:
原因在一個異想不到的地方"glView.setEGLConfigChooser(8,8,8,8,16,0);",
050413
1.弄到能將float[16] arp,跟float[16] resultf都能從capture();內傳出來,
- a.先畫固定的cube,
- b.畫出正確位置的cube(站在mark上面),
050513
下午完成a,b兩部分,又微調了一下(mark size跟調整螢幕為橫向),詳細的調整去看華盛頓網站,
p.s.Cube站的位置跟實際的mark所在處仍有些微差距,
所有程式碼下載連結(OpenGL ES版):
https://docs.google.com/file/d/0B6EVEd5P2B9cMVJjTF82WE1wcVE/edit?usp=sharing
2013年4月21日 星期日
2013年4月13日 星期六
android apps範例_camera
前言:
最近為了某種需要,前置作業必須打通camera這道關卡,程式碼在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog. 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上. 轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
想要寫個android apps去開啟裝置本身的鏡頭, 以Acer Iconia B1 A71這個裝置來講, 它的鏡頭就只有一個:前置鏡頭(front-facing,自拍用,視訊會議用,用來拍自己的臉,鏡頭就跟螢幕在同一面,在背面的就叫後置鏡頭back-facing).
首先要搞清楚到底要用哪個鏡頭. 單單寫一行Camera.open();是不行的. 起初就是天真的整個拿書本上的例子來編譯執行,結果畫面空空如也,看不到預覽畫面,去看debug error,不斷的出現startpreview()或setpreviewdisplay(holder) nullpointexception, 換個例子try, 結果使用呼叫系統內建camera apps,竟然成功?!然後開始懷疑acer那台只允許透過呼叫系統內建的去打開camera.
打開camera有兩種方式一種是透過呼叫系統內建的camera介面(android系統的,在螢幕_應用程式集打開就會看到'照相機'),另外一種就是等會介紹的先建立一個Camera物件,然後開始預覽startpreview,用takepicture來拍照,
隔天不甘心去官網看,照著10個步驟去做還是不行,最後檢查到第一個步驟建立Camera物件,然後Camera.open(),他老兄竟然沒open,得到null,叫它怎麼繼續做底下的事情?!最後程式寫麻煩一點, 去掃一遍裝置底下到底有幾個鏡頭,每個的代號是多少, 打開那個front-facing的鏡頭就ok了!
拍照的步驟:
1.建立Camera物件(Camera.open();),詳細的code請參考底下網址.
2.得到目前鏡頭一些設定值(preview畫面的長寬)->getParameters();
3.必要的話可以用 setParameters(Camera.Parameters);來修改設定值,
4.也可呼叫 setDisplayOrientation(int);來改變螢幕畫面的方向,
5.想要有預覽畫面要先 setPreviewDisplay(SurfaceHolder).
6.然後呼叫 startPreview() 開始預覽.
7.想要真正的拍照時,呼叫 mCamera.takePicture(null, null, mPicture); 第三個參數是callback function會幫你處理後續的動作,被鏡頭抓進來的這個frame做何處理之類的,本例是將她轉成bitmap秀在imageView的區域內,若你想額外存檔也行.
8.拍照後,預覽畫面就停格了,再呼叫一次 startPreview() 就可以再繼續預覽畫面.
9.呼叫 stopPreview() 來停止預覽.
10.當關閉apps不想再使用camera這個裝置要記得呼叫 Camera.release();來釋放這個share resource不然整個camera就被佔住了,之後的其它apps想來使用都不行,除非重開機.
11.因為需要Camera的功能, 所以在AndroidMainfest.xml內要加入:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
第二行跟第三行的android:required="false"意思是在沒有鏡頭的裝置上跑此篇介紹的android apps也是可以的.沒加的話,去google play下載這個apps,檢查到你的裝置沒鏡頭是不給安裝的.
p.s.官網是這樣寫,實際上我沒試過!
12.layout就是一個linearlayout裡面包1個button,1個ImageView,1個framelayout,
所有程式碼下載連結:
https://docs.google.com/file/d/0B6EVEd5P2B9cODVYWVlUak9tZEk/edit?usp=sharing
最近為了某種需要,前置作業必須打通camera這道關卡,程式碼在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog. 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上. 轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
想要寫個android apps去開啟裝置本身的鏡頭, 以Acer Iconia B1 A71這個裝置來講, 它的鏡頭就只有一個:前置鏡頭(front-facing,自拍用,視訊會議用,用來拍自己的臉,鏡頭就跟螢幕在同一面,在背面的就叫後置鏡頭back-facing).
首先要搞清楚到底要用哪個鏡頭. 單單寫一行Camera.open();是不行的. 起初就是天真的整個拿書本上的例子來編譯執行,結果畫面空空如也,看不到預覽畫面,去看debug error,不斷的出現startpreview()或setpreviewdisplay(holder) nullpointexception, 換個例子try, 結果使用呼叫系統內建camera apps,竟然成功?!然後開始懷疑acer那台只允許透過呼叫系統內建的去打開camera.
打開camera有兩種方式一種是透過呼叫系統內建的camera介面(android系統的,在螢幕_應用程式集打開就會看到'照相機'),另外一種就是等會介紹的先建立一個Camera物件,然後開始預覽startpreview,用takepicture來拍照,
隔天不甘心去官網看,照著10個步驟去做還是不行,最後檢查到第一個步驟建立Camera物件,然後Camera.open(),他老兄竟然沒open,得到null,叫它怎麼繼續做底下的事情?!最後程式寫麻煩一點, 去掃一遍裝置底下到底有幾個鏡頭,每個的代號是多少, 打開那個front-facing的鏡頭就ok了!
拍照的步驟:
1.建立Camera物件(Camera.open();),詳細的code請參考底下網址.
2.得到目前鏡頭一些設定值(preview畫面的長寬)->getParameters();
3.必要的話可以用 setParameters(Camera.Parameters);來修改設定值,
4.也可呼叫 setDisplayOrientation(int);來改變螢幕畫面的方向,
5.想要有預覽畫面要先 setPreviewDisplay(SurfaceHolder).
6.然後呼叫 startPreview() 開始預覽.
7.想要真正的拍照時,呼叫 mCamera.takePicture(null, null, mPicture); 第三個參數是callback function會幫你處理後續的動作,被鏡頭抓進來的這個frame做何處理之類的,本例是將她轉成bitmap秀在imageView的區域內,若你想額外存檔也行.
8.拍照後,預覽畫面就停格了,再呼叫一次 startPreview() 就可以再繼續預覽畫面.
9.呼叫 stopPreview() 來停止預覽.
10.當關閉apps不想再使用camera這個裝置要記得呼叫 Camera.release();來釋放這個share resource不然整個camera就被佔住了,之後的其它apps想來使用都不行,除非重開機.
11.因為需要Camera的功能, 所以在AndroidMainfest.xml內要加入:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
第二行跟第三行的android:required="false"意思是在沒有鏡頭的裝置上跑此篇介紹的android apps也是可以的.沒加的話,去google play下載這個apps,檢查到你的裝置沒鏡頭是不給安裝的.
p.s.官網是這樣寫,實際上我沒試過!
12.layout就是一個linearlayout裡面包1個button,1個ImageView,1個framelayout,
所有程式碼下載連結:
https://docs.google.com/file/d/0B6EVEd5P2B9cODVYWVlUak9tZEk/edit?usp=sharing
2013年3月17日 星期日
android apps範例_httptest
緣起:
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了第 3 個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第3次寫blog, 第3次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
想要寫個android apps去某網站抓查詢的資料回來,不想用webview或是類似VB提供的web browser原件去寫的話, 可以用HttpPost類別來寫apps.
上過課後,開始選定目標, 這次以郵局官網上面的查詢全國郵局營業地點為範例,那個頁面內有提供很多種查詢方式,例如可用縣市行政區下去查, 也可以用該局電腦局號下去查,
每種查詢方式固定會給你填一兩個欄位, 現在就是要用程式去填這幾個欄位後傳給伺服器,
接著在畫面上秀出伺服器回傳給你的資料,
這整個過程的重點有兩個:
1.首先要找出回應查詢的網頁的網址:
2.第二個就是要找出有哪幾個是一定要送給伺服器來做查詢的欄位:
3.因為需要上網的功能, 所以在AndroidMainfest.xml內有加入INTERNET permission.
4.android 4.0以後,不允許main thread內有internet行為,所以改用thread寫法來更新view,
5.伺服器傳回的資料會轉成html格式秀在畫面上,因為沒對原始資料做篩選直接丟畫面,所以畫面會很亂, 真正想要秀的東西會藏在那一團東西裡頭.
所有程式碼下載連結(講解是用電腦局號查詢,程式碼是用縣市行政區查詢):
https://docs.google.com/file/d/0B6EVEd5P2B9cUlMwdFBOQmpUbFk/edit?usp=sharing
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了第 3 個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第3次寫blog, 第3次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
想要寫個android apps去某網站抓查詢的資料回來,不想用webview或是類似VB提供的web browser原件去寫的話, 可以用HttpPost類別來寫apps.
上過課後,開始選定目標, 這次以郵局官網上面的查詢全國郵局營業地點為範例,那個頁面內有提供很多種查詢方式,例如可用縣市行政區下去查, 也可以用該局電腦局號下去查,
每種查詢方式固定會給你填一兩個欄位, 現在就是要用程式去填這幾個欄位後傳給伺服器,
接著在畫面上秀出伺服器回傳給你的資料,
這整個過程的重點有兩個:
1.首先要找出回應查詢的網頁的網址:
2.第二個就是要找出有哪幾個是一定要送給伺服器來做查詢的欄位:
3.因為需要上網的功能, 所以在AndroidMainfest.xml內有加入INTERNET permission.
4.android 4.0以後,不允許main thread內有internet行為,所以改用thread寫法來更新view,
5.伺服器傳回的資料會轉成html格式秀在畫面上,因為沒對原始資料做篩選直接丟畫面,所以畫面會很亂, 真正想要秀的東西會藏在那一團東西裡頭.
所有程式碼下載連結(講解是用電腦局號查詢,程式碼是用縣市行政區查詢):
https://docs.google.com/file/d/0B6EVEd5P2B9cUlMwdFBOQmpUbFk/edit?usp=sharing
2013年3月14日 星期四
win7遠端協助
緣起:
有鑑於win7漸漸在一般公司行號普及, 若MIS人員想要遠端服務同仁的電腦方面的問題,可以參考這篇看看!若有不清楚的地方可留言發問,不周之處,日後會慢慢補完.轉貼或引用本篇blog內文章段落, 不必交代出處.
架構:
MIS人員的電腦OS: xp 或 win7皆可!
需要別人協助的同仁的電腦OS:win7 限定.
p.s.win7遠端協助的服務設定都有打開!
步驟:
1.事先寫好batch檔案(.bat)內容如下:
@echo off
set /p empid=請輸入自己的員工編號:
call msra /saveasfile \\xx.xx.xx.x\YYY\%empid%_RA 123456
2.當同仁遇到電腦的問題打電話求救時, 在電話中請這位同仁去公司內網點此batch超連結,
執行batch檔, 首先會要求同仁輸入自己的員工編號, 輸入完畢後按下enter,
3.MIS人員去\\xx.xx.xx.x\YYY\底下找看看是否有含該員工編號的RA檔案, 點兩下,
會跑出一個視窗詢問密碼, 密碼就是123456
4.打好密碼送出後, 再請同仁點選'YES' ,
5.接下來,MIS再打開的遠端協助的視窗上面找到'接管控制權',按下再請同仁點選YES, 即可掌控對方的電腦來操作使用.
p.s. msra就是win7遠端協助的dos command,
************************************************************************
02/01/2014更新:
特別補充: 被協助端電腦是win xp,協助端電腦是win7,若是winxp協助winxp則用傳統的指令conf(netmeeting)即可!
步驟(假設自己是資訊人員):
1.先用電話指示被協助端: 開始->執行->打"rcimlby.exe –LaunchRA",
2.此時會開啟一個遠端協助的視窗,在視窗內點選"邀請某人的協助",
3.利用email : 在email那欄位告知對方打入自己的email,然後點選"邀請此人",
4.下一個頁面,不打任何字,直接點選"繼續"也可以!
5.下一頁,兩個密碼的欄位都打123456,或是其他簡單一點的密碼都可以!然後點選"寄出邀請",
6.下一個視窗點選"允許",
7.自己去收信,會收到一封被協助端寄來的"你已收到來自被協助端的遠端協助邀請",
點選夾檔"RcBuddy.MsRcIncident",打入密碼123456,然後點選"是",
8.打好密碼送出後, 再請同仁點選'YES' , 接下來,MIS再打開的遠端協助的視窗上面找到'接管控制權',按下再請同仁點選YES, 即可掌控對方的電腦來操作使用.
簡單來說被協助端win7的遠端協助指令比較建全, 提供一堆參數, 可以弄成.bat檔,被協助端只要執行.bat就可以節省一連串手動的提出邀請的動作, 反觀被協助端若是win xp的遠端協助指令比較兩光, 沒有其他參數可打, 頂多只能靠指令叫出遠端協助的視窗, 要提出邀請只能乖乖的照以上步驟手動去做!
************************************************************************
08/22/2015更新:
特別補充:批次檔最新版會自動偵測被協助端電腦是win xp還是win7,無論是哪一種都會自動生成RA檔, win7的RA檔生成比較簡單,請看本篇最上方一開始介紹的,win xp的RA檔生成比較麻煩一點,但是輔助用java script鍵盤按鍵自動輸入也可以做到全自動化,MIS人員的電腦無論是win xp還是win7都可以打開此RA檔來建立遠端協助連線!
批次檔如下:
@if (@CodeSection == @Batch) @then
@echo off
ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp
goto warnthenexit
:ver_xp
:Run Windows XP specific commands here.
set SendKeys=CScript //nologo //E:JScript "%~F0"
%SendKeys%
goto :EOF
:warnthenexit
@echo off
set /p empid=請輸入自己的員工編號:
call msra /saveasfile \\xxx.xxx.xxx.xxx\%empid%_%time:~-4%RA 123456
goto :EOF
@end
// JScript section
var maxNum = 10; //to get random number
var minNum = 1; //to get random number
var n = Math.floor(Math.random()*(maxNum-minNum+1))+minNum; //to get random number
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("rcimlby -LaunchRA");
WScript.Sleep(3000);
WshShell.AppActivate("PCHShell Window");
WScript.Sleep(100);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("^(a)");
WScript.Sleep(500);
WshShell.SendKeys("^(c)");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("123456");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("123456");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(6000);
WshShell.SendKeys("\\\\");
WScript.Sleep(500);
WshShell.SendKeys("xxx.xxx.xxx.xxx");
WScript.Sleep(500);
WshShell.SendKeys("\\\0");
WScript.Sleep(500);
WshShell.SendKeys("^(v)");
WScript.Sleep(500);
WshShell.SendKeys("_"+n);
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
有鑑於win7漸漸在一般公司行號普及, 若MIS人員想要遠端服務同仁的電腦方面的問題,可以參考這篇看看!若有不清楚的地方可留言發問,不周之處,日後會慢慢補完.轉貼或引用本篇blog內文章段落, 不必交代出處.
架構:
MIS人員的電腦OS: xp 或 win7皆可!
需要別人協助的同仁的電腦OS:win7 限定.
p.s.win7遠端協助的服務設定都有打開!
步驟:
1.事先寫好batch檔案(.bat)內容如下:
@echo off
set /p empid=請輸入自己的員工編號:
call msra /saveasfile \\xx.xx.xx.x\YYY\%empid%_RA 123456
2.當同仁遇到電腦的問題打電話求救時, 在電話中請這位同仁去公司內網點此batch超連結,
執行batch檔, 首先會要求同仁輸入自己的員工編號, 輸入完畢後按下enter,
3.MIS人員去\\xx.xx.xx.x\YYY\底下找看看是否有含該員工編號的RA檔案, 點兩下,
會跑出一個視窗詢問密碼, 密碼就是123456
4.打好密碼送出後, 再請同仁點選'YES' ,
5.接下來,MIS再打開的遠端協助的視窗上面找到'接管控制權',按下再請同仁點選YES, 即可掌控對方的電腦來操作使用.
p.s. msra就是win7遠端協助的dos command,
************************************************************************
02/01/2014更新:
特別補充: 被協助端電腦是win xp,協助端電腦是win7,若是winxp協助winxp則用傳統的指令conf(netmeeting)即可!
步驟(假設自己是資訊人員):
1.先用電話指示被協助端: 開始->執行->打"rcimlby.exe –LaunchRA",
2.此時會開啟一個遠端協助的視窗,在視窗內點選"邀請某人的協助",
3.利用email : 在email那欄位告知對方打入自己的email,然後點選"邀請此人",
4.下一個頁面,不打任何字,直接點選"繼續"也可以!
5.下一頁,兩個密碼的欄位都打123456,或是其他簡單一點的密碼都可以!然後點選"寄出邀請",
6.下一個視窗點選"允許",
7.自己去收信,會收到一封被協助端寄來的"你已收到來自被協助端的遠端協助邀請",
點選夾檔"RcBuddy.MsRcIncident",打入密碼123456,然後點選"是",
8.打好密碼送出後, 再請同仁點選'YES' , 接下來,MIS再打開的遠端協助的視窗上面找到'接管控制權',按下再請同仁點選YES, 即可掌控對方的電腦來操作使用.
簡單來說被協助端win7的遠端協助指令比較建全, 提供一堆參數, 可以弄成.bat檔,被協助端只要執行.bat就可以節省一連串手動的提出邀請的動作, 反觀被協助端若是win xp的遠端協助指令比較兩光, 沒有其他參數可打, 頂多只能靠指令叫出遠端協助的視窗, 要提出邀請只能乖乖的照以上步驟手動去做!
************************************************************************
08/22/2015更新:
特別補充:批次檔最新版會自動偵測被協助端電腦是win xp還是win7,無論是哪一種都會自動生成RA檔, win7的RA檔生成比較簡單,請看本篇最上方一開始介紹的,win xp的RA檔生成比較麻煩一點,但是輔助用java script鍵盤按鍵自動輸入也可以做到全自動化,MIS人員的電腦無論是win xp還是win7都可以打開此RA檔來建立遠端協助連線!
批次檔如下:
@if (@CodeSection == @Batch) @then
@echo off
ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp
goto warnthenexit
:ver_xp
:Run Windows XP specific commands here.
set SendKeys=CScript //nologo //E:JScript "%~F0"
%SendKeys%
goto :EOF
:warnthenexit
@echo off
set /p empid=請輸入自己的員工編號:
call msra /saveasfile \\xxx.xxx.xxx.xxx\%empid%_%time:~-4%RA 123456
goto :EOF
@end
// JScript section
var maxNum = 10; //to get random number
var minNum = 1; //to get random number
var n = Math.floor(Math.random()*(maxNum-minNum+1))+minNum; //to get random number
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("rcimlby -LaunchRA");
WScript.Sleep(3000);
WshShell.AppActivate("PCHShell Window");
WScript.Sleep(100);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("^(a)");
WScript.Sleep(500);
WshShell.SendKeys("^(c)");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("123456");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("123456");
WScript.Sleep(500);
WshShell.SendKeys("{TAB}");
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(6000);
WshShell.SendKeys("\\\\");
WScript.Sleep(500);
WshShell.SendKeys("xxx.xxx.xxx.xxx");
WScript.Sleep(500);
WshShell.SendKeys("\\\0");
WScript.Sleep(500);
WshShell.SendKeys("^(v)");
WScript.Sleep(500);
WshShell.SendKeys("_"+n);
WScript.Sleep(500);
WshShell.SendKeys("{ENTER}");
WScript.Sleep(500);
2013年3月12日 星期二
android apps範例_Web Service Client
緣起:
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了第二個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第2次寫blog, 第2次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
除了ksoap2.jar檔案以外, 轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
上過課後,開始survey google上面的資料,首先了解甚麼是Web Service, 再來是收集到某網站有架Web Service server, 可以取得WSDL(.xml file), 再來是survey android apps範例(大部分的例子都是server跟client一組的,縱使照他的去寫也無server可測試,架server可是要花時間的,況且也沒WSDL可參照,從他的android code也可猜出WSDL長啥樣子,反正android apps code有參考價值就是了), 再來是寫WS需要SOAP套件,網路上有免費的android SOAP套件(ksoap2),再來是決定架構, 到底是要仿照網路一些java範例(new一個WS proxy的物件開始寫),還是要照現成別人的android apps架構, 當下就決定照別人的android apps架構下去寫, 下一步就是要學會看懂別人提供的WSDL檔案,看懂之後就開始寫程式跟測試了.
Web Service Client:
1.甚麼是WS ? 一言以蔽之, 就是你的程式去call別人寫好的function, 誰寫程式不call function的?差別是這個function存在遠在天邊的某台server上面. 你的程式去call別人,你就是client, 別人提供給你,他就是server. 本範例只示範WS client端的程式.
2.提供WS的server網址(WSDL檔案超連結)如下(這是一個華氏攝氏溫度互轉):
http://www.w3schools.com/webservices/tempconvert.asmx?wsdl
3.android SOAP套件,請到下列網址下載:
http://code.google.com/p/ksoap2-android/
下載後將.jar放在你自己的專案資料夾內,打開eclipse後,滑鼠點選你的專案右鍵,選build path/configure build path, 選Add JARs, 選你剛下載的那個.jar後按OK.
4.如何解讀WSDL檔案? 請參考底下這張圖.
圖中標出URL(就是WSDL檔案的hyperlink),NAMESPACE,METHOD,要傳入的引數都是待會程式中需要用到.
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了第二個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第2次寫blog, 第2次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
除了ksoap2.jar檔案以外, 轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
上過課後,開始survey google上面的資料,首先了解甚麼是Web Service, 再來是收集到某網站有架Web Service server, 可以取得WSDL(.xml file), 再來是survey android apps範例(大部分的例子都是server跟client一組的,縱使照他的去寫也無server可測試,架server可是要花時間的,況且也沒WSDL可參照,從他的android code也可猜出WSDL長啥樣子,反正android apps code有參考價值就是了), 再來是寫WS需要SOAP套件,網路上有免費的android SOAP套件(ksoap2),再來是決定架構, 到底是要仿照網路一些java範例(new一個WS proxy的物件開始寫),還是要照現成別人的android apps架構, 當下就決定照別人的android apps架構下去寫, 下一步就是要學會看懂別人提供的WSDL檔案,看懂之後就開始寫程式跟測試了.
Web Service Client:
1.甚麼是WS ? 一言以蔽之, 就是你的程式去call別人寫好的function, 誰寫程式不call function的?差別是這個function存在遠在天邊的某台server上面. 你的程式去call別人,你就是client, 別人提供給你,他就是server. 本範例只示範WS client端的程式.
2.提供WS的server網址(WSDL檔案超連結)如下(這是一個華氏攝氏溫度互轉):
http://www.w3schools.com/webservices/tempconvert.asmx?wsdl
3.android SOAP套件,請到下列網址下載:
http://code.google.com/p/ksoap2-android/
下載後將.jar放在你自己的專案資料夾內,打開eclipse後,滑鼠點選你的專案右鍵,選build path/configure build path, 選Add JARs, 選你剛下載的那個.jar後按OK.
4.如何解讀WSDL檔案? 請參考底下這張圖.
圖中標出URL(就是WSDL檔案的hyperlink),NAMESPACE,METHOD,要傳入的引數都是待會程式中需要用到.
5.因為需要上網的功能, 所以在AndroidMainfest.xml內有加入INTERNET permission.
6.android 4.0以後,不允許main thread內有internet行為,所以改用thread寫法來更新view,
7.若WS server是用微軟.net寫的, env.dotNET=true;此行程式碼一定要加上去.
所有程式碼下載連結:
2014/3/9更新
發現targetNamespace有更動,將它改成http://www.w3schools.com/webservices/就ok了!
2013年2月10日 星期日
android apps範例_訂便當
緣起:
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了一個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第一次寫blog, 第一次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
上過課後,對android sdk開發環境有了點瞭解後, 開始建置開發環境, 打通幾個環節後(有google網路上一些其他人的android學習筆記), 設計簡單的分鏡表, 畫出需要的幾個畫面的草圖, 就按照分鏡表開始慢慢寫程式畫出一個個的activity.
兩個步驟_Android sdk環境建置(for Windows OS):
1.到下面這個網址,在Java Platform, Standard Edition欄位內找到Java SE 7u13的項目,它的左邊JDK(DOWNLOAD)點下去下載安裝.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.到下面這個網址內點選"Download the SDK(ADT bundle for Windows)",
http://developer.android.com/sdk/index.html
訂便當系統:
目的在於每日訂便當作業無紙化, 適用於每天菜色固定幾家外送服務的店家, 將平板電腦至於櫃台上,方便同事在平板電腦上操作訂便當手續,等到每天早上10點一到,專司訂便當業務的人可以操作平板得知當日訂便當人數數量,找零錢等等可以清楚的一目瞭然.
很久以前就有個想法,想要將自己的程式碼無料分享出來,
最近有去上過android apps開發的課,上過課後花了點時間利用課堂教的寫了一個apps,
在Acer Iconia B1 A71上面測過是OK的,相關程式碼以及開發過程稍微整理一下就寫了這篇blog.
第一次寫blog, 第一次寫android apps, 若有不周,歡迎批評指教, 缺漏的部份日後會慢慢補上.
轉貼或引用本篇blog內文章段落&程式碼, 不必交代出處.
過程:
上過課後,對android sdk開發環境有了點瞭解後, 開始建置開發環境, 打通幾個環節後(有google網路上一些其他人的android學習筆記), 設計簡單的分鏡表, 畫出需要的幾個畫面的草圖, 就按照分鏡表開始慢慢寫程式畫出一個個的activity.
兩個步驟_Android sdk環境建置(for Windows OS):
1.到下面這個網址,在Java Platform, Standard Edition欄位內找到Java SE 7u13的項目,它的左邊JDK(DOWNLOAD)點下去下載安裝.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2.到下面這個網址內點選"Download the SDK(ADT bundle for Windows)",
http://developer.android.com/sdk/index.html
訂便當系統:
目的在於每日訂便當作業無紙化, 適用於每天菜色固定幾家外送服務的店家, 將平板電腦至於櫃台上,方便同事在平板電腦上操作訂便當手續,等到每天早上10點一到,專司訂便當業務的人可以操作平板得知當日訂便當人數數量,找零錢等等可以清楚的一目瞭然.
- 首頁上秀出系統日期時間, 下方有三個按鈕,分別是' 找零 ' , ' 訂便當' , '總訂單 ' , "訂便當"分六個activity來跑完整個流程.
- 左上角有工具列:'刪訂單' , 維護(人員名單,菜單), '結束'(將整個apps關閉)
- 資料儲存是利用sqlite,主要是用到sqlhelper類別,有三個table(人員表,菜單表,訂單表),人員表跟菜單表固定存在,但是訂單表在隔天第一筆訂單存進來時會刪掉今天的所有訂單,這樣可避免讓訂單表無限擴大.每回儲存新的一筆訂單時,會去檢查系統日期,若與訂單表上最新的一筆訂單的日期不同就會先清掉表內所有訂單後再新增進去.
- 每回要跳到別的Activity都會先結束掉目前所在的Activity(使用this.finish()).
- 修改訂單的行為改用先刪訂單再新增訂單的方式取代.
- 安裝.apk後,第一件事情就是新增全部人員名單以及菜單後才可使用本系統.
- 刪單,訂便當流程部分activity的item觸控點選採用ListView,GridView元件,sqlite table內有幾筆資料就呈現幾個item可供觸控點選.
- Activity之間傳遞資料靠的是bundle物件.
- java array公用變數傳入函數內,在函數內改變array變數數值等同改變公用array變數的數值.
- 兩個java string比較差異性要用compareTo方法,例如:array2[0].compareTo(nowdate)
- Intent物件跳往下一個Activity時,權限控管請見AndroidMainfest.xml,
- textview元件加入textview1.setMovementMethod(new ScrollingMovementMethod());可讓textview觸碰捲動.
訂閱:
文章 (Atom)