Всем как всегда привет) Вот начал изучать WinAPI, но тут же появилось пару вопросов, на некоторых сайтах видел, что мол *.exe у них весит 15кб, у меня почему-то он весит аж 30+кб, что за ... ?? Пишу в Rad Studio 2010... Второй вопрос как поменя цвет фона в Label и цвет текста какими функциями? Может кто-то подкинуть кусочек кода? Хотя бы от руки, просто SetColorText( hwnd, color) не хочет перерисовывать текст! :\
Code: #pragma comment(linker, "/merge:.rdata=.text") #pragma comment(linker, "/merge:.data=.text") #pragma comment(linker, "/ENTRY:main") #pragma comment(linker, "/STACK:65536,65536") И о чудо. Hello World Занимает пару килобайт.
отключи все модули кроме shellapi и будет счастье.для изменения цвета-SetTextColor. вообще label есть как контрол,но нет поняти вин апи.для того что бы писать текст надо рисовать в обработчике WM_PAINT, либо для смены цвета юзать посылку сообщений.
Ребят всем конечно спасибо за ответы не по теме можно сказать) ну хотелось бы увидеть ответ на свой вопрос) и желательно с исходниками) точнее их частью)
у касперски видел примеры когда при правильных параметрах компилятора программа превращалась из 4 кб в 800 байт . правда у нее все лишнее отрезалось
примерно так, а на какой тебе ЯП надо сам переделаешь Code: program Project1; uses windows, messages; var window:TWndClassEx; Mwindow,Static1: HWND; Mmsg: MSG; function WindowProc(wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL; begin case msg of WM_Destroy: begin PostQuitMessage(0); Result:= 0; end; WM_CTLCOLORSTATIC: begin SetBkMode(WParam, TRANSPARENT); Result:= GetStockObject(Null_Brush); if lParam = Static1 then begin SetTextColor(wParam, RGB(255,0,0)); end; end; else Result:= DefWindowProc(wnd,msg,wparam,lparam); end; end; begin window.cbSize := sizeof (window); window.style := CS_HREDRAW or CS_VREDRAW; window.lpfnWndProc := @WindowProc; window.cbClsExtra := 0; window.cbWndExtra := 0; window.hInstance := HInstance; window.hIcon := LoadIcon (0,IDI_APPLICATION); window.hCursor := LoadCursor (0,IDC_ARROW); window.hbrBackground:= COLOR_WINDOW; window.lpszMenuName := nil; window.lpszClassName := 'Main_Window'; RegisterClassEx (window); Mwindow:= CreateWindowEx(0,'Main_Window','WinAPI', WS_OVERLAPPEDWINDOW,100,100,200,200,0,0,Hinstance,nil); Static1:= CreateWindow('STATIC','Lable',WS_VISIBLE or WS_CHILD or WM_SETTEXT,10,10,50,23,Mwindow,0,hInstance,nil); ShowWindow(Mwindow,SW_Show); while GetMessage (Mmsg,0,0,0) do begin TranslateMessage (Mmsg); DispatchMessage (Mmsg); end; end.
34 байта. тока ясное дело адрес месагбокса либо хардкодить, либо вычислять (тогда еще байт плюс триста) use32 format binary call _ebt msg db 'hello world!',0 messagebox dd 0 _ebt: pop eax xor ebx, ebx push ebx push ebx push eax push ebx call messagebox