Jamen du skal da bare spørge til det funker : )
Fordi at sendkeys ikke medtager fx ( & ) er pga. den understøtter en lille form for scripting.
Fx kan den også simulere taster ved at man skriver "%" for at den skal holde "Alt" nede mens den simulere næste tast. Hvis der er parentes efter en modifier fx "+(hej)" så vil den skrive "hej" mens den holder shift nede, resultatatet bliver self "HEJ".
Du kan læse lidt om det her
http://www.winguides.com/scripting/reference.php?id=149Dvs. for at sende en parentes kan man omgå det ved at sige den skal holde shift nede mens den sender næste tast og jeg sætter jo så bare næste tast til "8" eller "9" for hhv ( & ).
Det vil så se sådan ud:
SendKeys('et smilie: :-D :-+9 :-+8 ;-+0', true);
Jeg har lavet så de modkeys som blev holdt nede bliver sat igen efter teksten er sendt.
Det kan jo nok godt svare sig at lave en ny procedure som hedder fx SendText(msg:string) og i den kan du så smide de ting som jeg eller bruger her, det vil gøre det lidt smartere til de næste hotkeys som du nok skal have tilføjet.
procedure TForm1.WMHotkey(var Msg: TWMHotkey);
var
ctrldown, shiftdown, altdown: boolean;
procedure GetModKeys;
begin
ctrldown := IsKeyDown(vk_CONTROL);
shiftdown := IsKeyDown(VK_SHIFT);
altdown := IsKeyDown(VK_MENU);
end;
procedure ReleaseModKeys;
begin
if ctrldown then
Keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
if shiftdown then
Keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
if altdown then
Keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
end;
procedure RestoreModKeys;
begin
if ctrldown then
Keybd_event(VK_CONTROL, 0, 0, 0);
if shiftdown then
Keybd_event(VK_SHIFT, 0, 0, 0);
if altdown then
Keybd_event(VK_MENU, 0, 0, 0);
end;
begin
case Msg.HotKey of
1:
begin
GetModKeys;
ReleaseModKeys;
SendKeys('et smilie: :-D :-+9 :-+8 ;-+0', true);
RestoreModKeys;
end;
end;
end;
Jeg håber det giver lidt mening. Spørg hvis der er mere som er træls : )