Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Как узнать подключенные к компу Card Reader ы?   Найти похожие ветки 

 
iNV   (2006-07-13 18:30) [0]

Нашел в MSDN функции, но не понятно как можно вернуть название ридеров. Есть код на C++ помогите его портировать в Delphi плз.


LPTSTR          pmszReaders = NULL;
LPTSTR          pReader;
LONG            lReturn, lReturn2;
DWORD           cch = SCARD_AUTOALLOCATE;

// Retrieve the list the readers.
// hSC was set by a previous call to SCardEstablishContext.
lReturn = SCardListReaders(hSC,
                          NULL,
                          (LPTSTR)&pmszReaders,
                          &cch );
switch( lReturn )
{
   case SCARD_E_NO_READERS_AVAILABLE:
       printf("Reader is not in groups.\n");
       // Take appropriate action.
       // ...
       break;

   case SCARD_S_SUCCESS:
       // Do something with the multi string of readers.
       // Here, we"ll merely output the values.
       // A double-null terminates the list of values.
       pReader = pmszReaders;
       while ( "\0" != *pReader )
       {
           // Display the value.
           printf("Reader: %S\n", pReader );
           // Advance to the next value.
           pReader = pReader + wcslen(pReader) + 1;
       }
       // Free the memory.
       lReturn2 = SCardFreeMemory( hSC,
                                  pmszReaders );
       if ( SCARD_S_SUCCESS != lReturn2 )
           printf("Failed SCardFreeMemory\n");
       break;

default:
       printf("Failed SCardListReaders\n");
       // Take appropriate action.
       // ...
       break;
}


 
StriderMan ©   (2006-07-13 19:57) [1]

Это ж для смарт карт.

возился как-то с ними..
вот, может поможет...


type
 //SCard API
 SCARDCONTEXT = PULONG;

TSCardListReaders = function(AContext: SCARDCONTEXT;
                              AGroups: PChar;
                              AReaders: PChar;
                              ALength: LPDWORD): LongInt; stdcall;


 
iNV ©   (2006-07-14 12:56) [2]

Для того что бы начать работать с устройством, нужно определить какие ридеры подключенны, никто не знает, как это сделать в Delphi?


 
StriderMan ©   (2006-07-14 13:10) [3]


> Для того что бы начать работать с устройством

сначала нужно вызвать процедуру SCardEstablishContext

TSCardEstablishContext = function(AScope: DWORD;
                        AReserved1: Pointer;
                        AReserved2: Pointer;
                        AContext: SCARDCONTEXT): LongInt; stdcall;

fDllSCardEstablishContext := GetProcAddress(fWinScardDllH, "SCardEstablishContext");


 
StriderMan ©   (2006-07-14 13:19) [4]


> никто не знает, как это сделать в Delphi?

в чем проблема-то? как использовать функции API? или вопрос непосредственно по SCard?


 
bobson   (2006-09-07 16:26) [5]

Я писал такой интерфейсный модуль для winscard.dll:

type

 PCharArray =  ^TCharArray;
 TCharArray = array[0..1024] of Char;

 TScardIOResult = record
   Protocol: Integer;
   PciLength: Integer
 end;

 
 //Функции, импортируемые из WinSCard.dll  
 //Получает контекст ридеров
 function SCardEstablishContext(dwScope: LongInt;
                   nNotUsed1, nNotUsed2: Pointer;
                   var phContext: Integer): Integer;
                   stdcall; far; external "WINSCARD.DLL" index 15;
 //Освобождает контекст ридеров
 function SCardReleaseContext(phContext: Integer): Integer;
                   stdcall; far; external "WINSCARD.DLL" index 50;
 //Получает контекст карты ANSI
 function SCardConnectA(hContext: Integer; cReaderName: PChar;
                        dwShareMode, dwPrefProtocol: LongInt;
                        var phCard, ActiveProtocol: Integer): Integer;
                        stdcall; far; external "WINSCARD.DLL" index 10;
  //Получает контекст карты UNICODE
 function SCardConnectW(hContext: Integer; cReaderName: PChar;
                        dwShareMode, dwPrefProtocol: LongInt;
                        var phCard, ActiveProtocol: Integer): Integer;
                        stdcall; far; external "WINSCARD.DLL" index 11;
 //Освобождает контекст карты
 function SCardDisconnect(hCard, Disposition: Integer): Integer;
                        stdcall; far; external "WINSCARD.DLL" index 13;
 //Получает список групп ридеров ANSI
 function SCardListReaderGroupsA(hContext: Integer;
                   var cGroups: PCharArray; var nStringSize: Integer): Integer;
                   stdcall; far; external "WINSCARD.DLL" index 41;
 //Получает список групп ридеров UNICODE
 function SCardListReaderGroupsW(hContext: Integer;
                   var cGroups: PCharArray; var nStringSize: Integer): Integer;
                   stdcall; far; external "WINSCARD.DLL" index 42;
 //Получает список ридеров ANSI
 function  SCardListReadersA(hContext: Integer; cGroups: PCharArray;
                          var cReaderLists: PCharArray;
                          var nReaderCount: Integer): Integer;
                          stdcall; far; external "WINSCARD.DLL" index 43;
 //Получает список ридеров UNICODE
 function  SCardListReadersW(hContext: Integer; cGroups: PCharArray;
                          var cReaderLists: PCharArray;
                          var nReaderCount: Integer): Integer;
                          stdcall; far; external "WINSCARD.DLL" index 44;
 //Освобождает память, выделенную под контекст ридеров
 function  SCardFreeMemory(hContext: Integer;
                          var cResourceToFree: PCharArray): Integer;
                          stdcall; far; external "WINSCARD.DLL" index 22;

 //Получает атрибуты карты
 function SCardGetAttrib(nCard: Integer; dwAttrId: LongInt;
                         var bytRecvAttr: PMFULBufer;
                         var nRecLen: Integer): Integer;
                         stdcall; far; external "WINSCARD.DLL" index 23;
 //Поддерживает обмен информацией с картой
 function SCardTransmit(hCard: Integer; var  pioSendPci: TScardIOResult;
                        pbSendBuffer: array of byte;
                        cbSendLength: Integer;
                        var pioRecvPci: TScardIOResult;
                        var pbRecvBuffer: byte;
                        var pcbRecvLength: Integer): Integer;
                        stdcall; far; external "WINSCARD.DLL" index 60;

Удачи...



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
15-1167139167
Rouse_
2006-12-26 16:19
2007.01.21
Чего они сказать то хотели?


15-1167277841
Slider007
2006-12-28 06:50
2007.01.21
С днем рождения ! 28 декабря


15-1167302964
Данил.Ялта
2006-12-28 13:49
2007.01.21
Разбить страницу на части


4-1157886409
Beglec
2006-09-10 15:06
2007.01.21
Подсчет страниц печати на принтере


2-1168017555
XfroSt
2007-01-05 20:19
2007.01.21
Tmemo и видимые строки