QCollector Data Interface開発者ガイドの説明に従って、QCollectorからメッセージを受信しようとしています。このプロセスは、事前定義されたメッセージの登録、QCollectorサーバーウィンドウの検索、および登録されたメッセージによるデータの交換から構成されます。Windowsからのメッセージ
私のWndProc
コールバックではメッセージが失われますが、登録されたメッセージの1つとして認識されるものはありません。要求にはForm
のthis.Handle
が渡されていますが、これが正しいかどうかはわかりません。
私は間違っていますか?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HistDataManager
{
public partial class Form1 : Form
{
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string sClass, string sWindow);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam);
int nWinHandle = FindWindow("QCDataInterfaceWndClass", null);
uint wm_QCollectorClientDataRequest = RegisterWindowMessage("QCOLLECTOR_CLIENT_DATA_REQUEST");
uint wm_QCollectorClientPortfolioListRequest = RegisterWindowMessage("QCOLLECTOR_CLIENT_PORTFOLIO_LIST_REQUEST");
uint wm_QCollectorPortfolioListRequestComplete = RegisterWindowMessage("QCOLLECTOR_PORTFOLIO_LIST_REQUEST_COMPLETE ");
public void TestQC()
{
SendMessage(new IntPtr(nWinHandle), wm_QCollectorClientPortfolioListRequest, UIntPtr.Zero, this.Handle);
}
protected override void WndProc(ref Message m)
{
Console.WriteLine(m.HWnd + "," + m.Msg + "," + m.LParam + "," + m.WParam);
base.WndProc(ref m);
if (m.Msg == wm_QCollectorClientPortfolioListRequest || m.Msg == wm_QCollectorPortfolioListRequestComplete)
{
Console.WriteLine("Message from specified application found!");
}
}
}
}
EDIT 1:
ちょうど私がC#で働い基本は、私はこのアプリの第二のバージョンを作成し、それらがお互いに話を持っていることを確認します。これは動作するので、ハンドルとメッセージ構造が正しいことがわかります。
しかし、qCollectorからの返信はありません。おそらく他の言語でこれを使用した経験がありますか?私はqCollectorがC++で書かれたと思う。
あなたは_TargetApp_とはどういう意味ですか? –
代わりにPostMessageを使用してみてください。 –
@JoshuaDrake TargetAppはFindWindow( "QCDataInterfaceWndClass"、null)で見つけたwndです – ManInMoon