Re^2: 複数起動時の処理について

投稿者: 投稿日:2019/10/06(Sun) 17:59:58 No.2508

 こんにちは、お世話になります。

 ありがとうございます。
 やはり現状では難しいですよね。
 一応複数起動を検出して、エラーメッセージを表示するくらいのことであれば、今でもできるんですが、起動中のプログラムに文字列等を送信するというのは難しいようです。
 やはりプロデルに機能として追加していただけるとうれしいんですけどね。

 以上、今後ともよろしくお願いいたします。

Re^4: 「コマンド実行」手順について

投稿者: 投稿日:2019/10/06(Sun) 17:51:40 No.2507

 こんばんは。

 確かに難しいですよね。
 とりあえず、簡易ですが、プラグインを自作してなんとかすることにしました。
 本当は、リアルタイムにコマンドプロンプトの出力結果を読み取って、画面表示させようかとも思ったんですが、イベント手順の作り方がまだに理解できてないので、追々ということにしました。

 以上、今後ともよろしくお願いいたします。


 それでは。

Re: 複数起動時の処理について

投稿者:通り道 投稿日:2019/10/03(Thu) 01:07:25 No.2506

回答ではないのですが、一応。

dotnetの場合、多重起動防止と引数の受け渡しには、一般的には
mutexとIPC通信を用います。
メッセージによる方法は、主に、Win32のNativeアプリの手法です。
(WinFormsも、中の仕組みは似たようなもんですが・・・)

mutexとIPCの両機能が、プロデルの命令になるかどうかは未確認です。

また、多重起動にかかわる処理は、できれば、プロデルのソースで
書かれたプログラムが実行されるよりも、もうちょっと手前でチェックと
引数の受け渡しをしてほしいところではあるので、プロデル本体に
対応を要望として挙げておくのも手かと思います。
(通常は、GUIの部品を確保し始めるよりも前で行う)

なお、本題のイベントの作り方は、
public event ProduireEventHandler ユーザセッション終了する;
のような、感じでプロデルから使うイベントを定義しておいて、
コンストラクタで、
this.SessionEnding += (sender, e) => { if (this.ユーザセッション終了する != null) { this.ユーザセッション終了する(sender, new ユーザセッション終了イベント情報(e)); } };
のような感じで、実際のイベントに紐づけています。
もととなるイベントからではない場合、コンストラクタ等での事前設定は不要で、イベントを発行したい時に、適切なsenderとイベント情報を引数に指定して、関数のように呼び出せば、大丈夫です(nullチェックは必要)
(上記は、WPFのApplicationを継承したクラスに使った例です)

Re^3: 「コマンド実行」手順について

投稿者:アーク <info.nds.laboratry あっとまーくgmail.com> 投稿日:2019/10/01(Tue) 17:47:54 No.2505

こんばんは。アークです。

そうですね。
コマンドを複数行で実行するのとマルチステートメントは同じでは無いですね。
そこで確認ですが正常終了なら0で異常終了の場合は1を返えせば良いのでしょうか。
それなら一行でできなくも有りません。
しかし、全ての終了コードを取得したいという事であれば、
バッチの様な内容をコマンド実行する事によって可能です。

全ての終了コードを取得しつつ1行でとなるとプロデルに対応して頂くしか無さそうです。

複数起動時の処理について

投稿者: 投稿日:2019/09/30(Mon) 23:07:30 No.2504

 こんにちは、お世話になります。

 現在メディアプレーヤーのようなものを作ろうとしています。
 この際、コマンドラインオプションで何かファイルが渡された時に、すでにプログラムが起動されていたらそちらに渡されたファイル名を引き継ぎたいと考えています。
 一般的なソフトでは、ウィンドウメッセージでやりとりするのですが、プロデルではウィンドウメッセージが扱えないため、困っています。
 プラグインを自作して、ウィンドウメッセージが発生した際にイベントを発生させようとしましたが、イベントを発生させる方法がわからず、つまずいてしまいました。
 また、一時ファイルを経由するという方法も考えましたが、できればほかの方法がないかと考えています。
 何かアドバイスをいただけないでしょうか。

 以上、よろしくお願いいたします。

 追記:あまりきれいではないですが、ウィンドウメッセージの受け取り部分をC#で書いたものを貼り付けておきます。
 ちなみに、このプラグインを読み込むと、プロデルが動作停止してしまいます。

----- サンプルソース -----
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Produire;

namespace rdr_msg{
public class メッセージレシーバ : IProduireClass{
private delegate int D_MyWndProc(IntPtr hwnd, int msg, int wParam, int lParam);
private static int GWL_WNDPROC = -4;

[DllImport("user32.dll", EntryPoint = "GetWindowLongA")]
extern static int GetWindowLong(IntPtr hwnd, int nIndex);
[DllImport("user32.dll", EntryPoint = "SetWindowLongA")]
extern static int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
[DllImport("user32.dll", EntryPoint = "SetWindowLongA")]
extern static int SetWindowLong(IntPtr hwnd, int nIndex, D_MyWndProc dwNewLong);
[DllImport("user32.dll", EntryPoint = "CallWindowProcA")]
extern static int CallWindowProc(int lpPrevWndFunc, IntPtr hwnd, int msg, int wParam, int lParam);

private static int lngWnP;

[自分で]
public void メッセージ処理開始([として]IntPtr ハンドル){
lngWnP = GetWindowLong(ハンドル, GWL_WNDPROC);
SetWindowLong(ハンドル, GWL_WNDPROC, MyWndProc);
}

[自分で]
public void メッセージ処理終了([として]IntPtr ハンドル){
SetWindowLong(ハンドル, GWL_WNDPROC, lngWnP);
}

private static int MyWndProc(IntPtr hwnd, int msg, int wParam, int lParam){
return CallWindowProc(lngWnP, hwnd, msg, wParam, lParam);
}
}

public class MessageEventArgs : EventArgs {
private int _msg;
private int _lParam;
private int _wParam;

public MessageEventArgs(int msg, int lParam, int wParam){
this._msg = msg;
this._lParam = lParam;
this._wParam = wParam;
}

public int msg{
get { return this._msg; }
}

public int lParam{
get { return this._lParam; }
}

public int wParam{
get { return this._wParam; }
}
}
}
----------

Re^2: 「コマンド実行」手順について

投稿者: 投稿日:2019/09/30(Mon) 18:08:32 No.2503

 こんにちは。

 アドバイスありがとうございます。
 しかし、いただいたソースではうまくいきませんね。
 試しに

ren "aaaaa.txt" "bbbbb.txt" & echo %ERRORLEVEL%

のように書き換えてみましたが、コマンドプロンプト上では終了コードが取得できるものの、プロデルの「コマンド実行」で実行した時は、なぜか終了コードが0になってしまうようです。

 それでは。

Re: ウェブブラウザに表示中のページの座標

投稿者:通り道 投稿日:2019/09/29(Sun) 13:46:59 No.2502

このにちは。

ブラウザが表示している内容については、ブラウザからDOMを取得し、そこから取得もしくは計算してください。プロデルのブラウザでは、「ページ」と呼んでいるようです。
DOMを取り出した後にどうするかについては、Javascriptを対象にした記事がいくらでも見つかるかと思います。

ウェブブラウザに表示中のページの座標

投稿者:とおりすがりや 投稿日:2019/09/29(Sun) 08:47:02 No.2500

いつもお世話になっております。
今回お知恵をお借りしたい内容なのですが「ウェブブラウザに表示されている状態の記憶」です。

どのような形式でもいいのですが
ウェブブラウザ部品に表示されている座標を記憶することはできないでしょうか?
個人的にはスクロールバーの位置を基準にして同じ座標に合わせる方法が一番手っ取り早いと思っているのですが
そもそもウェブブラウザ部品のスクロールバー情報の取得というのはできるものなのでしょうか?

他に方法があればそちらでも構わないのでお知恵をお貸しください。

大雑把にならスクロール回数や矢印キー、スペースキーなどの入力を取得してなんとかできなくはないですけど
もっと簡単で正確な方法が嬉しいです。

自己解決しました

投稿者:アーク <info.nds.laboratry あっとまーくgmail.com> 投稿日:2019/09/27(Fri) 10:18:42 No.2499

こんにちは。アークです。

その後、試行錯誤の末に何とか表技?でできました。
メニューの動的生成とその取得が可能になったので、
作成中のソフトを完成させられそうです。

通り道さん、ゆうとさん、ありがとうございました。

Re^2: Arduinoでの文字列送受信

投稿者:KH 投稿日:2019/09/27(Fri) 08:23:48 No.2498

こんにちは。

> 近日中にブログを掲載しますのでご覧下さい。
>
> なお、ino言語では文字列にASCII文字だけしか使えないので、Arduinoとのシリアル通信では送受信に日本語は使えません。

ありがとうございます。ブログ掲載されたら教えていただけると嬉しいです。

▲ページの先頭へ

- WebForum -