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

投稿日 2019/09/30(Mon) 23:07:30
投稿者
参照先 https://riku22.net

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

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

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

 追記:あまりきれいではないですが、ウィンドウメッセージの受け取り部分を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; }
}
}
}
----------


関連一覧ツリー

をクリックするとツリーを一括表示します)

返信フォーム

(この投稿に返信する場合は下記フォームから投稿して下さい)
(1MBまで)
(英数字で8文字以内)

- 投稿修正/削除フォーム -
処理 No パスワード

▲ページの先頭へ

- WebForum -