restart polaczenia z internetem

0

znalazlem kod, ktory powinien restartowac polaczenie z internetem na win xp

uses NETCONLib_TLB, ActiveX



procedure TForm1.ResetNIC(aConnection: string);
var
  pEnum: IEnumVariant;
  vNetCon: OleVARIANT;
  dwRetrieved: Cardinal;
  pUser: PUserType1;
  NetSharingManager1: INetSharingManager;
begin
  NetSharingManager1 := CoNetSharingManager.Create;
  pEnum := (NetSharingManager1.EnumEveryConnection._NewEnum as IEnumVariant);
  while (pEnum.Next(1, vNetCon, dwRetrieved) = S_OK) do
  begin
    (IUnknown(vNetCon) as INetConnection).GetProperties(pUser);
    Memo1.Lines.Add(pUser.pszwName);
    if pUser.pszwName = aConnection then
    begin
      INetConnection(IUnknown(vNetCon)).Disconnect;
      INetConnection(IUnknown(vNetCon)).Connect;
      break;
    end;
  end;
end;

NETCONLib_TLB otrzymalem traktujac hnetcfg.dll tlibimp.exe

Kompiluje sie, znajduje aConnection, ale wywolanie Disconnect czy Connect zwraca EAccessViolation in Ole32.dll

Ewentualnie jak wywolac xp-ekowe "napraw" dla danego polaczenia?

0

podepnę się do tego tematu, ponieważ szukam odpowiedzi na:

Jak zrestartować połączenie LAN (wyłączyć/włączyć), chodzi mi o to aby komputer uzyskał nową dzierżawę z dhcp

Pozdr.

0

Pod tymi linkami jest kilka sposobow. Moze ktorys u ciebie zadziala. Mi sie nie udalo, a najbardziej rozsadny wydawal mi sie ten ktory na poczatku tematu przedstawilem. Tylko czemu ten wyjatek. Czyzby osoba, ktora podala ten sposob nie testowala go.

http://delphi.about.com/cs/adptips2002/a/bltip1102_2.htm
http://4programmers.net/Delphi/FAQ/Sieć/Jak_automatycznie_Nawiązać_i_rozłączyć_połączenie_DialUp_
http://209.85.135.104/search?q=cache:G6LtIi6w7EUJ:www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21312119.html+InternetAutodialHangup+delphi+lan&hl=pl&ct=clnk&cd=1&gl=pl&client=opera

jesli zadziala tobie, to napisz

0

Trzeba odwołać się do biblioteki "netshell.dll"

0

przydalby sie jakis szczegol jak sie do niej odwolac.

Cel moj osiagnelem innym sposobem. Nadal jestem jednak ciekaw jak w delphi zrestartowac polaczenie. Chcialem napisac program ktory bedzie sprawdzal czy jest polaczenie z netem, a gdy wykryje, ze nie, to zrestartuje karte sieciowa. Program devcon od microsoftu potrafi to z poziomu komend, wiec od biedy mozna nawet z delphi uzyc go do restartowania polaczenia. Jednak jesli juz mam go uzywac, to starczy mi ponizszy skrypt:

REM Restart Wireless connection to force broadcast IP request.
REM Don't restart if ping successful.
:dalej
 CALL :sleep 10
 ping -n 1 yahoo.com
 if %errorlevel% EQU 0 goto dalej
	CALL :sleep 3
	ping -n 1 google.com
	if %errorlevel% EQU 0 goto dalej
		devcon restart PCI\VEN_10B8&DEV_0005*
                       CALL :sleep 10
 goto dalej


:sleep
:: sleep for x number of seconds
ping 127.0.0.1 -n %1 -w 1000 > NUL
GOTO :EOF

a tu mozna sciagnac devcon
http://support.microsoft.com/default.aspx?scid=kb;en-us;311272

0

a Mnie jakoś ten komponent i przykład tam zawarty działa i nie narzekam :P :
http://download.4programmers.net/tdialup.zip

0
Darck napisał(a)
REM Restart Wireless connection to force broadcast IP request.
REM Don't restart if ping successful.
:dalej
 CALL :sleep 10
 ping -n 1 yahoo.com
 if %errorlevel% EQU 0 goto dalej
	CALL :sleep 3
	ping -n 1 google.com
	if %errorlevel% EQU 0 goto dalej
		devcon restart PCI\VEN_10B8&DEV_0005*
                       CALL :sleep 10
 goto dalej


:sleep
:: sleep for x number of seconds
ping 127.0.0.1 -n %1 -w 1000 > NUL
GOTO :EOF

W jaki sposób ten skrypt restartuje połączenie ? On wywołuje tylko jakieś sprawdzanie pinga.

Arthan napisał(a)

a Mnie jakoś ten komponent i przykład tam zawarty działa i nie narzekam :P :
http://download.4programmers.net/tdialup.zip

Ten przykład nie działa na kartach sieciowych. Być może działa ale tylko na modemach (telefon, neostrada, itp).

0
Opi napisał(a)

W jaki sposób ten skrypt restartuje połączenie ? On wywołuje tylko jakieś sprawdzanie pinga.

Darck napisał(a)

Program devcon od microsoftu potrafi to z poziomu komend

Darck napisał(a)

devcon restart PCI\VEN_10B8&DEV_0005*

Darck napisał(a)

a tu mozna sciagnac devcon
http://support.microsoft.com/default.aspx?scid=kb;en-us;311272
</quote>

0

No właśnie tym programem devon Microsoftu.

Skrypt BAT odwołuje się do tego programu, ale nic konkretnego nie robi, tylko sprawdza pingi na google i yahoo, więc.... ?

Oczywiście przetestowałem i nie działa, tj nie restartuje połączenia/wyłącza kartę sieciową.

0

skrypty zazwyczaja odwoluja sie do programow, dziala, sciagneles ten program microsoftu?

0

Tak, program devon ze strony Microsoftu, ten co podałeś wyżej :)
Użyłem wersji x86 dla 32bit systemu.

Program działa, ale jedynie co robi to sprawdza w kółko te same adresy google.com i yahoo.com :/

0

Jeszcze maly szczegol ktorego mogles nie zauwazyc. PCI\VEN_10B8&DEV_0005* to nazwa MOJEJ karty sieciowej. Poza tym przeciez dokladnie napisalem co skrypt robi. Jesli nie masz problemow z netem to nie zrestartuje ci polaczenia. Jesli tylko na tym ci zalezy wywolaj devcon restart z odpowiednim parametrem bedacym nazwa twojej karty (patrz microsoft.com)

0
Darck napisał(a)

Jeszcze maly szczegol ktorego mogles nie zauwazyc. PCI\VEN_10B8&DEV_0005* to nazwa MOJEJ karty sieciowej.

I pewnie o to chodzi, w tym jest problem u mnie. :-/

U mnie jest: PCI\VEN_1106&DEV_3106
Wykonałem: "devcon restart PCI\VEN_1106&DEV_3106*" i działa :)

0

ok fajnie ze dziala opi`emu ale oprocz stosowani tego zewnetrznego progrmaiku i podawania komendy czy jest jakis inny sposob ??

0

Musi być :)

Np.: symulacja klikania. Co prawda nie poręczna i nie zalecana, ale wykonalna i w niektórych przypadkach to jedyna możliwość.

0

Operator as nie działa dokładnie tak samo jak jawne rzutowanie, gdy chodzi o interfejsy opartne na numerach GUID.

uses NETCONLib_TLB, ActiveX;

procedure TForm1.ResetNIC(aConnection: string);
var
  pEnum: IEnumVariant;
  vNetCon: OleVARIANT;
  dwRetrieved: Cardinal;
  pUser: PUserType1;
begin
with (CoNetSharingManager.Create) do
try
  pEnum := (EnumEveryConnection._NewEnum as IEnumVariant);
  while (pEnum.Next(1, vNetCon, dwRetrieved) = S_OK) do
    begin
    (IUnknown(vNetCon) as INetConnection).GetProperties(pUser);
    Memo1.Lines.Add(pUser.pszwName);
    if (pUser.pszwName = aConnection) then
      begin
      // <DIFF>
      (IUnknown(vNetCon) as INetConnection).Disconnect;
      (IUnknown(vNetCon) as INetConnection).Connect;
      // </DIFF>
      break;
      end;
    end;
finally
  Free;
  end;
end;
0

a ktos mi konkretnie wyjasni skad wziasc NETCONLib_TLB?? // d7personal

0

Component -> Import component -> Import a type library -> Add -> c:\windows\system32\hnetcfg.dll -> OK

Tak przynajmniej jest w Delphi 2005. W Delphi 7 było chyba nawet gdzieś bardziej na wierzchu. Jak nie masz tej opcji, z linii komend możesz wykorzystać narzędzie tlibimp.exe.

0

no faktycznie d7 nie ma tego co pisales - jak w takim razie posilkowac sie tlibimp.exe.? ? jakis przyklad ?

0

po prostu
tlibimp.exe hnetcfg.dll
z wiersza polecen. jesli dll masz w innym folderze musisz podac cala sciezke. Wynikiem sa 2 pliki ktore powinienes przeniesc do folderu z projektem.
Dzieki Szczawik, zaraz to sprawdze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1