WM_COPYDATA działa tylko w Visual Studio

0

Cześć, ma ktoś może pomysł dlaczego odebranie msg WM_COPYDATA (aplikacja WinForms, Windows 10) działa podczas uruchomienia z Visual Studio, a odpalone z EXE już nie?

1

na przykład dlatego że visual studio masz uruchomione z podniesionymi uprawnieniami i dane chyba nie przejdą z innej aplikacji o uprawnieniach admina do zwykłej.
Co masz w copy data? W jaki sposób odbierasz? Jak definiujesz strukturę? Być może masz błąd w strukturze i zadziała tylko na 32/64 bitach

0

Próbowałem podnosić uprawnienia, sprawdzałem 32/64 bit, skończyły mi się pomysły.

0

Msg akurat jest przez plugin pythona:

import os
import ctypes
from ctypes import wintypes

WM_COPYDATA = 0x4a

def sendM(msg):
	try:
		FindWindow = ctypes.windll.user32.FindWindowW
		hwnd = FindWindow(None,"PLUGIN")
		if (hwnd==0):
			return False		
		sender_hwnd = 0
		buf = ctypes.create_string_buffer(bytes(msg,encoding='utf-8'))
		copydata = COPYDATASTRUCT()
		copydata.dwData = 2
		copydata.cbData = buf._length_
		copydata.lpData = ctypes.cast(buf, ctypes.c_void_p)
		ctypes.windll.user32.SendMessageA(hwnd, WM_COPYDATA, sender_hwnd,ctypes.byref(copydata))
		return True
	except:
		return False

class COPYDATASTRUCT(ctypes.Structure):
    _fields_ = [('dwData', ctypes.c_ulonglong),
     ('cbData', ctypes.wintypes.DWORD),
     ('lpData', ctypes.c_void_p)]

C#:


 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]

  public struct COPYDATASTRUCT
    {

        public uint dwData;
        public int cbData;
        [MarshalAs(UnmanagedType.LPStr)]
        public string lpData;
    }
 protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_COPYDATA)
            {
                COPYDATASTRUCT copyData = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));
                int dataType = (int)copyData.dwData;
                if (dataType == 2)
                {
                string msg = copyData.lpData;

                    Console.WriteLine(msg);

                }
                else
                {
                    MessageBox.Show(String.Format("Unrecognized data type = {0}.", dataType), "HMI", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                base.WndProc(ref m);
            }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1