c # intptr не получает ручку - PullRequest
0 голосов
/ 27 июня 2018

Я создаю клиент на C # для подключения к bopup, используя несколько примеров. Я получаю значение 0 для дескриптора при запуске в качестве приложения Windows, в то время как получаю значение> 0 при запуске в качестве консольного приложения. Есть ли что-то, что я должен сделать по-другому, чтобы получить дескриптор главного окна в форме?

Консоль

static void Main(string[] args)
    {
        string error = null;
        uint refResult = 0;

        CSCLIENTLib.ServerClientVB client = new CSCLIENTLib.ServerClientVB();

        try
        {
            IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;

            string server = "localhost";
     //       Console.WriteLine(server + "|" + 0 + "|" + (byte)VBClientType.Messenger + "|" + (uint)handle + "|" + refResult);
            client.Initialize(server, 0, (byte)VBClientType.Messenger, (uint)handle, ref refResult);


        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());

            client.GetEventDescription(refResult, ref error);
            Console.WriteLine(error);
        }
}

Как приложение Windows Form:

 public partial class Form1 : Form
    {
       string error = null;
       uint refResult = 0;
        private static CSCLIENTLib.ServerClientVB client;
        IntPtr handle;

        public Form1()
        {
            InitializeComponent();

            init_connection();
        }

  private void init_connection()
        {
            client = new CSCLIENTLib.ServerClientVB();
            try
            {
                handle = Process.GetCurrentProcess().MainWindowHandle;
                string server = "localhost";
                MessageBox.Show(server + "|" + 0 + "|" + (byte)VBClientType.Messenger + "|" + (uint)handle + "|" + refResult);
                client.Initialize(server, 0, (byte)VBClientType.Messenger, (uint)handle, ref refResult);
            }
            catch (Exception ex)
            {
                // Console.WriteLine(ex.ToString());
                MessageBox.Show("ERROR: " + ex.ToString());
                client.GetEventDescription(refResult, ref error);
                // Console.WriteLine(error);
                MessageBox.Show("ERROR: " + error.ToString());

            }
    }
    }

1 Ответ

0 голосов
/ 27 июня 2018

Если вы хотите использовать дескриптор для текущей формы, используйте свойство Handle (this.Handle).

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle(v=vs.110).aspx

handle = this.Handle;
...