klavyeye tuş bastırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
myalcin
Üye
Mesajlar: 63
Kayıt: 11 Mar 2008 03:45

klavyeye tuş bastırma

Mesaj gönderen myalcin »

merhaba arkadaşlar.
Başka programlarda kullanmak için klavyeye tuş bastırmam gerekiyor.
Mesela şu harfleri kullanmak istiyorum:
Á á É é
Í í Ñ ñ Ó ó
Bunların chr kodlarını falan biliyorum.
Ben win butonu+1 e bastığımda klavyeden á tuşu basılmış etkisi verecek. Ve bulunduğum textarea vs ye yazacak.
kod şu şekilde
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i,id1,id2,id3:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
Application.ShowMainForm:=false;
id1:=GlobalAddAtom('hotkey');
RegisterHotKey(handle,id1,MOD_WIN,49);
id2:=GlobalAddAtom('hotkey1');
RegisterHotKey(handle,id2,MOD_WIN,50);
id3:=GlobalAddAtom('hotkey2');
RegisterHotKey(handle,id3,mod_WIN,51);



end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id1);
UnRegisterHotKey(handle,id2);
UnRegisterHotKey(handle,id3);
end;

procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_WIN) and (msg.LParamHi=49) then
begin

keybd_event(VkKeyScanA('á'), 1, 0, 0); //normal karakterlerde problem olmuyor. mesela 'a' yı yazıyor.
end;
if (msg.LParamLo=MOD_WIN) and (msg.LParamHi=50) then
begin
keybd_event(VkKeyScanA('é'), 1, 0, 0);
end;
if (msg.LParamLo=MOD_WIN) and (msg.LParamHi=51) then
begin
keybd_event(VkKeyScanA('ó'), 1, 0, 0);
end;
end;


end.

Bunlar ispanyolca karakterler. İnternette ispanyolca sitelerinde artık kopyala yapıştır yapmaktan bıktım karakterleri.
win+1 e basacam yazı alanına "á" yı yazacak. Ama karakter setini bu kodlarda tanımıyor herhalde. Unicode gibi birşey yapmak gerekli.
Yardımlarınız için teşekkürler.
myalcin
Üye
Mesajlar: 63
Kayıt: 11 Mar 2008 03:45

Re: klavyeye tuş bastırma

Mesaj gönderen myalcin »

yapmak istediğimi şu şekilde yaptım..

Clipboard.AsText:='é';
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Clipboard.Clear;

Clipboard'a kopyalıyorum CTRL+V ye bastırıyorum, ve clipboard'u temizliyorum. :D
Tabi yinede ilk sorunun cevabını bilen varsa paylaşabilir. Bilgisayarın dilinde olmayan karakterleri basmıyor ilkinde.
İyi çalışmalar
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: klavyeye tuş bastırma

Mesaj gönderen conari »

ya vatandaş bu işten önce clipboarda önemli bir şey aldı ise?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
myalcin
Üye
Mesajlar: 63
Kayıt: 11 Mar 2008 03:45

Re: klavyeye tuş bastırma

Mesaj gönderen myalcin »

Evet o dediğini bizzat yaşadım. Onun için birinci yöntemi çalıştırmak gerekecek.. :)
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: klavyeye tuş bastırma

Mesaj gönderen Battosai »

İstediğiniz karakterleri yazdırması lazım...kullandığınız metotlarda bir sıkıntı olabilir Tuş gönderme fonksiyonları olacaktı burda, Sendkeys diye bi arama yaparsanız belki çalışacak kodlara ulaşabilirsiniz...
Cevapla