在windows系统中,可以通过Regsvr32来实现注册ocx或者dl,

编程时,调用Regsvr32来注册,却不能正常执行。尤其是在Win7系统中,需要管理员身份才能运行。

使用下面的代码则能正常注册。

 

[delphi] view plain copy
 
  1. //注册  
  2. function RegisterDllServer(FileName: string): boolean;  
  3. var  
  4.   nDllAddr: integer;  
  5.   bstr: string;  
  6.   ProcAddr: Pointer;  
  7.   str: PAnsiChar;  
  8. begin  
  9.   Result := False;  
  10.   if not FileExists(FileName) then  
  11.     exit;  
  12.       
  13.   nDllAddr:=LoadLibrary(PWideChar(FileName));  
  14.   if nDllAddr <> then  
  15.   begin  
  16.     bstr:='DllRegisterServer'+chr(0);  
  17.       
  18.     str := PAnsiChar(AnsiString(bstr));  
  19.     ProcAddr := GetProcAddress(nDllAddr,str);  
  20.     if ProcAddr<>nil then  
  21.     begin  
  22.       CallWindowProc(ProcAddr,nDllAddr,0,0,0);   
  23.       Result := True;  
  24.     end;  
  25.     FreeLibrary(nDllAddr);    
  26.   end;                       
  27. end;  
  28.    
  29.    
  30. //反注册  
  31. function UnRegisterDllServer(FileName: string): boolean;  
  32. var  
  33.   nDllAddr: integer;  
  34.   bstr: string;  
  35.   ProcAddr: Pointer;  
  36.   str: PAnsiChar;  
  37. begin  
  38.   Result := False;  
  39.     
  40.   if not FileExists(FileName) then  
  41.     exit;  
  42.       
  43.   nDllAddr:=LoadLibrary(PWideChar(FileName));  
  44.   if nDllAddr <> then  
  45.   begin  
  46.     bstr:='DllUnregisterServer'+chr(0);  
  47.       
  48.     str := PAnsiChar(AnsiString(bstr));  
  49.     ProcAddr := GetProcAddress(nDllAddr,str);  
  50.     if ProcAddr<>nil then  
  51.     begin  
  52.       CallWindowProc(ProcAddr,nDllAddr,0,0,0);  
  53.       Result := True;  
  54.     end;  
  55.     FreeLibrary(nDllAddr);    
  56.   end;                       
  57. end;  

 

http://blog.csdn.net/shuaihj/article/details/6243360

 

选择目录

 

[delphi] view plain copy
 
    1. function selectdir: string; //如果取消取返回为空,否则返回选中的路径  
    2. var  
    3.   Info: TBrowseInfo;  
    4.   IDList: pItemIDList;  
    5.   Buffer: PChar;  
    6. begin  
    7.   result := '';  
    8.   Buffer := StrAlloc(MAX_PATH);  
    9.   with Info do  
    10.   begin  
    11.     hwndOwner := GetActiveWindow;   //少了这句,浏览目录选择框不会跳出来的  
    12.     pidlRoot := nil; //起始位置,缺省为我的电脑  
    13.     pszDisplayName := Buffer; //用于存放选择目录的指针  
    14.     lpszTitle := '请选择路径:'; //对话框提示信息  
    15.     ulFlags := BIF_RETURNONLYFSDIRS or BIF_BROWSEINCLUDEFILES;  
    16.      //选择参数,此处表示显示目录和文件,如果只显示目录则将后一个去掉即可  
    17.     lpfn := nil; //指定回调函数指针  
    18.     lParam := 0; //传递给回调函数参数  
    19.     IDList := SHBrowseForFolder(Info); //读取目录信息  
    20.   end;  
    21.   if IDList <> nil then  
    22.   begin  
    23.     SHGetPathFromIDList(IDList, Buffer); //将目录信息转化为路径字符串  
    24.     result := strpas(Buffer);  
    25.   end;  
    26.   StrDispose(buffer);  
    27. end;  

http://blog.csdn.net/earbao/article/details/9296411

分类:

技术点:

相关文章: