Forum > Windows CE

Reading MAC address of ethernet (wifi) from WinCE device

<< < (2/3) > >>

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

Go to full version