0
如何獲取一些特定於國家/地區的信息可以檢測到的國家?例如。目前的國家代碼,鍵盤佈局或Turbo C中的代碼頁DOS環境?DOS:如何獲得當前的國家代碼或代碼頁在Turbo C
如果Turbo C庫函數無法實現這種功能,某些BIOS調用可能會這樣做(INT 21)?.
KEYB程序能夠顯示例如鍵盤佈局。這對於我的目的來說可能綽綽有餘: https://www.dosbox.com/wiki/KEYB
如何獲取一些特定於國家/地區的信息可以檢測到的國家?例如。目前的國家代碼,鍵盤佈局或Turbo C中的代碼頁DOS環境?DOS:如何獲得當前的國家代碼或代碼頁在Turbo C
如果Turbo C庫函數無法實現這種功能,某些BIOS調用可能會這樣做(INT 21)?.
KEYB程序能夠顯示例如鍵盤佈局。這對於我的目的來說可能綽綽有餘: https://www.dosbox.com/wiki/KEYB
使用INT 21h, AX=6501h。這裏是Turbo C的代碼:
#include <dos.h>
#include <stdio.h>
struct country_info_buffer
{
unsigned char info_id;
unsigned short buffer_size;
unsigned short country_id;
unsigned short code_page;
struct COUNTRY country_info;
};
int main()
{
/* Registers for INT21 call */
union REGS regs;
struct SREGS sregs;
/* Output buffer */
struct country_info_buffer info;
/* Get current value of segment registers */
segread(&sregs);
/* Get extended country information/general internationalization info */
regs.x.ax = 0x6501;
/* Global code page */
regs.x.bx = 0xFFFF;
/* Current country */
regs.x.dx = 0xFFFF;
/* Size of output buffer */
regs.x.cx = sizeof(info);
/* Pointer to output buffer goes to ES:DI */
sregs.es = FP_SEG(&info);
regs.x.di = FP_OFF(&info);
/* Call int21 */
intdosx(®s, ®s, &sregs);
if (regs.x.cflag)
{
printf("Call failed, ax=%d\n", regs.x.ax);
return 1;
}
printf("Country code: %d, Code page: %d\n", info.country_id, info.code_page);
return 0;
}
Btw。 Ralf Brown的中斷列表是DOS系統調用的好資源。太糟糕了,甚至在DOS退出之前就停止了維護,所以一些「最新」的東西不在那裏描述。
優秀的答案。不幸的是,DOSBox似乎沒有提供有用的國家或代碼頁信息。返回的信息是1 + 437(美國國家和代碼頁)。當前的鍵盤佈局可能是檢測國家唯一有用的來源。 – digitalfootmark