用纯sdk编程吧,delphi可以做到,我贴一个示例,显示一个窗口,接受鼠标点击事件则退出,编译后才4K的可执行程序(独立的):program project; uses Windows; const Appname='Windows'; WM_destroy=2; WM_lbuttonup=514; {$R *.RES} function windowproc(Window:hwnd;Amessage,wParam,IParam:Longint):LongInt;stdcall;export; begin WindowProc:=0; case Amessage of WM_destroy: begin postquitmessage(0); exit; end; WM_lbuttonup: begin postquitmessage(0); exit; end; end; windowproc:=defwindowproc(window,amessage,wparam,iparam); end;function WinRegister:boolean; var windowclass:twndclass; begin Windowclass.style:=cs_hredraw or cs_vRedraw or cs_NoClose; windowclass.lpfnwndproc:=@windowproc; windowclass.cbclsextra:=0; Windowclass.cbWndextra:=0; windowclass.hInstance:=Hinstance; WindowClass.Hicon:=loadicon(0,idi_application); windowclass.hcursor:=loadCursor(0,idc_arrow); Windowclass.hbrBackground:=hbrush(color_btnface); Windowclass.lpszMenuName:=nil; WindowClass.lpszclassName:=appname; Result:=RegisterClass(WindowClass)<>0; end;function WinCreate:HWnd; var hWindow:Hwnd; pchartemp:pchar; begin hWindow:=CreateWindowEx(WS_EX_RTLREADING or WS_EX_Toolwindow,appname,'Sample Window',ws_OverlappedWindow,cw_UseDEfault,cw_UseDEfault,cw_UseDEfault,cw_UseDEfault,0,0,Hinstance,nil); if hWindow<>0 then begin pchartemp:='Samples'; showWindow(hWindow,cmdshow); textout(GetWindowDC(hWindow),10,50,pchartemp,7); UpdateWindow(hwindow); end; result:=hwindow; end;var amessage:tmsg; hwindow:hwnd; begin if not WinRegister then begin messagebox(0,'fail',nil,mb_ok); exit; end; hwindow:=wincreate; if hwindow=0 then begin messagebox(0,'fail',nil,mb_ok); exit; end; while getmessage(amessage,0,0,0)do begin translatemessage(amessage); dispatchmessage(amessage); end; halt(amessage.wparam); end.
2.用Aspack压缩,win2k下很好呀
uses Windows;
const Appname='Windows';
WM_destroy=2;
WM_lbuttonup=514;
{$R *.RES}
function windowproc(Window:hwnd;Amessage,wParam,IParam:Longint):LongInt;stdcall;export;
begin
WindowProc:=0;
case Amessage of
WM_destroy:
begin
postquitmessage(0);
exit;
end;
WM_lbuttonup:
begin
postquitmessage(0);
exit;
end;
end;
windowproc:=defwindowproc(window,amessage,wparam,iparam);
end;function WinRegister:boolean;
var windowclass:twndclass;
begin
Windowclass.style:=cs_hredraw or cs_vRedraw or cs_NoClose;
windowclass.lpfnwndproc:=@windowproc;
windowclass.cbclsextra:=0;
Windowclass.cbWndextra:=0;
windowclass.hInstance:=Hinstance;
WindowClass.Hicon:=loadicon(0,idi_application);
windowclass.hcursor:=loadCursor(0,idc_arrow);
Windowclass.hbrBackground:=hbrush(color_btnface);
Windowclass.lpszMenuName:=nil;
WindowClass.lpszclassName:=appname; Result:=RegisterClass(WindowClass)<>0;
end;function WinCreate:HWnd;
var
hWindow:Hwnd;
pchartemp:pchar;
begin
hWindow:=CreateWindowEx(WS_EX_RTLREADING or WS_EX_Toolwindow,appname,'Sample Window',ws_OverlappedWindow,cw_UseDEfault,cw_UseDEfault,cw_UseDEfault,cw_UseDEfault,0,0,Hinstance,nil);
if hWindow<>0 then
begin
pchartemp:='Samples';
showWindow(hWindow,cmdshow);
textout(GetWindowDC(hWindow),10,50,pchartemp,7);
UpdateWindow(hwindow);
end;
result:=hwindow;
end;var
amessage:tmsg;
hwindow:hwnd;
begin
if not WinRegister then
begin
messagebox(0,'fail',nil,mb_ok);
exit;
end;
hwindow:=wincreate;
if hwindow=0 then
begin
messagebox(0,'fail',nil,mb_ok);
exit;
end;
while getmessage(amessage,0,0,0)do
begin
translatemessage(amessage);
dispatchmessage(amessage);
end;
halt(amessage.wparam);
end.