GlobalAtomを使ってアプリケーション間のデータやり取り
- 題名: GlobalAtomを使ってアプリケーション間のデータやり取り
- 著者: tkm
- 日時: 2014/09/28 7:42:23
- ID: 32637
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: GlobalAtomを使ってアプリケーション間のデータやり取り
- 著者: Hongliang
- 日時: 2014/09/28 9:41:30
- ID: 32638
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: GlobalAtomを使ってアプリケーション間のデータやり取り
- 著者: tkm
- 日時: 2014/09/29 6:51:07
- ID: 32639
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: 【連絡】記事の編集依頼について
- 著者: 管理人
- 日時: 2014/10/03 1:10:13
- ID: 32656
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
GlobalAddAtomとGlobalGetAtomを使ってアプリケーション間で間接的にデータのやり取りを行いたいです。送り側から送った文字列が、受け側では1文字しか読み取れず困っています。
下の受け側のところで、ATOMに書き込んだ文字列の頭1文字しか受け取れません。
どなたかご教示ください。
//↓送り側↓
#include <WinUser32.mqh>
#import "kernel32.dll"
int GlobalAddAtomA(string lpString);
int GlobalGetAtomName(int nAtom, string lpBuffer,int nSize);
int GlobalDeleteAtom(int nAtom);
#import "user32.dll"
int FindWindowW(string sClassName, string sWindowName);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import
#define WM_APP_ATOM 0x8001
int OnInit()
{
string WindowCaption = "TestForm";
string ClassName = "WindowsForms10.Window.8.app.0.2bf8098_r11_ad1";
int HWND = FindWindowW(ClassName, WindowCaption);
int atom = GlobalAddAtomA("TestString");
SendMessageA(HWND, WM_APP_ATOM, atom, 0);
GlobalDeleteAtom(atom);
return(INIT_SUCCEEDED);
}
//↓受け側(C#)↓
int WM_APP_ATOM = 0x8001;
[DllImport("kernel32.dll", SetLastError = true)]
static extern int GlobalGetAtomName(int nAtom, StringBuilder lpBuffer, int nSize);
protected override void WndProc(ref Message msg) {
if (msg.Msg == WM_APP_ATOM) {
StringBuilder buf = new StringBuilder();
int size = GlobalGetAtomName((int)msg.WParam, buf, 1024);
textBox_receiver.Text = buf.ToString();
//-->ここで"T"しか表示されない(本来は"TestString"を表示したい)
}
base.WndProc(ref msg);
}