{"id":604,"date":"2008-05-16T04:02:07","date_gmt":"2008-05-16T04:02:07","guid":{"rendered":"http:\/\/6teen.ru\/?p=604"},"modified":"2008-05-16T04:02:07","modified_gmt":"2008-05-16T04:02:07","slug":"3191","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=604","title":{"rendered":"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435"},"content":{"rendered":"<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435\n\nvar\nComputer: array[1..500] of string[25];\nComputerCount: Integer;\n\nprocedure FindAllComputers(Workgroup: string);\nvar\nEnumHandle: THandle;\nWorkgroupRS: TNetResource;\nBuf: array[1..500] of TNetResource;\nBufSize: Integer;\nEntries: Integer;\nResult: Integer;\nbegin\nComputerCount := 0;\nWorkgroup := Workgroup + #0;\nFillChar(WorkgroupRS, SizeOf(WorkgroupRS), 0);\nwith WorkgroupRS do\nbegin\ndwScope := 2;\ndwType := 3;\ndwDisplayType := 1;\ndwUsage := 2;\nlpRemoteName := @Workgroup[1];\nend;\nWNetOpenEnum(RESOURCE_GLOBALNET,\nRESOURCETYPE_ANY,\n0,\n@WorkgroupRS,\nEnumHandle);\nrepeat\nEntries := 1;\nBufSize := SizeOf(Buf);\nResult :=\nWNetEnumResource(EnumHandle,\nEntries,\n@Buf,\nBufSize);\nif (Result = NO_ERROR) and (Entries = 1) then\nbegin\nInc(ComputerCount);\nComputer[ComputerCount] := StrPas(Buf[1].lpRemoteName);\nend;\nuntil (Entries <> 1) or (Result <> NO_ERROR);\nWNetCloseEnum(EnumHandle);\nend; { Find All Computers }\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/\n\/\/  \u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435\n\/\/  WNetOpenEnum, WNetEnumResource, WNetCloseEnum\n\/\/\n\/\/  \u0410\u0432\u0442\u043e\u0440: \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 (Rouse_) \u0411\u0430\u0433\u0435\u043b\u044c\n\/\/  mailto:rouse79@yandex.ru\n\/\/\n\/\/  \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0444\u043e\u0440\u0443\u043c\u043e\u0432 \u041c\u0430\u0441\u0442\u0435\u0440\u0430 \u0414\u0435\u043b\u044c\u0444\u0438 \u0438 \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.RU\n\/\/  http:\/\/www.delphimaster.ru\n\/\/  http:\/\/forum.sources.ru\n\/\/\n\nunit Unit1;\n\ninterface\n\nuses\nWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,\nDialogs, StdCtrls, ComCtrls, Winsock, ImgList, ShellAPI;\n\nconst\nSTR_START    =  '\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435';\nSTR_STOP     =  '\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435';\nSTR_STARTED  =  '   \u0418\u0434\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ...';\nSTR_STOPPED  =  '   \u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e ...';\nSTR_END      =  '   \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 ...';\nSTR_FIELD    =  '   \u041f\u043e\u043b\u0435 \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043e ...';\n\ntype\nTDemoThread = class(TThread)\nprivate\nTreeNetWrk: TTreeNode;\nTreeDomain: TTreeNode;\nTreeServer: TTreeNode;\nTreeShares: TTreeNode;\nParam_dwType: Byte;\nParam_dwDisplayType: Byte;\nParam_lpRemoteName: String;\nParam_lpIP: String;\nprotected\nprocedure Execute; override;\nprocedure Scan(Res: TNetResource; Root: boolean);\nprocedure AddElement;\nprocedure Stop;\nend;\n\nTForm1 = class(TForm)\nButton1: TButton;\nTreeView1: TTreeView;\nStatusBar1: TStatusBar;\nImageList1: TImageList;\nprocedure Button1Click(Sender: TObject);\nprocedure TreeView1Click(Sender: TObject);\nprocedure FormCreate(Sender: TObject);\nprocedure TreeView1DblClick(Sender: TObject);\nprivate\nThread: TDemoThread;\nend;\n\nvar\nForm1: TForm1;\n\nimplementation\n\n{$R *.dfm}\n\nfunction GetIPAddress(NetworkName: String): String;\nvar\nError: DWORD;\nHostEntry: PHostEnt;\nData: WSAData;\nAddress: In_Addr;\nbegin\nDelete(NetworkName, 1, 2);\nError:=WSAStartup(MakeWord(1, 1), Data);\nif Error = 0 then\nbegin\nHostEntry:=gethostbyname(PChar(NetworkName));\nError:=GetLastError;\nif Error = 0 then\nbegin\nAddress:=PInAddr(HostEntry^.h_addr_list^)^;\nResult:=inet_ntoa(Address);\nend\nelse\nResult:='Unknown';\nend\nelse\nResult:='Error';\nWSACleanup;\nend;\n\n{ TDemoThread }\n\nprocedure TDemoThread.Execute;\nvar\nR:TNetResource;\nbegin\ninherited;\nPriority := tpIdle;\nFreeOnTerminate := True;\nResume;\nScan(R, True);\nTreeDomain := nil;\nTreeServer := nil;\nSynchronize(Stop);\nend;\n\nprocedure TDemoThread.Scan(Res: TNetResource; Root: boolean);\nvar\nhEnum: Cardinal;\nnrResource: array[0..512] of TNetResource;\ndwSize: DWORD;\nnumEntries: DWORD;\nI: DWORD;\ndwResult: DWORD;\nbegin\nif Root then\ndwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,\n0, nil, hEnum)\nelse\ndwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,\n0, @Res, hEnum);\nif dwResult = NO_ERROR then\nbegin\ndwSize := SizeOf(nrResource);\nnumEntries := DWORD(-1);                                   \/\/ ERROR_NO_MORE_ITEMS\nif WNetEnumResource(hEnum, numEntries, @nrResource, dwSize) = NO_ERROR then\nbegin\nfor i := 0 to numEntries - 1 do\nbegin\nif Terminated then Break;\nwith nrResource[i] do\nbegin\nParam_dwType := dwType;\nParam_dwDisplayType := dwDisplayType;\nParam_lpRemoteName := lpRemoteName;\nif Param_dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then\nParam_lpIP := GetIPAddress(Param_lpRemoteName);\nend;\nif Assigned(nrResource[i].lpRemoteName) then\nSynchronize(AddElement);\nScan(nrResource[i], false);\nend;\nWNetCloseEnum(hEnum);\nend;\nend;\nend;\n\nprocedure TDemoThread.AddElement;\nbegin\nApplication.ProcessMessages;\ncase Param_dwDisplayType of\nRESOURCEDISPLAYTYPE_NETWORK:\nbegin\nTreeNetWrk := Form1.TreeView1.Items.Add(nil, Param_lpRemoteName);\nTreeNetWrk.StateIndex := 1;\nend;\nRESOURCEDISPLAYTYPE_DOMAIN:\nbegin\nTreeDomain := Form1.TreeView1.Items.AddChild(TreeNetWrk, Param_lpRemoteName);\nTreeDomain.StateIndex := 2;\nend;\nRESOURCEDISPLAYTYPE_SERVER:\nbegin\nTreeServer := Form1.TreeView1.Items.AddChild(TreeDomain, Param_lpRemoteName + ' IP: ' + Param_lpIP);\nTreeServer.StateIndex := 3;\nend;\nRESOURCEDISPLAYTYPE_SHARE:\nbegin\nTreeShares := Form1.TreeView1.Items.AddChild(TreeServer, Param_lpRemoteName);\nTreeShares.StateIndex := 3 + Param_dwType;\nend;\nend;\nend;\n\nprocedure TDemoThread.Stop;\nbegin\nForm1.StatusBar1.Panels[1].Text := STR_STOPPED;\nForm1.Button1.Caption := STR_START;\nForm1.Button1.Enabled := True;\nForm1.Tag := 0;\nend;\n\n{ TForm1 }\n\nprocedure TForm1.FormCreate(Sender: TObject);\nbegin\nTag := 0;\nend;\n\nprocedure TForm1.Button1Click(Sender: TObject);\nbegin\nTag := Tag + 1;\nif (Tag mod 2) = 1 then\nbegin\nTreeView1.Items.Clear;\nStatusBar1.Panels[1].Text := STR_STARTED;\nButton1.Caption := STR_STOP;\nThread := TDemoThread.Create(False);\nend\nelse\nbegin\nStatusBar1.Panels[1].Text := STR_END;\nButton1.Enabled := False;\nThread.Terminate;\nend;\nend;\n\nprocedure TForm1.TreeView1Click(Sender: TObject);\nbegin\nif Assigned(TreeView1.Selected) then\nStatusBar1.Panels[0].Text := '   ' + TreeView1.Selected.Text\nelse\nStatusBar1.Panels[0].Text := STR_FIELD;\nend;\n\nprocedure TForm1.TreeView1DblClick(Sender: TObject);\nvar\nStr: String;\nbegin\nif Assigned(TreeView1.Selected) then\nbegin\nStr := TreeView1.Selected.Text;\nif Copy(Str, 1, 2) <> '\\\\' then Exit;\nif Pos(' IP:', Str) <> 0 then\nShellExecute(Handle, 'explore', PChar(Copy(Str, 1, Pos(' IP:', Str))), nil, nil, SW_SHOW)\nelse\nShellExecute(Handle, 'explore', PChar(Str), nil, nil, SW_SHOW);\nend;\nend;\n\nend.\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[448,457],"tags":[1216,1282,1387,1574,1660],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/604"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=604"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/604\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=604"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}