コード例 #1
0
 /// <summary>
 /// 追加。
 /// ウィンドウの所属するスレッドと実行スレッドが違う可能性があるので、ウィンドウからハンドルを取得しない。
 /// </summary>
 /// <param name="handle">ハンドル。</param>
 /// <param name="window">ウィンドウ。</param>
 internal void Add(IntPtr handle, FriendlyConnectorWindowInApp window)
 {
     lock (this)
     {
         _handleAndWindow.Add(handle, window);
     }
 }
コード例 #2
0
        /// <summary>
        /// データ受信時の処理。
        /// </summary>
        /// <param name="communicationNo">通信番号。</param>
        /// <param name="recieveData">受信データ。</param>
        /// <param name="senderWindow">送信元ウィンドウ。</param>
        protected override void OnRecieveData(int communicationNo, object recieveData, IntPtr senderWindow)
        {
            ContextOrderProtocolInfo contextOrder = recieveData as ContextOrderProtocolInfo;

            if (contextOrder != null)
            {
                FriendlyConnectorWindowInApp async = _manager.FromHandle(contextOrder.ExecuteWindowHandle);
                SendReturnData(communicationNo, senderWindow, _dotNetFriendlyControl.Execute(async, contextOrder.ProtocolInfo));
            }
            else
            {
                ProtocolInfo protocolInfo = recieveData as ProtocolInfo;
                SendReturnData(communicationNo, senderWindow, _dotNetFriendlyControl.Execute(this, protocolInfo));
            }
        }
コード例 #3
0
        /// <summary>
        /// フレンドリー操作ウィンドウ開始。
        /// </summary>
        /// <param name="controlInfo">コントロール情報。</param>
        /// <returns>FriendlyConnectorWindowInAppのハンドル。</returns>
        IntPtr StartFriendlyConnectorWindowInApp(SystemControlInfo controlInfo)
        {
            IntPtr targetThreadWindowHandle     = (IntPtr)controlInfo.Data;
            FriendlyConnectorWindowInApp window = null;
            IntPtr executeWindowHandle          = IntPtr.Zero;

            if (!TargetWindowExecutor.Execute(targetThreadWindowHandle, delegate
            {
                window = new FriendlyConnectorWindowInApp(_handleAndWindow, _dotNetFriendlyControl);
                executeWindowHandle = window.Handle;
            }))
            {
                return(IntPtr.Zero);
            }

            //登録
            _handleAndWindow.Add(executeWindowHandle, window);
            return(executeWindowHandle);
        }
コード例 #4
0
        void EndFriendlyConnectorWindowInApp(SystemControlInfo controlInfo)
        {
            IntPtr handle = (IntPtr)controlInfo.Data;
            FriendlyConnectorWindowInApp invokeWindow = _handleAndWindow.FromHandle(handle);

            _handleAndWindow.Remove(handle);

            //スレッドが異なるので、Invokeによって終了処理を実施する。
            if (invokeWindow != null)
            {
                try
                {
                    invokeWindow.Invoke((MethodInvoker) delegate
                    {
                        try
                        {
                            invokeWindow.RequestDispose();
                        }
                        catch { }
                    });
                }
                catch { }
            }
        }