⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winscard.pas

📁 Delphi 用的PSCS控件即例子程序,本人稍作修改了例子程序
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      rgguidInterfaces: LPCGUID;
      cguidInterfaces: DWORD;
      lpstrRdr: LPSTR;
      nMaxRdr: DWORD;
      lpstrCard: LPSTR;
      nMaxCard: DWORD;
      lpstrTitle: LPCSTR;
      dwFlags: DWORD;
      pvUserData: Pointer;
      dwShareMode: DWORD;
      dwPreferredProtocols: DWORD;
      dwActiveProtocol: DWORD;
      lpfnConnect: LPOCNCONNPROCA;
      lpfnCheck: LPOCNCHKPROC;
      lpfnDisconnect: LPOCNDSCPROC;
      hCardHandle: SCARDHANDLE;
   end;
   {$EXTERNALSYM OPENCARDNAMEA}

   POPENCARDNAMEW = ^OPENCARDNAMEW;
   {$EXTERNALSYM POPENCARDNAMEW}
   LPOPENCARDNAMEW = ^OPENCARDNAMEW;
   {$EXTERNALSYM LPOPENCARDNAMEW}
   OPENCARDNAMEW = record
      dwStructSize: DWORD;
      hwndOwner: HWND;
      hSCardContext: SCARDCONTEXT;
      lpstrGroupNames: LPWSTR;
      nMaxGroupNames: DWORD;
      lpstrCardNames: LPWSTR;
      nMaxCardNames: DWORD;
      rgguidInterfaces: LPCGUID;
      cguidInterfaces: DWORD;
      lpstrRdr: LPWSTR;
      nMaxRdr: DWORD;
      lpstrCard: LPWSTR;
      nMaxCard: DWORD;
      lpstrTitle: LPCWSTR;
      dwFlags: DWORD;
      pvUserData: Pointer;
      dwShareMode: DWORD;
      dwPreferredProtocols: DWORD;
      dwActiveProtocol: DWORD;
      lpfnConnect: LPOCNCONNPROCW;
      lpfnCheck: LPOCNCHKPROC;
      lpfnDisconnect: LPOCNDSCPROC;
      hCardHandle: SCARDHANDLE;
   end;
   {$EXTERNALSYM OPENCARDNAMEW}

   {$IFDEF UNICODE}
      OPENCARDNAME = OPENCARDNAMEW;
      POPENCARDNAME = POPENCARDNAMEW;
      LPOPENCARDNAME = LPOPENCARDNAMEW;
   {$ELSE}
      OPENCARDNAME = OPENCARDNAMEA;
      POPENCARDNAME = POPENCARDNAMEA;
      LPOPENCARDNAME = LPOPENCARDNAMEA;
   {$ENDIF}
   {$EXTERNALSYM OPENCARDNAME}
   {$EXTERNALSYM POPENCARDNAME}
   {$EXTERNALSYM LPOPENCARDNAME}

{$IFDEF WinSCard_DYNLINK}
var
   SCardEstablishContext:          TSCardEstablishContext = nil;
   SCardReleaseContext:            TSCardReleaseContext = nil;
   SCardListReaderGroups:          TSCardListReaderGroups = nil;
   SCardListReaders:               TSCardListReaders = nil;
   SCardListCards:                 TSCardListCards = nil;
   SCardListInterfaces:            TSCardListInterfaces = nil;
   SCardGetProviderId:             TSCardGetProviderId = nil;
   SCardGetCardTypeProviderName:   TSCardGetCardTypeProviderName = nil;
   SCardIntroduceReaderGroup:      TSCardIntroduceReaderGroup = nil;
   SCardForgetReaderGroup:         TSCardForgetReaderGroup = nil;
   SCardIntroduceReader:           TSCardIntroduceReader = nil;
   SCardForgetReader:              TSCardForgetReader = nil;
   SCardAddReaderToGroup:          TSCardAddReaderToGroup = nil;
   SCardRemoveReaderFromGroup:     TSCardRemoveReaderFromGroup = nil;
   SCardIntroduceCardType:         TSCardIntroduceCardType = nil;
   SCardSetCardTypeProviderName:   TSCardSetCardTypeProviderName = nil;
   SCardForgetCardType:            TSCardForgetCardType = nil;
   SCardFreeMemory:                TSCardFreeMemory = nil;
   SCardLocateCards:               TSCardLocateCards = nil;
   SCardGetStatusChange:           TSCardGetStatusChange = nil;
   SCardCancel:                    TSCardCancel = nil;
   SCardConnect:                   TSCardConnect = nil;
   SCardReconnect:                 TSCardReconnect = nil;
   SCardDisconnect:                TSCardDisconnect = nil;
   SCardBeginTransaction:          TSCardBeginTransaction = nil;
   SCardEndTransaction:            TSCardEndTransaction = nil;
   SCardStatus:                    TSCardStatus = nil;
   SCardTransmit:                  TSCardTransmit = nil;
   SCardControl:                   TSCardControl = nil;
   SCardGetAttrib:                 TSCardGetAttrib = nil;
   SCardSetAttrib:                 TSCardSetAttrib = nil;
   SCardIsValidContext:            TSCardIsValidContext = nil;
   SCardLocateCardsByATR:          TSCardLocateCardsByATR = nil;
   SCardAccessStartedEvent:        TSCardAccessStartedEvent = nil;
   SCardReleaseStartedEvent:       TSCardReleaseStartedEvent = nil;
   bPCSCLoaded: Boolean; 
   hWinscardDLL: THandle;

   { load PC/SC DLL, pass variable for handle to unload DLL later }
   function PCSCLoadDLL: Boolean;
   {$EXTERNALSYM PCSCLoadDLL}
   procedure PCSCUnloadDLL;
   {$EXTERNALSYM PCSCUnloadDLL}
{$ENDIF}

implementation

{$IFDEF WinSCard_DYNLINK}
procedure PCSCUnloadDLL;
begin
   if hWinscardDLL <> 0 then
      FreeLibrary(hWinscardDLL);
end;

function PCSCLoadDLL: Boolean;
begin

   if hWinscardDLL = 0 then
      hWinscardDLL := LoadLibrary('winscard.dll');

   if hWinscardDLL = 0 then
   begin
      Result := False;
      Exit;
   end;

(* WindowsXP winscard.dll
   8/23/2001   0:00          93,184  winscard.dll
   Exports from WinSCard.dll
   63 exported name(s), 63 export addresse(s).  Ordinal base is 1.
    Ord. Hint Name
    ---- ---- ----
       1 0000 ClassInstall32
       2 0001 SCardAccessNewReaderEvent *New
       5 0002 SCardAccessStartedEvent
       6 0003 SCardAddReaderToGroupA
       7 0004 SCardAddReaderToGroupW
       8 0005 SCardBeginTransaction
       9 0006 SCardCancel
      10 0007 SCardConnectA
      11 0008 SCardConnectW
      12 0009 SCardControl
      13 000A SCardDisconnect
      14 000B SCardEndTransaction
      15 000C SCardEstablishContext
      16 000D SCardForgetCardTypeA
      17 000E SCardForgetCardTypeW
      18 000F SCardForgetReaderA
      19 0010 SCardForgetReaderGroupA
      20 0011 SCardForgetReaderGroupW
      21 0012 SCardForgetReaderW
      22 0013 SCardFreeMemory
      23 0014 SCardGetAttrib
      24 0015 SCardGetCardTypeProviderNameA
      25 0016 SCardGetCardTypeProviderNameW
      26 0017 SCardGetProviderIdA
      27 0018 SCardGetProviderIdW
      28 0019 SCardGetStatusChangeA
      29 001A SCardGetStatusChangeW
      30 001B SCardIntroduceCardTypeA
      31 001C SCardIntroduceCardTypeW
      32 001D SCardIntroduceReaderA
      33 001E SCardIntroduceReaderGroupA
      34 001F SCardIntroduceReaderGroupW
      35 0020 SCardIntroduceReaderW
      36 0021 SCardIsValidContext
      37 0022 SCardListCardsA
      38 0023 SCardListCardsW
      39 0024 SCardListInterfacesA
      40 0025 SCardListInterfacesW
      41 0026 SCardListReaderGroupsA
      42 0027 SCardListReaderGroupsW
      43 0028 SCardListReadersA
      44 0029 SCardListReadersW
      45 002A SCardLocateCardsA
      46 002B SCardLocateCardsByATRA
      47 002C SCardLocateCardsByATRW
      48 002D SCardLocateCardsW
      49 002E SCardReconnect
       3 002F SCardReleaseAllEvents *New
      50 0030 SCardReleaseContext
       4 0031 SCardReleaseNewReaderEvent *New
      51 0032 SCardReleaseStartedEvent 
      52 0033 SCardRemoveReaderFromGroupA
      53 0034 SCardRemoveReaderFromGroupW
      54 0035 SCardSetAttrib
      55 0036 SCardSetCardTypeProviderNameA
      56 0037 SCardSetCardTypeProviderNameW
      57 0038 SCardState *New
      58 0039 SCardStatusA
      59 003A SCardStatusW
      60 003B SCardTransmit
      61 003C g_rgSCardRawPci
      62 003D g_rgSCardT0Pci
      63 003E g_rgSCardT1Pci
    *)
                       
   @SCardEstablishContext        := GetProcAddress(hWinscardDLL, 'SCardEstablishContext');
   @SCardReleaseContext          := GetProcAddress(hWinscardDLL, 'SCardReleaseContext');
   @SCardListReaderGroups        := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListReaderGroupsW'{$ELSE}'SCardListReaderGroupsA'{$ENDIF});
   @SCardListReaders             := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListReadersW'{$ELSE}'SCardListReadersA'{$ENDIF});
   @SCardListCards               := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListCardsW'{$ELSE}'SCardListCardsA'{$ENDIF});
   @SCardListInterfaces          := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardListInterfacesW'{$ELSE}'SCardListInterfacesALib'{$ENDIF}); {SCardListInterfacesALib - alib?}
   @SCardGetProviderId           := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardGetProviderIdW'{$ELSE}'SCardGetProviderIdA'{$ENDIF});
   @SCardGetCardTypeProviderName := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardGetCardTypeProviderNameW'{$ELSE}'SCardGetCardTypeProviderNameA'{$ENDIF});
   @SCardIntroduceReaderGroup    := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardIntroduceReaderGroupW'{$ELSE}'SCardIntroduceReaderGroupA'{$ENDIF});
   @SCardForgetReaderGroup       := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardForgetReaderGroupW'{$ELSE}'SCardForgetReaderGroupA'{$ENDIF});
   @SCardIntroduceReader         := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardIntroduceReaderW'{$ELSE}'SCardIntroduceReaderA'{$ENDIF});
   @SCardForgetReader            := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardForgetReaderW'{$ELSE}'SCardForgetReaderA'{$ENDIF});
   @SCardAddReaderToGroup        := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardAddReaderToGroupW'{$ELSE}'SCardAddReaderToGroupA'{$ENDIF});
   @SCardRemoveReaderFromGroup   := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardRemoveReaderFromGroupW'{$ELSE}'SCardRemoveReaderFromGroupA'{$ENDIF});
   @SCardIntroduceCardType       := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardIntroduceCardTypeW'{$ELSE}'SCardIntroduceCardTypeA'{$ENDIF});
   @SCardSetCardTypeProviderName := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardSetCardTypeProviderNameW'{$ELSE}'SCardSetCardTypeProviderNameA'{$ENDIF});
   @SCardForgetCardType          := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardForgetCardTypeW'{$ELSE}'SCardForgetCardTypeA'{$ENDIF});
   @SCardFreeMemory              := GetProcAddress(hWinscardDLL, 'SCardFreeMemory');
   @SCardLocateCards             := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardLocateCardsW'{$ELSE}'SCardLocateCardsA'{$ENDIF});
   @SCardGetStatusChange         := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardGetStatusChangeW'{$ELSE}'SCardGetStatusChangeA'{$ENDIF});
   @SCardCancel                  := GetProcAddress(hWinscardDLL, 'SCardCancel');
   @SCardConnect                 := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardConnectW'{$ELSE}'SCardConnectA'{$ENDIF});
   @SCardReconnect               := GetProcAddress(hWinscardDLL, 'SCardReconnect');
   @SCardDisconnect              := GetProcAddress(hWinscardDLL, 'SCardDisconnect');
   @SCardBeginTransaction        := GetProcAddress(hWinscardDLL, 'SCardBeginTransaction');
   @SCardEndTransaction          := GetProcAddress(hWinscardDLL, 'SCardEndTransaction');
   @SCardStatus                  := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardStatusW'{$ELSE}'SCardStatusA'{$ENDIF});
   @SCardTransmit                := GetProcAddress(hWinscardDLL, 'SCardTransmit');
   @SCardControl                 := GetProcAddress(hWinscardDLL, 'SCardControl');
   @SCardGetAttrib               := GetProcAddress(hWinscardDLL, 'SCardGetAttrib');
   @SCardSetAttrib               := GetProcAddress(hWinscardDLL, 'SCardSetAttrib');
   @SCardIsValidContext          := GetProcAddress(hWinscardDLL, 'SCardIsValidContext');
   @SCardLocateCardsByATR        := GetProcAddress(hWinscardDLL, {$IFDEF UNICODE}'SCardLocateCardsByATRW'{$ELSE}'SCardLocateCardsByATRA'{$ENDIF});
   @SCardAccessStartedEvent      := GetProcAddress(hWinscardDLL, 'SCardAccessStartedEvent');
   @SCardReleaseStartedEvent     := GetProcAddress(hWinscardDLL, 'SCardReleaseStartedEvent');

   Result := True;

end;
{$ELSE}
const
   WinSCardDLL = 'winscard.dll';

   function SCardEstablishContext;           external WinSCardDLL name 'SCardEstablishContext';
   function SCardReleaseContext;             external WinSCardDLL name 'SCardReleaseContext';
   function SCardListReaderGroupsW;          external WinSCardDLL name 'SCardListReaderGroupsW';
   function SCardListReaderGroupsA;          external WinSCardDLL name 'SCardListReaderGroupsA';
   function SCardListReadersW;               external WinSCardDLL name 'SCardListReadersW';
   function SCardListReadersA;               external WinSCardDLL name 'SCardListReadersA';
   function SCardListCardsW;                 external WinSCardDLL name 'SCardListCardsW';
   function SCardListCardsA;                 external WinSCardDLL name 'SCardListCardsA';
   function SCardListInterfacesW;            external WinSCardDLL name 'SCardListInterfacesW';
   function SCardListInterfacesA;            external WinSCardDLL name 'SCardListInterfacesA';
   function SCardGetProviderIdW;             external WinSCardDLL name 'SCardGetProviderIdW';
   function SCardGetProviderIdA;             external WinSCardDLL name 'SCardGetProviderIdA';
   function SCardGetCardTypeProviderNameW;   external WinSCardDLL name 'SCardGetCardTypeProviderNameW';
   function SCardGetCardTypeProviderNameA;   external WinSCardDLL name 'SCardGetCardTypeProviderNameA';
   function SCardIntroduceReaderGroupW;      external WinSCardDLL name 'SCardIntroduceReaderGroupW';
   function SCardIntroduceReaderGroupA;      external WinSCardDLL name 'SCardIntroduceReaderGroupA';
   function SCardForgetReaderGroupW;         external WinSCardDLL name 'SCardForgetReaderGroupW';
   function SCardForgetReaderGroupA;         external WinSCardDLL name 'SCardForgetReaderGroupA';
   function SCardIntroduceReaderW;           external WinSCardDLL name 'SCardIntroduceReaderW';
   function SCardIntroduceReaderA;           external WinSCardDLL name 'SCardIntroduceReaderA';
   function SCardForgetReaderW;              external WinSCardDLL name 'SCardForgetReaderW';
   function SCardForgetReaderA;              external WinSCardDLL name 'SCardForgetReaderA';
   function SCardAddReaderToGroupW;          external WinSCardDLL name 'SCardAddReaderToGroupW';
   function SCardAddReaderToGroupA;          external WinSCardDLL name 'SCardAddReaderToGroupA';
   function SCardRemoveReaderFromGroupW;     external WinSCardDLL name 'SCardRemoveReaderFromGroupW';
   function SCardRemoveReaderFromGroupA;     external WinSCardDLL name 'SCardRemoveReaderFromGroupA';
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -