The code is very simple to use, you call a procedure passing a callback procedure as its argument (just like for example win32 api EnumChildWindows)

WepKeys.zip


Code:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFrmMain = class(TForm)
    mmoLog: TMemo;
    btnDump: TButton;
    procedure btnDumpClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;

implementation

uses
  uWEPUtils, uUtils;

{$R *.dfm}

//This is your callback function: we print the result on a TMemo named mmoLog
function GetDataCallBack(
                DataType: Cardinal;
                Data: Pointer;
                DataSize: Cardinal
                ): Boolean;
begin
  case DataType of
    1:  //WiFi Network Interface GUID
      begin
        FrmMain.mmoLog.Lines.Add(PAnsiChar(Data));
      end;
    2:  //HOT-SPOT name
      begin
        FrmMain.mmoLog.Lines.Add(PAnsiChar(Data));
      end;
    3:  //HOT-SPOT stored Wep Key: DumpData is a function defined in unit
         //uUtils which dumps a buffer in Hex Editor style 
      begin
        FrmMain.mmoLog.Lines.Add(DumpData(Data, DataSize));
      end;
  end;
end;

procedure TFrmMain.btnDumpClick(Sender: TObject);
begin
  //
  mmoLog.Lines.Clear;
  //It is so simple ... we call GetWZCSVCData (defined in unit uWepUtils)     //passing our callback function
  GetWZCSVCData(@GetDataCallBack);
end;