static DWORD m_BASEADD1 = 0x009B727C;
static DWORD runcall = 0x00707C70;
typedef struct _speak
{
DWORD dwType;
DWORD unknow1;
DWORD unknow2;
WORD dwLen;
char SayWord[50];
} void MainDlg::OnBnClickedButton3()
{
//SPEAK();
CString sayword;
int charsize,charsize1;
m_EDIT2.GetWindowText(sayword);
charsize = wcslen(sayword);
charsize1 = charsize*2+14;
Speak* ppspeak = new Speak;
ppspeak->dwType = 1;
ppspeak->unknow1 = 0;
ppspeak->unknow2 = 0;
ppspeak->dwLen = wcslen(sayword);
memcpy(ppspeak->SayWord,sayword,wcslen(sayword)*2);
__asm
{
pushad;
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov edi,m_BASEADD1;
mov edi,dword ptr [edi];
push 0;
push 2
push ppspeak;
push 1
mov eax,charsize1;
push 0xB;
call runcall
popad;
}
delete ppspeak;
} 不胜感激啊!!!!!!!!!!!!!
const m_BASEADD1:DWORD = $009B727C;
const runcall:DWORD = $00707C70;
{$j-}
type
_speak = record
dwType: DWORD ;
unknow1: DWORD ;
unknow2: DWORD ;
dwLen: WORD ;
SayWord: array[0..50-1] of AnsiChar;
end;
Speak = _speak;
LPSpeak = ^Speak ;procedure MainDlg.Button3Click(Sender: TObject);
var
sayword: WideString;
charsize,charsize1: Integer;
ppspeak:LPSpeak ;
begin
sayword := m_EDIT2.Text;//TEdit
charsize := Length(sayword);
charsize1 := charsize*2+14;
new(ppspeak);
ppspeak^.dwType := 1;
ppspeak^.unknow1 := 0;
ppspeak^.unknow2 := 0;
ppspeak^.dwLen := Length(sayword);
move(sayword[1],ppspeak^.SayWord[0],Length(sayword)*2);
asm
pushad
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov edi,m_BASEADD1
mov edi,dword ptr [edi]
push 0
push 2
push ppspeak;
push 1
mov eax,charsize1;
push $B;
call runcall
popad;
end
dispose( ppspeak);
end;