2015年11月25日 星期三

SignalR 建立RealTime 的頁面


步驟1: 透過Nuget 安裝SignalR


步驟2: startup.cs 加上設定

public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            //ConfigureAuth(app);
            app.MapSignalR();
        }
    }

步驟3: 如果在MVC的架構下,建議增加Hubs資料夾,新增Signalhub類別


















public class TimeQuery : Hub
    {
        static string messageToSend = DateTime.Now.ToString();
        Timer t = new Timer(3000); //每間隔3秒鐘

        public void StartTimer()
        {
          //開始啟動Timmer
            t.Elapsed += t_Elapsed;
            t.Start();
        }

        private void t_Elapsed(object sender, ElapsedEventArgs e)
        {
          //呼叫server
            Clients.All.addMessage("Date time  : " + messageToSend);
            messageToSend = DateTime.Now.ToString();
        }
    }
  PS: 這裡的Timer 的引用using System.Timers;

  _Layout.html 引用以下的javaScript
<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="~/signalr/hubs" type="text/javascript"></script>

  Angular呼叫SignalR
<div ng-controller="winformNotify"  ng-model= " servFileModel">
    時鐘<div id="messages"></div>
</div>
<script>
    var app = angular.module("servFileModel", []);
    app.controller("winformNotify", function ($scope) {
//呼叫server 端的hub的類別名稱 (不論類別名稱是大小寫,呼叫開頭一律小寫)
    var timeQuery = $.connection.timeQuery;
    timeQuery.client.addMessage = function (message) {
    $('#messages').empty();
    $('#messages').append( message );
     };
     $.connection.hub.start().done(function () {
         timeQuery.server.startTimer();
     });
  });
</script>


參考文獻

1.    http://wbsimms.com/signalr-hub-demo-site/  (有下戴範例… 感謝外國朋友提供 )

2015年11月12日 星期四

C# 如何偵測現有的應用程式exe,並浮在最上層

 某種情況下我們的應用程式需要呼叫別人的應用程式,如果對方的應用程式已經開啟了,如果我的程式每次呼叫它之後,視窗就會多一個,為了防止這個的情況,所以只好用我的程式偵測該應用程式是否已經存在,如果存在就把該偵測完的應用程式浮在最上面。

一、 如何偵測其他應用程式

以下是示範偵測其應用名稱『application.exe』,只需檔案名稱
  Process[] telerecProcs = Process.GetProcessesByName("application");                    
     if (telerecProcs.Length > 0)
                    {      
                       bringToFront("Application"); //填入視窗的Title Name                      
                    }
                    else
                    {
                        Process sample = new Process();
                        sample.StartInfo.FileName = " application.exe ";
                        sample.Start();
                    }

二、 如何控制其他應用程式,並控制它浮在最上面

l   引用System32 的函式庫
  [DllImport("user32.dll", SetLastError = true)]
  static extern bool BringWindowToTop(IntPtr hWnd);

  [DllImport("user32.dll", SetLastError = true)]
  static extern bool ShowWindow(IntPtr hWnd,  int  nCmdShow);

  [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
  public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);

l   使用的範例
public static void bringToFront(string title)
        {
            // Get a handle to the Calculator application.
            IntPtr handle = FindWindow(null, title);
            // Verify that Calculator is a running process.
            if (handle == IntPtr.Zero)
            {
                return;
            }
            BringWindowToTop(handle); // 將視窗浮在最上層
            ShowWindow(handle, 3); // 將視窗最大化
        }

ü   FindWindow參數title : 視窗的名稱 傳入
ü   BringWindowToTop 參數 handle : (IntPtr) FindWindow 物件傳入
ü   ShowWindow 參數nCmdShow : 0~11不同的視窗行為,大家可以參考https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms633548(v=vs.85).aspx

 希望對大家有所幫助囉謝謝各位的到訪。

2015年11月9日 星期一

IOS 實機測試-下集

  上一集我們已經含莘如苦的把憑證下戴下來了,所以接下來當然要開始設定XCODE的相關環境和部署適合cordova專案的環境,雖然我也碰到不少困難希望可以幫助大家減少痛苦指數…

一、MAC建立Cordova 相關環境
1.    先下戴node.js 的安裝程式 https://nodejs.org/en/
2.    打開終端機 輸入 sudo npm install -g cordova
3.    開啟APP Store 安裝XCode

二、使用Visual Studio Cordova 的遠端工具

1.    先在MAC作業系統中安裝Visual Studio Remote Tool

切換到根目錄/usr/local
cd/usr/local

安裝遠端Visual Studio Remote Tool
sudo npm install -g vs-mda-remote --user=$USER

啟動macvisual studio tool
vs-mda-remote --secure false


  等一下要把http port 填入Visual Studio 的設定中












  

2.    開啟MAC的設定à網路 : 查詢MAC的ip位置




















3.    開啟Visual Studio的工具à 選項

   在Remote AgentConfiguration 輸入MACIPHttpPort

















4.    開啟Visual Studio 的建置à建置平台       
       將使用中的方案平台設為IOS 
















5.    按下綠色執行 就可以遠端連線到MAC
 











     我的APP啟動了,但出現網路不通
      

開啟以下路徑,點選兩下projectName.xcodeproj開啟
/users/admin/remote-builds/builds/今天產生的資料夾/cordovaApp/platforms/ios/專案名稱/

       請點選à專案名稱àInfoà App Transport Security Settings(允許存取非安全性的連線http)  設為YES











注意:Visual Studio Cordova 編譯產生的info檔,找不到APP Transport Security Settings… 不用懷疑

你必需自己用終端機呼叫Cordova 指令產生一份檔案,再透過Cordova指令產生的專案目錄下的 info.plist拷貝到visual studio remote Tool編譯完成目錄之下(users/admin /remote-builds/builds/今天產生的資料夾/cordovaApp/platforms/ios/專案名稱/),之後再改成檔案名稱就好了…  作者可是卡超久的

7.    Cordova建立專案的範例
終端機指令下命令 Cordova 的方式直接建立專案,指令的語法順序如下Cordova create [檔案目錄] [bundle Identifiler] [APP的名稱]
補充: 如果沒有寫上bundleID 預設無法對外連ajax 的webAPI 
$ cordova create MyApp 申請的bundleID MyApp
$ cd MyApp
$ cordova platform add ios
$ cordova build ios







三、使用MAC XCode 設定專案














 l   bundle identifier : 各位還記得在ios實機測試-上集,所申請bundle Identifiler, 要填寫在xcodebundle Identifiler喔。
l   Team :  已經在app.developer.com註冊的ios developer 的帳號
l   Device: 要選擇IPhone

四、部署實機
選擇連接電腦的手持裝置(實體的IOS裝置),按下黑色右箭頭即可成功部署至您的手機






五、APP 上架篇


點選【ITunes Connect

點選【我的App

按下左上【+】 新增APP


各種尺寸都有不同的圖片像素… 依據Apple的不同裝置的Size上傳檔案




 示範上傳建置版本






回到XCODE的視窗
Build Setting à code Signing Identity



  要注意的是開發者的mail帳號是否有經過APP Developer 的註冊登記並下戴憑證,APP Developer 有兩種角色Developer Distribute,要有兩種角色的憑證,比較不會出錯

選擇ProductàArchive











   
 當你無法點選Archive,就代表你沒有連接實體IPhone裝置… 意思是如果要上傳檔案到ITune 你必需要有一台實體IOS裝置… 否則無法上架

注意: 作者開啟Visual Studio Corodova 遠端工具產生的Remote Build 目錄下的Xcode的專案下,開啟Product Archive (最後要打包檔案上傳iTune)竟然發生失敗了cordova/cdvviewcontroller.h' file not found 雖然試過網路上幾種方式最後還是失敗了以上各位還是當作練經驗吧 >_<

    用終端機下指令重新建立Cordova 專案,把Remote Build產生的目錄下的www目錄複製一份到 Cordova指令建立的專案下的目錄,取代www目錄,重新以xcode開啟此專案,開啟Product Archive就出現建置成功後的畫面。


















步驟1: Upload To App Store
步驟2: Validate
步驟3: Dowload dsYms… (如果未點選,在上架過中該建置專案無法選取)
步驟4:點選Export

在建置版本中à選擇你要送審的版本
 






再來就等待送審的結果啦~  

六、疑難雜症篇: uikit/uikit.h file not found

1 、 如果有出現錯誤訊息uikit/uikit.h file not found,各位不用太緊張,只要點專案上方再重新編譯,應該就恢復正常了  



   2、 IOSTitle Bar 蓋住我的APPTitle,如何把APPTitle Bar往下, 才不會影響我的APP的按鈕?

步驟1: MAC的環境下用cordova 呼叫指令

deMac:project admin$ > cordova plugin add org.apache.cordova.statusbar

:我原先在舊有的專案plugin 之後,我的專案有點怪怪的,所以後來又新增新的cordova 專案èpluginà 再把原有的www目錄搬移到新的專案路徑,才又正常。

步驟2: \專案名稱\config.xml 編修
<preference name="StatusBarOverlaysWebView" value="false" />
<preference name="StatusBarBackgroundColor" value="#000000" />
<preference name="StatusBarStyle" value="lightcontent" />

注意  StatusBarOverlaysWebView 設為 false就會把bar顯示在上面,此時要把StatusBarBackgroundColor 設為黑色,否則預設為白色
    
不知為何突然發生的悲據,尚我正準備更版新的APP時,原本正常的專案突然出現錯誤訊息【no matching provisioning profiles not exist】 

解決方法如下:
xcode--> windows --> device

步驟1: 右鍵點選APP硬體裝置後,出現show Provisioning Profiles ,讓它重新讀取認證檔



步驟2: 重新點選team的開發者帳號… 下方的警告訊息就會消失



七、相關文獻