以下的代碼在XP系統執行可以得到上網時的動態IP,但在VISTA執行得到的卻只是內網的IP(169.254...),請問如何解決?先在uses處加入winsock,在form中加入一個button及edit
加入以下function原始碼
=========================================================
function LocalIP : string; 
type 
TaPInAddr = array [0..10] of PInAddr; 
PaPInAddr = ^TaPInAddr; 
var 
phe : PHostEnt; 
pptr : PaPInAddr; 
Buffer : array [0..63] of char; 
I : Integer; 
GInitData : TWSADATA; 
begin 
WSAStartup($101, GInitData); 
Result := ''; 
GetHostName(Buffer, SizeOf(Buffer)); 
phe :=GetHostByName(buffer); 
if phe = nil then 
begin 
Exit; 
end; 
pptr := PaPInAddr(Phe^.h_addr_list); 
I := 0; 
while pptr^[I] <> nil do 
begin 
result:=StrPas(inet_ntoa(pptr^[I]^)); 
Inc(I); 
end; 
WSACleanup; 
end; 

解决方案 »

  1.   

    应该提权到admin权限就行了
    代码网上到处是,自己找一个看看
      

  2.   

    你是說在程序裡加入提權的代碼還是設定系統的使用者權限?
    我是以admin的身份登入vista,也試過'以系統管理員的身入執行'程序,但問題依舊.
    在安裝控件時會提示:
    access   violation   at   address   0088180c   in   module   coreide70.bpl,read   of   address   00000008
    這是同一個問題嗎?
    我剛安裝上的vista+delphi 6,一切還很生疏,煩請指教,謝謝.
      

  3.   

    没看清楚……XP能得到动态IP的话,应该就是权限的问题了
    使用Win+R,调出“运行”对话框,输入 control userpasswords2 (最后的2不能少) ,这样启动了“用户帐户”设置对话框,选择“高级”选项卡,在“高级用户管理”中,单击“高级”按钮。接下来就会打开lusrmgr (本地用户和组) ,在左边的树图中选择“用户”,在右边选中“administrator”,单击鼠标右键,在弹出快捷菜单中选择“属性”。最后,我们把“帐户已禁用”前的钩去除,单击“确定”即可
    先这么试试,如果行得话再写提权的代码
      

  4.   

    access   violation   at   address   0088180c   in   module   coreide70.bpl,read   of   address   00000008 这显然是av了,貌似跟权限的关系不大吧。