![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать подключенные к компу Card Reader'ы? [D7, WinXP]
iNV © (2006-07-13 18:30:00)Нашел в 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;
}
bobson (2006-09-07 16:26:00) [1]Я писал такой интерфейсный модуль для 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;
Удачи...
StriderMan (2006-07-14 13:19:00) [2]
> никто не знает, как это сделать в Delphi?
в чем проблема-то? как использовать функции API? или вопрос непосредственно по SCard?
StriderMan (2006-07-14 13:10:00) [3]
> Для того что бы начать работать с устройством
сначала нужно вызвать процедуру SCardEstablishContext
TSCardEstablishContext = function(AScope: DWORD;
AReserved1: Pointer;
AReserved2: Pointer;
AContext: SCARDCONTEXT): LongInt; stdcall;
fDllSCardEstablishContext := GetProcAddress(fWinScardDllH, 'SCardEstablishContext');
iNV (2006-07-14 12:56:00) [4]Для того что бы начать работать с устройством, нужно определить какие ридеры подключенны, никто не знает, как это сделать в Delphi?
StriderMan (2006-07-13 19:57:00) [5]Это ж для смарт карт.
возился как-то с ними..
вот, может поможет...
type
//SCard API
SCARDCONTEXT = PULONG;
TSCardListReaders = function(AContext: SCARDCONTEXT;
AGroups: PChar;
AReaders: PChar;
ALength: LPDWORD): LongInt; stdcall;