Я делал так:
Код
unsigned char APMSoftPowerOff(void)
{
asm{
push AX
push BX
push CX
mov AX, 0x5300 // 1: APM install check
mov BX, 0x0000
int 0x15
jc APM_err
mov AX, 0x5301 // 2: APM interface connect
mov BX, 0x0000
int 0x15
jc APM_err
mov AX, 0x530E // 3: APM driver version
mov BX, 0x0000
mov CX, 0x0102 // APM v1.2 (CH=01, CL=02)
int 0x15
jc APM_err
mov AX, 0x5307 // 4: APM set power state
mov BX, 0x0001
mov CX, 0x0003 // power off
int 0x15
jc APM_err
mov AX, 0x5304 // 5: APM interface diconnect (only if power off error)
mov BX, 0x0000
int 0x15
pop CX
pop BX
pop AX
}
APM_err:
return(1);
}
А источник - старый добрый DOS TechHelp, раздел APM API.