to post messages and comments.

Автозавершение в текстовых элементах Windows
Так и не нашёл нормальный способ вручную пинать это автозавершение, чтоб оно список перечитывало и чтоб возможные варианты принудительно показывало. Возможные варианты, пока текст не набран, отсутствуют, а даже после того, как набран, нужно получить ответ по HTTP, и только тогда есть, что показать. Объект автозавершения читает пустой список и запоминает, а когда можно что-то показать, список для автозаполнения всё равно пустой. Пока остановился на варианте с RecreateWnd + SendMessage(WM_KEYDOWN, VK_DOWN).

Изолентой там всё скручено. Тут оконные ручки и оконные функции, а тут COM-интерфейсы, а как что-то надо, так и пнуть нечего. Ни сообщение нормальное послать, ни метод интерфейса вызвать.

Попытался слёту написать функцию чтения строки из текстового файла, но оказалось, что это как‐то нетривиально. Использовал ReadFile, она читает определённое количество байт в буфер. В этом буфере ещё нужно найти символы \r\n и получить строку до них, а если в этом буфере не будет символов переноса строки, то читать данные из файла ещё. Хотел использовать под буфер статическую память, но понял, что может быть переполнение буфера, если строки в файле будут очень длинными.
Что будет, если текстовый файл будет размером в 200 мегабайт и состоять всего из одной строки? Статический буфер для этого не подходит, придётся выделять память из кучи.

Какой коварный подвох. Функция lstrcpyn(destination, source, iMaxLength) копирует из источника в приёмник не количество символов iMaxLength, а iMaxLength — 1, так как один символ использует под нулевой.

хочу разработать файловый менеджер для венды, суть такова:
написано на си с вызовами WinAPI (компилятор TCC), малый размер, мгновенный запуск, охренительная скорость, объединён с удобной консолью (возможности cmd + свои команды).

интерфейс навигации по папкам самый примитивный, ч/б, самописный
консоль красивая, цветная

также хотелось бы написать свою оболочку для программиста (замену explorer.exe): фичи те же (скорость, малый размер) + настраиваемость ВСЕХ горячих клавиш, поддержка нескольких рабочих столов. неперекрывающийся оконный менеджер (по типу awesome, subtle, i3 и xmonad в linux)

всё, что есть, оно какое-то тормозное и перегруженное

для меня стало открытием, что windows для генерации уникальных идентификаторов (guid'ов) делает remote procedure call на сервер, который гарантированно вернет идентификатор уникальный для локальной подсети.

Написал тут недавно — библиотека-звонилка для винды. Обертка над RAS API, пока что может просто поднимать соединение по имени, закрывать, и сообщать о том, существует ли оно уже. Для VPN, диалапа, и пр.

Может кому надо:
github.com

from /dev/windows/private/security/msv_sspi/kernel/krnlapi.cxx :
void
SspGenCheckSum(
IN PSecBuffer pMessage,
OUT PNTLMSSP_MESSAGE_SIGNATURE pSig
)
/*++
RoutineDescription:
Generate a crc-32 checksum for a buffer
Arguments:

Return Value:
Notes: This was stolen from net\svcdlls\ntlmssp\client\sign.c ,
routine SspGenCheckSum. It's possible that
bugs got copied too

--*/

typedef struct _DnsRecord {
  DNS_RECORD *pNext;
  PWSTR      pName;
  WORD       wType;
  WORD       wDataLength;
  union {
    DWORD            DW;
    DNS_RECORD_FLAGS S;
  } Flags;
  DWORD      dwTtl;
  DWORD      dwReserved;
  union {
    DNS_A_DATA      A;
    DNS_SOA_DATA    SOA, Soa;
    DNS_PTR_DATA    PTR, Ptr, NS, Ns, CNAME, Cname, DNAME, Dname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
    DNS_MINFO_DATA  MINFO, Minfo, RP, Rp;
    DNS_MX_DATA     MX, Mx, AFSDB, Afsdb, RT, Rt;
    DNS_TXT_DATA    HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
    DNS_NULL_DATA   Null;
    DNS_WKS_DATA    WKS, Wks;
    DNS_AAAA_DATA   AAAA;
    DNS_KEY_DATA    KEY, Key;
    DNS_SIG_DATA    SIG, Sig;
    DNS_ATMA_DATA   ATMA, Atma;
    DNS_NXT_DATA    NXT, Nxt;
    DNS_SRV_DATA    SRV, Srv;
    DNS_NAPTR_DATA  NAPTR, Naptr;
    DNS_OPT_DATA    OPT, Opt;
    DNS_DS_DATA     DS, Ds;
    DNS_RRSIG_DATA  RRSIG, Rrsig;
    DNS_NSEC_DATA   NSEC, Nsec;
    DNS_DNSKEY_DATA DNSKEY, Dnskey;
    DNS_TKEY_DATA   TKEY, Tkey;
    DNS_TSIG_DATA   TSIG, Tsig;
    DNS_WINS_DATA   WINS, Wins;
    DNS_WINSR_DATA    WINSR, WinsR, NBSTAT, Nbstat;
    DNS_DHCID_DATA    DHCID;
  } Data;
} DNS_RECORD, *PDNS_RECORD;

блин, в винде столько говна )) только что узнал, что в стандартный winapi входит функционал разпознавания образов для логина в систему "Windows Biometric Framework"

Жуйк, подскажи как создать через винапи битмап из файла, структуру. Мне нужен указатель на какой-то битмап, походу винапишный... Не спрашивай, чужой быдло код, потому я даже не уверен что мне надо.

Рационализация моей работы с COM. Необходимая, наверное, вещь, раз тут один долбоеб уже заикнулся об этом.

Да, может OLE и протухло. Может, на чистом COM/OLE уже никто не пишет.
Но, чуваки, без интерфейса к COM на винде делать вообще нехуй. Совершенно.
Десктопные приложения, игрушки, или даже сервисы, без COM/OLE на винде не написать.

Любой язык, платформа или рантайм, который не принимает в расчет COM, у которого нет качественного интерфейса к этому — на винде нежизнеспособен и является как максимум академической игрушкой, а обычно же — студенческой поделкой.

Все-таки, DWM очень интересно устроен.
Очень интересно позволяет себя абьюзить:

img218.imageshack.us
синее там это окно.

Код:
pastebin.com

Обращаю внимание — Aero выключен. И мы там вообще не используем никакие виндовые средства для регуляции прозрачности.
Просто рисуем в HWND через Direct3D:

device->OMSetRenderTargets(1, &backBufferRTV, NULL);

FLOAT clearColor[4] = { 0.0f, 0.2f, 1.0f, 0.4f };
device->ClearRenderTargetView(backBufferRTV, clearColor);

swapChain->Present(0, 0);

Окно там обычное:
WS_POPUP // просто окошко, "без всего"
WS_EX_COMPOSITED // указание оконному менеджеру на то, что контролы в окне рисуются "bottom-to-top"(т.н. "алгоритмом художника"), по очереди

Тем не менее, у нас там не плотный синий квадрат, а вот такая прозрачная фиговина. Получается, мы рисуем прямо в текстуру, которую DWM использует для отображения окна.

А разгадка одна:

MARGINS m = {-1};
DwmExtendFrameIntoClientArea(hwnd, &m);

не понимаю, почему виндовые программеры менее ценны, чем линуксовые. бля, ребята, да за то, что чувак разобрался с WinApi, запомнил все говнонюансы типа функций (не помню дословно) ChangeServiceParam() и ChangeServiceParam2(), или умеет работать с шикарными говнотипами типа LPWTSTR, — ему памятник поставить нужно. Полное отсутствие линуксовой логики, стройности и скромности реализации. Это ж зубриловка сплошная. Буэээээээ.

Полтора месяца я ебался с кривым Clozure CL, который поддерживает метаобъектный протокол CLOS через задницу, и то кое-как.

Но, я таки его одолел, и по этому случаю закоммитил в Doors: github.com
Теперь на CCL тоже можно писать COM-компоненты, и дергать COM-интерфейсы и даже целые COM-классы.
Еще я тестировал на clisp и SBCL, там тоже все хорошо работает.

Пример тут, например: github.com
Ясно видна сила MOP — класс hello-world-object является инстансом класса factory-class, а последний является инстансом и одновременно наследником com-class. А все три метаобъекта классов, и все их экземпляры, являются инстансами com-object.
com-обжекты можно дичайше круто передавать в чужой код, и чужой код, на каком-нибудь C++ или C#, будет дергать через виртуальные функции интерфейсов родные лисповые обобщенные фунцкции, которые мы писали на лиспе.

Метаклассы это вообще круто, они дичайше абстрагируют и очень сильно помогают писать меньше кода.

Все-таки, только пописав немного на плюсах начинаешь понимать, как охуительно прекрасна объектная система Common Lisp.

Накатал тут, для своих экспериментов с Direct3D и Direct2D, небольшую библиотеку-надстройку над winapi на плюсцах, которая абстрагирует Топлевел-окошко в event-driven стиле.

Планирую ее потом переписать на коммонлиспе, сделать евенты полноценными, и вообще, расширить и улучшить всячески, разными контролами и так далее, до подобия WPF.

Но не суть. Суть в том, что я в полной мере почувствовал уебищность, кривоту и неюзабельность плюсов.
Плюсы это невыразимый, блевотный пиздец.

Например, кто догадается — зачем там в классе Window метод Init()?
Второй вопрос — какие последствия это влечет в контексте удобства пользования классом?

SimpleWindows.hpp
pastebin.com

SimpleWindows.cpp
pastebin.com