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

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

хочу разработать файловый менеджер для венды, суть такова:
написано на си с вызовами 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

Вот это ебаный пиздец на 555 строчек — минимально необходимый код на C++ для отрисовки вращающегося кубика с помощью Direct3D 11. Блядь, это просто пиздец. Ну вдуматься — какой-то ебучий вращающийся кубик и какой-нибудь простенький шейдер! 555, блядь, строчек! Кто скажет, что C++ — удобный инструмент, тот пидарас. pastebin.com