智能卡用户界面
智能卡用户界面 (UI) 是一个通用对话框,允许用户指定或搜索智能卡以打开 (,即连接到应用程序) 并在应用程序中使用。
下面是使用常用对话框的两种方法。 两者都假定将显示对话框 UI。 有关详细信息,请参阅 OPENCARDNAME。
选择要打开的智能卡
- 声明 OPENCARDNAME 类型的变量。
- 在公共对话框中提供足够的信息,以缩小对调用应用程序正在查找的智能卡的搜索范围。 这包括指定 lpstrGroupNames、 lpstrCardNames 和 rgguidInterfaces。 这还包括指定在公共对话框通过使用 OPENCARDNAME 结构的 dwShareMode 和 dwPreferredProtocols 成员连接到卡时要使用的首选共享模式和协议。
- 调用 GetOpenCardName 函数以向用户显示公共对话框。 将显示一个简单的帮助信息行,如果找到请求的卡片之一,则会在显示中突出显示卡。 对于多个卡名称搜索,将突出显示包含其中一个首选卡片的第一个读取器。
- 然后,用户选择一个卡,单击“确定”,然后连接到智能卡。
搜索特定卡
声明 OPENCARDNAME 类型的变量。
在公共对话框中提供足够的信息,以缩小对调用应用程序正在查找的智能卡的搜索范围。 这包括指定 lpstrGroupNames、 lpstrCardNames 和 rgguidInterfaces。
创建 Connect、 Check 和 Disconnect 回调函数,并相应地设置 lpfnConnect、 lpfnCheck 和 lpfnDisconnect 数据成员。
注意
以这种方式使用通用对话框时,所有三个函数和成员都必须可用。
调用 GetOpenCardName 公共对话框函数。
然后,通用对话框将搜索请求的卡片。 如果找到匹配卡名称或 ATR 字符串,则将按顺序调用 Connect、Check 和 Disconnect 回调函数。 如果卡通过 Check 例程 (即 Check 回调返回 TRUE) ,则会在向用户显示时突出显示此卡。
注意
如果提供了多个卡名称,则包含其中一个请求的卡片并通过 Check 例程的第一个读取器将是所选卡。
如果未找到匹配项,将显示一个通用对话框。