A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
SendMessage API で WM_COPYDATA を使用した例です。
A側 ( Windowsフォームアプリケーション・プロジェクトのプロパティの「ビルド」の「アンセーフコードの許可」にチェックを入れる必要あり )
using System;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[StructLayout(LayoutKind.Sequential)]
private struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}
private const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process.Start(@"C:\...\ConsoleApplication1.exe ", this.Handle.ToString());
}
unsafe protected override void WndProc(ref Message m)
{
if( m.Msg == WM_COPYDATA ) {
COPYDATASTRUCT *pcds = (COPYDATASTRUCT*)m.LParam.ToPointer();
if( pcds->cbData == 0 ) {
MessageBox.Show("正常に起動しました。",this.Text, MessageBoxButtons.OK,MessageBoxIcon.Information);
} else {
MessageBox.Show("エラーです。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
m.Result = new IntPtr(-1);
this.Close();
}
base.WndProc(ref m);
}
}
}
B側 ( コンソールアプリケーション )
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(int hWnd, UInt32 Msg, IntPtr wParam, ref COPYDATASTRUCT lParam);
private const int WM_COPYDATA = 0x004A;
[StructLayout(LayoutKind.Sequential)]
private struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
public IntPtr lpData;
}
static void Main(string[] args)
{
int hWnd;
if( 0 < args.Length )
{
if (int.TryParse(args[0], out hWnd) == true)
{
COPYDATASTRUCT cds = new COPYDATASTRUCT();
cds.cbData = 0;
SendMessage(hWnd, WM_COPYDATA, IntPtr.Zero, ref cds);
}
}
Console.WriteLine("Hello");
Console.ReadLine();
}
}
}
ちなみに、
>起動失敗の場合:-1
とのことですが、応答を返すプログラムがつもりのBがそもそも起動していないのですから、応答することはできません。(死人に話しかけても返事がないのと同じ)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows Vista・XP windows xp proが起動しなくなりました 10 2022/05/20 00:49
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Windows 10 やってもうた。windows10起動せず。知恵を貸してください。 2 2023/02/08 11:36
- ノートパソコン Windowsが起動しなくなってしまいました。 4 2023/08/28 16:30
- Windows 10 Win10 21H1 のアップデート 5 2022/05/14 19:10
- デスクトップパソコン windows7を使っているパソコンでの質問です。先日動作が遅く再起動かけると「windowsを起動 9 2022/06/16 21:31
- Windows 10 Windows10の不具合(Critical Process Died) 9 2022/04/19 21:11
- その他(パソコン・スマホ・電化製品) タブレットにナビゲーションバーを表示させたい。 1 2022/07/24 20:34
- Windows 10 再起動後 Pinが使用できず、PC(windows11)にサインインできない 3 2022/08/30 20:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
VBSでExcelのUserFormをエクス...
-
64bitで作ったEXEを32bitで起動...
-
VBで実行中のEXEファイルの情報...
-
AppActivateについて
-
VBSで起動したアプリが前面表示...
-
VBで一定時間毎に他のプログ...
-
HTMLタグの中にDLLを埋め込む事...
-
VBSから別のVBS起動するとき変...
-
二重起動禁止にする理由とは
-
Windows上のプログラム。「予め...
-
C#のフォームから起動するブラ...
-
EclipseとTomcat使用時、すぐに...
-
Eclipseでjavascriptが動かない
-
VBAでSeleniumからChromeを起動...
-
iPad) URL Schemeを使ってアプ...
-
MSペイントを画像ファイル名を...
-
WinSCPで画像のように puttyを...
-
exeファイルを実行するとすぐに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
WinSCPで画像のように puttyを...
-
VBSから別のVBS起動するとき変...
-
Windows上のプログラム。「予め...
-
VBAでOutlookを終了させたい Ex...
-
VBで実行中のEXEファイルの情報...
-
VBSで起動したアプリが前面表示...
-
Process.Startで起動したアプリ...
-
EXCEL VBAから他アプリケーショ...
-
64bitで作ったEXEを32bitで起動...
-
exeファイルを実行するとすぐに...
-
リムーバブルディスクのフォー...
-
VB6で呼び出し元の情報を取得す...
-
VBAでIEが起動しているか...
-
フォームの最前面が効かない
-
VBAでSeleniumからChromeを起動...
-
エクセル起動時別プロセスで開く
-
VBSでExcelのUserFormをエクス...
-
ACCESS VBAで別のACCESS(mdb)を...
-
別アプリの起動、終了について
おすすめ情報