想用Delphi做一个输入法切换的程序
现在想用delphi做一个按一个键就可以更换系统的输入法,如在开了多个word或txt文本,按F8可以自动实现输入法的切换。也就是说按F8=按了ctrl+shift,
网上查了一些资料,keybd_event API和PostMessage 因为是要全部都可以设置,所以keybd_event 好像不是很适用,用postmessage 也测试过,返回也为true,但就是切换不了输入法。。
下面为源码:
请高手看看
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,shellapi, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
//procedure KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
procedure WMHotKey(var msg:tmessage); message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
HotKeyId: Integer; //热键
handle:Thandle;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
//注册热键
self.Height :=1;
self.Width :=1;
HotKeyId := GlobalAddAtom('rspsoft');
RegisterHotKey(Handle,HotKeyId,0,VK_F5);
end;
procedure TForm1.WMHotKey(var msg:tmessage);
var keyno :char;
s:boolean;
begin
if (Msg.LParamHi = Vk_F5) and (Msg.LParamLo = 0) then
begin
// showmessage('F5');
s:=PostMessage(FindWindow(nil,nil),WM_SYSKEYDOWN,VK_CONTROL+VK_SHIFT,0) ; //其他的都是ok的,就这一段代码有问题. // showmessage(booltostr(s));
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
//注销热键
UnRegisterHotKey(handle,HotKeyId);
GlobalDeleteAtom(HotKeyId);
end;
end.