#winapi

wszystkie notatki oznaczone etykietą "winapi"

Thunderbird w zasobniku systemowym - The hard way!

Początkowo planowałem zaprosić wszystkich na serię kilku odcinków o hakowaniu i programowaniu pod Windowsem. Miały to być zapiski z mojej próby rozszerzenia funkcjonalności programu, ale bez modyfikacji jego źródeł i binarek, tylko na “żywca” w czasie jego działania. Zapowiadał się ciekawy po-wakacyjny projekt, ale tym razem coś nie wyszło ;) Minimize To Tray Odkąd przesiadłem się na Mozillowego Thunderbirda brakowało mi w nim tego co bardzo ceniłem w poprzednio używanych klientach pocztowych.

Czytaj dalej

WinBounce: Poruszaj oknami na ekranie Windowsa

Gdy szlajając się po Internecie przypadkiem natrafiłem na wpis Juli “Challenge: Write a bouncy window manager” zaświtała mi w głowie myśl, że w sumie to dla zabawy mógłbym zrobić coś podobnego na Windowsa. Postanowiłem wtedy, że w jakiś “Dzień Programisty”, “Prima Aprilis”, czy inny podobny “szajs” spróbuję poruszyć ten temat. Zainspirowany tym pomysłem wczorajszego 1-szego kwietnia udało mi się nadziergać trochę kodu. http://twitter.com/malcompl/status/1245406565139730433 Tak powstał prosty programik (WinBounce) wprawiający w ruch okna na ekranie.

Czytaj dalej

Basic Authentication w HttpSendRequestEx

Miałem dziwny problem z WinInet. Nie chciało mi działać poprawnie Basic Authentication przy wysyłaniu requesta przez HttpSendRequestEx. Mimo, iż przy łączeniu dane niezbędne do autoryzacji zostały podane w InternetConnect, w wysyłanych nagłówkach na darmo było szukać linii zaczynającej się od: Authorization: Basic ... Pozostało poszukać w sieci jakiegoś rozwiązania. Sam Microsoft proponuje rozwiązanie tego problemu w sposób opisany tutaj: How to use HttpSendRequestEx with password-protected URLs. Oczywiście w HttpSession dorzuciłem tylko HttpSendRequest do metody RequestPostMpfd i wszystko zaczęło działać.

Czytaj dalej

Typ MIME z nazwy pliku

Szukałem jakiejś prostej funkcji lub metody pobrania typu MIME dla pliku mając jego nazwę lub rozszerzenie. Niestety nic ciekawego nie znalazłem na MSDN-ie, żadnej WinAPI-owskiej funkcji do tego celu, jedynie GetContentTypeFromFileName z ATL-owego serwera. No cóż trzeba było coś samemu sklecić, a raczej to chyba bardziej przeportować w/w funkcję na czyste WinAPI. Bo znając już tę prostą metodę, jak to zrobić, nowej implementacji już raczej nie będę wymyślał ;) std::string GetContentTypeFromFileName(const std::string& filename) { // default to application/octet-stream std::string content = "application/octet-stream"; // get the file extension char szExt[_MAX_EXT]; _splitpath(filename.

Czytaj dalej

Makro SendMessage a nazwa funkcji

W notce Makra WinAPI i problemy z nazwami przedstawiłem proste i łatwe rozwiązanie problemu wynikającego z wykorzystania nazwy SendMessage w definiowanej funkcji pod Windowsem. Rozwiązanie to jest brzydkim hackiem i obejściem problemu, ale działa… i zawiera też kilka wad. Główną wadą jest wymóg dołączenia nagłówka windows.h do projektu, tuż przed nagłówkami biblioteki, w której chcemy zadeklarować funkcję o nazwie SendMessage(), a w skrajnych przypadkach (chyba w każdym) nawet do pliku/projektu tej biblioteki.

Czytaj dalej

Makra WinAPI i problemy z nazwami

W ramach wstępu zapraszam do lektury artykułu Marcina Kasperskiego pt. Horror nazewniczy pod windows. Miałem podobny problem z SendMessage() w xiT++, przez co początkowo została wykorzystana nazwa sendMessage() w bibliotece używanej na systemach Microsoftu. I dziś udało mi się na szybko ten problem rozwiązać obejść przy pomocy preprocesora. Wkurzała mnie taka “odmienność” nazwy jednej metody od stylu nazewnictwa reszty. Ten “magiczny” kod (pochodzący z xiT++): #ifdef WIN32 // Fixed SendMessage function name problem on Win32 #ifdef UNICODE bool SendMessageW(const Message& message); #else bool SendMessageA(const Message& message); #endif #else bool SendMessage(const Message& message); #endif Może komuś się przyda takie szybkie i proste rozwiązanie ;) Choć to jest chamski i brzydki hack!

Czytaj dalej