Knast Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 Kan man flette inn windows console linjer i delphi-programmer? ex: man fyller inn et datamaskin navn i en edit box, haker av på en radioknapp som heter net send, skriver beskjeden i en annen editbox eller richedit og trykker på en knapp (send)... Denne prosessen skal sende console kommandoen "net send <datamaskinnavn> <beskjed>".. eller hake av på radiobutton ping og kommandoen blir: "ping <datamaskinnavn>"... må man legge inn et komponent på toppen der unit1, buttons, edits osv. står inn? mer? er nybegynner så trenger å vite alle prosesser.. vet ikke om det er noe (som er selfølgelig for dere som har holdt på en stund) jeg må legge inn... på forhånd takk,. Lenke til kommentar
Format71 Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 Denne vil kanskje få deg et stykke på veg? Capture the output from a DOS (command/console) Window -Vegar Lenke til kommentar
john_h Skrevet 25. februar 2005 Del Skrevet 25. februar 2005 Tror heller ShellExecute er det han mener.. Dropp to Radiobuttons, en Button og to Edits på en form. Legg til ShellAPI i uses-lista. RadioButton1 er netsend, og RadioButton2 er ping; Edit1 er navnet til maskina (evt. IP skal vel også fungere, om jeg ikke tar feil), og Edit2 er evt. beskjed som skal sendes med netsend. Dobbeltklikk på Button1 og bytt ut den genererte koden med denne: procedure TForm1.Button1Click(Sender: TObject); begin if RadioButton1.Checked then ShellExecute(Handle, PChar('open'), PChar('net'), PChar('send ' + Edit1.Text + ' ' + Edit1.Text), nil, SW_SHOWNORMAL) else if RadioButton2.Checked then ShellExecute(Handle, PChar('open'), PChar('ping'), PChar(Edit1.Text), nil, SW_SHOWNORMAL) else ShowMessage('Velg enten ''Ping'' eller ''Netsend'''); end; Lenke til kommentar
Knast Skrevet 28. februar 2005 Forfatter Del Skrevet 28. februar 2005 Tusen takk for hjelpen... Er på jobb nå.. skal teste de når jeg kommer hjem:D Lenke til kommentar
Format71 Skrevet 28. februar 2005 Del Skrevet 28. februar 2005 Trodde han ønske å ha resultatet av kommandoen inn i programmet i stede for i et nytt konsollvindu.... Men hvorfor gjøre det vanskelig ;-) Lenke til kommentar
Knast Skrevet 28. februar 2005 Forfatter Del Skrevet 28. februar 2005 Trodde han ønske å ha resultatet av kommandoen inn i programmet i stede for i et nytt konsollvindu.... Men hvorfor gjøre det vanskelig ;-) det er det jeg vil.. er som sagt noob og kan ikke vite det... men format; står det på den linken du sendte hvordan man får svaret tilbake i programmet? Lenke til kommentar
Format71 Skrevet 1. mars 2005 Del Skrevet 1. mars 2005 Ja det gjør det. Dersom du kopierer hele RunDosInMemo( )-prosedyren fra eksemplet skal du kunne bruke den direkte. Den tar to parametere, en med kommandoen du ønsker å kjøre (f.eks. 'ping www.hardware.no') og en med memoboksen outputen skal legges i. Har du det på plass skulle det være greit å endre slik at output'en blir lagt i en TStringList i stede slik at du kan parse den og vise ting akkurat slik du ønsker det. -Vegar Lenke til kommentar
Knast Skrevet 1. mars 2005 Forfatter Del Skrevet 1. mars 2005 Ja det gjør det. Dersom du kopierer hele RunDosInMemo( )-prosedyren fra eksemplet skal du kunne bruke den direkte. Den tar to parametere, en med kommandoen du ønsker å kjøre (f.eks. 'ping www.hardware.no') og en med memoboksen outputen skal legges i. Har du det på plass skulle det være greit å endre slik at output'en blir lagt i en TStringList i stede slik at du kan parse den og vise ting akkurat slik du ønsker det. -Vegar beklager at jeg ikke er så stø i delphi, men kan du legge inn reply med koden jeg skal legge inn? f.eks jeg mottar en net send og skal få den til å gå rett inn i programmet mitt.. eks. jeg mottar en net send fra 'random'. beskjeden er 'hei'. hvordan går dette rett inn i programmet? eller vil jeg uansett få en windows popup beskjed med meldingen?? eller om jeg kjører en ping kommando fra programmet og vil ha svaret tilbake i en label i programmet mitt i stedet for et nytt ledetekst-vindu.-.. klarer du dette? på forhånd takk.. Lenke til kommentar
Format71 Skrevet 2. mars 2005 Del Skrevet 2. mars 2005 (endret) Lag en form med en editboks, en knapp og ett memofelt. Koble Button1Click( ) til onClick-eventet på knappen. Så kan du skrive inn hosten i editfeltet, f.eks. www.hardware.no og trykke på knappen. Output skal da komme til memoen. procedure RunDosInMemo(DosApp:String;AMemo:TMemo); const ReadBuffer = 2400; var Security : TSecurityAttributes; ReadPipe,WritePipe : THandle; start : TStartUpInfo; ProcessInfo : TProcessInformation; Buffer : Pchar; BytesRead : DWord; Apprunning : DWord; begin With Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (ReadPipe, WritePipe, @Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1); FillChar(Start,Sizeof(Start),#0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(DosApp), @Security, @Security, true, NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then begin repeat Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100); Application.ProcessMessages; until (Apprunning <> WAIT_TIMEOUT); Repeat BytesRead := 0; ReadFile(ReadPipe,Buffer[0], ReadBuffer,BytesRead,nil); Buffer[BytesRead]:= #0; OemToAnsi(Buffer,Buffer); AMemo.Text := AMemo.text + String(Buffer); until (BytesRead < ReadBuffer); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end; end; procedure TForm1.Button1Click(Sender: TObject); begin RunDosInMemo('ping ' + edit1.text, memo1); end; Motta net send kan du ikke på denne måten. Det sier seg selv da det ikke er noen dosboks involvert i mottak av nettsend. Det skal imidlertid være mulig å snappe opp disse meldingene også på et vis. F.eks. gjør QuickMessanger dette. Hvordan vet jeg ikke. Mulig den snapper all netttrafikk på en gitt port eller noe. -Vegar Endret 2. mars 2005 av Format71 Lenke til kommentar
Knast Skrevet 4. mars 2005 Forfatter Del Skrevet 4. mars 2005 den virket ikke... må jeg adde noe i uses, procedure el noe sånt? i så fall hva? undeclared på rundosinmemo.. Lenke til kommentar
john_h Skrevet 4. mars 2005 Del Skrevet 4. mars 2005 Legg til "procedure RunDosInMemo(DosApp:String;AMemo:TMemo);" under private declarations i unit'en. Lenke til kommentar
Knast Skrevet 4. mars 2005 Forfatter Del Skrevet 4. mars 2005 Legg til "procedure RunDosInMemo(DosApp:String;AMemo:TMemo);" under private declarations i unit'en. Feilmelding: unsatisfied forward or external declaration 'TForm1.Runindosmemo' og rødt over den jeg puttet inn til private declerations... Lenke til kommentar
john_h Skrevet 4. mars 2005 Del Skrevet 4. mars 2005 Endre den øverste linja i procedure'n (RunDosInMemo) til: procedure TForm1.RunDosInMemo(DosApp:String;AMemo:TMemo); Lenke til kommentar
Knast Skrevet 4. mars 2005 Forfatter Del Skrevet 4. mars 2005 sorry at jeg forstår dette (ekstremt) tregt.. kan noen gi meg det med teskje? hva skal stå i uses, procedures øverst i unit-fila, private og public delclerations, (hele) koden til memo'en fra "procedure" til "end"; noe mer? takk Lenke til kommentar
Maranai Skrevet 5. mars 2005 Del Skrevet 5. mars 2005 FORMAT OG JOHN, dere begge suger så heftig. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure RunDosInMemo(DosApp:String;AMemo:TMemo); const ReadBuffer = 2400; var Security : TSecurityAttributes; ReadPipe,WritePipe : THandle; start : TStartUpInfo; ProcessInfo : TProcessInformation; Buffer : Pchar; BytesRead : DWord; Apprunning : DWord; begin With Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (ReadPipe, WritePipe, @Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1); FillChar(Start,Sizeof(Start),#0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(DosApp), @Security, @Security, true, NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then begin repeat Apprunning := WaitForSingleObject (ProcessInfo.hProcess,100); Application.ProcessMessages; until (Apprunning <> WAIT_TIMEOUT); Repeat BytesRead := 0; ReadFile(ReadPipe,Buffer[0], ReadBuffer,BytesRead,nil); Buffer[BytesRead]:= #0; OemToAnsi(Buffer,Buffer); AMemo.Text := AMemo.text + String(Buffer); until (BytesRead < ReadBuffer); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end; end; procedure TForm1.Button1Click(Sender: TObject); begin RunDosInMemo('ping www.goat.cx ',Memo1); end; end. Lenke til kommentar
Format71 Skrevet 7. mars 2005 Del Skrevet 7. mars 2005 FORMAT OG JOHN, dere begge suger så heftig. Det der er bare skryt! Du, og alle andre, vet utmerket godt at verken john_h eller jeg ville ha sugd deg for en million! -Vegar Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå