Как записать и отправить текст в mIRC в C#/Win32?

Как правильно указывают другие ответы, проблема заключается в сравнениях с плавающей запятой. Десятые не имеют конечных двоичных представлений, если их не пять.

Поскольку вас интересует очень конкретный набор чисел, вы можете сопоставить их с целыми числами вместо использования сравнения round, isclose или abs. Таким образом, вы можете сделать сравнение точным, а затем сопоставить результаты с нужными числами.

В этом случае вы можете умножить все на 10, чтобы получить целые числа. В более сложных случаях вам могут понадобиться другие факторы, совершенно другая функция преобразования или даже таблица поиска.

number = range(1, 10)
comb = (tuple(x / 10 for x in c) for c in itertools.product(number, repeat=5) if sum(c) == 10)
for cb in comp:
    print(cb)

Пара других мелких улучшений:

  • Используйте sum, чтобы сложить элементы вместе, вместо того, чтобы выписывать их вручную. Это значительно упростит добавление большего количества элементов к сумме.
  • Сохраняйте comb в качестве генератора, а не превращайте его в перегруженный список памяти, если вам не нужно обращаться к нему несколько раз.
6
задан Community 23 May 2017 в 12:06
поделиться

1 ответ

Этот код работает на меня (mirc 6.31):

IntPtr mainHandle = FindWindow("mIRC", null);
IntPtr serverHandle = FindWindowEx(mainHandle, new IntPtr(0), "MDIClient", null);  
IntPtr chanHandle = FindWindowEx(serverHandle, new IntPtr(0), "mIRC_Channel", null);  
IntPtr editHandle = FindWindowEx(chanHandle, new IntPtr(0), "richEdit20A", null);
SendMessage(editHandle, 0x000C, 0, "Hello World");

Заметьте измененный класс окна (richedit20A вместо редактирования). Просто найденный корректным классом при помощи Шпиона ++.

Что касается дескрипторов окна, одна возможность состоит в том, чтобы использовать EnumWindows или EnumChildWindows API.

4
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: