Forum > Windows CE
Reading MAC address of ethernet (wifi) from WinCE device
Jurassic Pork:
hello,
it seems that executable + parameters are not used for wince version of Tprocess :o
windows
1 - lazarus_1_6_0\fpc\3.0.0\source\packages\fcl-process\src\win\process.inc
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- if (FApplicationName<>'') then begin PName:=Pchar(FApplicationName); PCommandLine:=Pchar(FCommandLine); end else If (FCommandLine<>'') then PCommandLine:=Pchar(FCommandLine) else if (Fexecutable<>'') then begin Cmd:=MaybeQuoteIfNotQuoted(Executable); For I:=0 to Parameters.Count-1 do Cmd:=Cmd+' '+MaybeQuoteIfNotQuoted(Parameters[i]); PCommandLine:=PChar(Cmd);
Wince
2 - F:\lazarus_1_6_0\fpc\3.0.0\source\packages\fcl-process\src\wince\process.inc
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- if (FApplicationName='') then begin If (FCommandLine='') then Raise EProcess.Create(SNoCommandline); PCommandLine:=PWidechar(FCommandLine) end else begin PName:=PWidechar(FApplicationName); If (FCommandLine='') then PCommandLine:=PWidechar(FApplicationName) else PCommandLine:=PWidechar(FCommandLine) end;
then try this :
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---AProcess.CommandLine := 'cmd.exe /c Ipconfig.exe /all';
Friendly, J.P
ertank:
Now we are back to that mysterious "error 87" My debug log contains below lines:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---TApplication.HandleException Failed to execute cmd.exe /c Ipconfig.exe /all : 87TApplication.HandleException Failed to execute ipconfig.exe /all : 87TApplication.HandleException Failed to execute \windows\ipconfig.exe /all : 87
I, myself, out of ideas here.
Jurassic Pork:
error code 87 for wince :
--- Quote ---87 The parameter is incorrect.
--- End quote ---
ertank:
Sure, meaning of error 87 is known. Reason is not. Everything seems in order for our command line. I have found below link related with my problem. They were not able to use TProcess in the end, too.
http://forum.lazarus.freepascal.org/index.php?topic=3683.0
So, I'm stuck.
ertank:
Finally, I could read ethernet MAC address (not bluetooth though).
My source link: http://forum.lazarus.freepascal.org/index.php?topic=10465.0
I needed to modify some parts of the code to be able to compile it for WinCE. Below is my complete unit code:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button2: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } function GetWinMacAddress: String; public { public declarations } end; function GetIfTable( pIfTable : Pointer; VAR pdwSize : LongInt; bOrder : LongInt ): LongInt; stdcall;var Form1: TForm1; implementation {$R *.lfm} function GetIfTable( pIfTable : Pointer; VAR pdwSize : LongInt; bOrder : LongInt ): LongInt; stdcall; external 'IPHLPAPI.DLL'; { TForm1 } procedure TForm1.FormCreate(Sender: TObject);begin // Below is necessary to be able to see form on the mini device screen Left := 0; Top := 25;end; procedure TForm1.Button2Click(Sender: TObject);begin Memo1.Lines.Add(EmptyStr); Memo1.Lines.Add(GetWinMacAddress);end; function TForm1.GetWinMacAddress: String;const MAX_INTERFACE_NAME_LEN = $100; ERROR_SUCCESS = 0; MAXLEN_IFDESCR = $100; MAXLEN_PHYSADDR = 8; MIB_IF_TYPE_ETHERNET = 6; _MAX_ROWS_ = 20; type MIB_IFROW = Record wszName : Array[0 .. (MAX_INTERFACE_NAME_LEN * 2 - 1)] of char; dwIndex : LongInt; dwType : LongInt; dwMtu : LongInt; dwSpeed : LongInt; dwPhysAddrLen : LongInt; bPhysAddr : Array[0 .. (MAXLEN_PHYSADDR-1)] of Byte; dwAdminStatus : LongInt; dwOperStatus : LongInt; dwLastChange : LongInt; dwInOctets : LongInt; dwInUcastPkts : LongInt; dwInNUcastPkts : LongInt; dwInDiscards : LongInt; dwInErrors : LongInt; dwInUnknownProtos : LongInt; dwOutOctets : LongInt; dwOutUcastPkts : LongInt; dwOutNUcastPkts : LongInt; dwOutDiscards : LongInt; dwOutErrors : LongInt; dwOutQLen : LongInt; dwDescrLen : LongInt; bDescr : Array[0 .. (MAXLEN_IFDESCR - 1)] of Char; end; _IfTable = Record nRows : LongInt; ifRow : Array[1.._MAX_ROWS_] of MIB_IFROW; end; var pIfTable : ^_IfTable; TableSize : LongInt; tmp : String; i,j : Integer; ErrCode : LongInt;begin pIfTable := nil; //------------------------------------------------------------ Result := ''; try //------------------------------------------------------- // First: just get the buffer size. // TableSize returns the size needed. TableSize := 0; // Set to zero so the GetIfTabel function // won't try to fill the buffer yet, // but only return the actual size it needs. GetIfTable(pIfTable, TableSize, 1); if (TableSize < SizeOf(MIB_IFROW) + Sizeof(LongInt)) then begin Exit; // less than 1 table entry?! end; // if-end. // Second: // allocate memory for the buffer and retrieve the // entire table. GetMem(pIfTable, TableSize); ErrCode := GetIfTable(pIfTable, TableSize, 1); if (ErrCode <> ERROR_SUCCESS) then begin Exit; // OK, that did not work. // Not enough memory i guess. end; // if-end. // Read the ETHERNET addresses. for i := 1 to pIfTable^.nRows do try if (pIfTable^.ifRow[i].dwType=MIB_IF_TYPE_ETHERNET) and (pIfTable^.ifRow[i].dwOutOctets <> 0) then begin tmp := ''; for j:=0 to pIfTable^.ifRow[i].dwPhysAddrLen-1 do begin tmp := tmp + format('%.2x:', [ pIfTable^.ifRow[i].bPhysAddr[j] ] ); end; // for-end. //------------------------------------- if Length(tmp)>0 then begin Result := Copy(tmp, 1, Length(tmp) - 1); Exit; end; end; // if-end. except Exit; end; // if-try-except-end. finally if Assigned(pIfTable) then FreeMem(pIfTable, TableSize); end; // if-try-finally-end.end; end.
Solution is not what we were trying to achieve, but it's same result, different path.
Thanks for all the support.
Regards,
Ertan Küçükoğlu
Navigation
[0] Message Index
[#] Next page
[*] Previous page