![]() |
funktioniert diese funktion unter Windows ME nicht?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, habe schnell eine art network-scan geschrieben, der unser lokales netz nach rechnern mit freigaben durchsucht und diese anzeigt, unter 2000/XP gibt es keine probleme, unter ME scheint sich der Rechner aufzuhängen, wieso ? ;)
aufruf der funktion z.b.:
Delphi-Quellcode:
(F.nblist.Lines.Strings sind die IP's der Rechner, die auf einen vorherigen Ping reagiert haben..)
try
errors:=TStringList.Create; nextstep:=false; if GetConsole('cmd /c NBTSTAT -A '+F.nblist.Lines.Strings[k],output,errors) then F.memoout.Lines.AddStrings(output) else nextstep:=true; finally output.free; errors.free; end; und das ist die funktion (weiss nichtmehr wo ich die gefunden habe :( ) // edit: doch, von hier: ![]()
Delphi-Quellcode:
ich kann das leider nicht wirklich gut debuggen, da nur ne bekannte WinME hat und ich nit..
function GetConsole(const Command: String; var Output, Errors: TStringList): Boolean;
var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; SecurityAttr: TSecurityAttributes; PipeOutputRead: THandle; PipeOutputWrite: THandle; PipeErrorsRead: THandle; PipeErrorsWrite: THandle; Succeed: Boolean; Buffer: array [0..255] of Char; NumberOfBytesRead: DWORD; Stream: TMemoryStream; begin //Initialisierung ProcessInfo FillChar(ProcessInfo, SizeOf(TProcessInformation), 0); //Initialisierung SecurityAttr FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0); SecurityAttr.nLength := SizeOf(SecurityAttr); SecurityAttr.bInheritHandle := true; SecurityAttr.lpSecurityDescriptor := nil; //Pipes erzeugen CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0); CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0); //Initialisierung StartupInfo FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb:=SizeOf(StartupInfo); StartupInfo.hStdInput := 0; StartupInfo.hStdOutput := PipeOutputWrite; StartupInfo.hStdError := PipeErrorsWrite; StartupInfo.wShowWindow := sw_Hide; StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; if CreateProcess(nil, PChar(command), nil, nil, true, CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin result:=true; //Write-Pipes schließen CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsWrite); //Ausgabe Read-Pipe auslesen Stream := TMemoryStream.Create; try while true do begin succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil); if not succeed then break; Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Output.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeOutputRead); //Fehler Read-Pipe auslesen Stream := TMemoryStream.Create; try while true do begin succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil); if not succeed then break; Stream.Write(Buffer, NumberOfBytesRead); end; Stream.Position := 0; Errors.LoadFromStream(Stream); finally Stream.Free; end; CloseHandle(PipeErrorsRead); WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); end else begin result:=false; CloseHandle(PipeOutputRead); CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsRead); CloseHandle(PipeErrorsWrite); end; end; unter 2k/XP wie gesagt alles problemlos.. |
Re: funktioniert diese funktion unter Windows ME nicht?
Die Ursache könnte eine Endlosschleife durch
Zitat:
BTW, cmd.exe gibt es unter Win9x nicht, dort heißt der Standard-Kommandzeileninterpreter command.com (aber bevor Du anfängst es hart zu kodieren, liess die Umgebungsvariable %ComSpec% aus!). |
Re: funktioniert diese funktion unter Windows ME nicht?
Moin!
Und wieso überhaupt über diesen Umweg und nicht einfach direkt Windows fragen? Siehe dazu mal ![]() MfG Muetze1 |
Re: funktioniert diese funktion unter Windows ME nicht?
danke :)
ich lasse jetzt den cli abgefragen.. ist mir als ich kurz an dem rechner saß zwar aufgefallen, aber hab da nicht an mein programm gedacht :) das problem besteht jedenfalls immernoch, also müsste ich das mit der 'endlosschleife' testen.. aber wie umgehe ich das? @Muetze: das Problem ist, dass windows ne anfrage an den masterbrowser sendet, der ist aber fast immer firewalled und deswegen bekommt man so in unserem netz wenn überhaupt nur sehr wenige rechner zu sehen, deswegen die brechstange.. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz