Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

Как узнать подключенные к компу 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
4-1158067773
max1991
2006-09-12 17:29
2007.01.21
Икрнка в трее


8-1148966463
-=Germe$=-
2006-05-30 09:21
2007.01.21
сплайн-интерполяция


3-1162220217
jack128
2006-10-30 17:56
2007.01.21
Помогите с запросом


15-1167809375
Хмм
2007-01-03 10:29
2007.01.21
DLL .... а можно ли...


2-1168007676
FIL-23
2007-01-05 17:34
2007.01.21
изменить цвет кнопок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский