Ik ben bezig met een programmaatje dat edit.text doorstuurt naar een opgegeven venster. Ik heb hiervoor een component gevonden:
SendKeys.pas
Het doorsturen lukt maar half.
Alleen letters in uppercase worden goed weergegeven. Als je ze in lowercase invoert dat worden er rare tekens naar het doelprogramma gestuurt.
Ik wilde de string www.adres.nl doorsturen naar het doelprogramma.
Dit lukt voor geen meter
Wat ik tot nu toe heb:
Wat voorbeelden:
output:
t5ststr9n7
output:
teststring
output:
wwwgooglenl
Maar hoe krijg ik daar nu een .(punt) tussen?
Heb echt al alles geprobeerd. Ben er al 2 dagen mee bezig en met google/delphi sites kom ik ook niet veel verder.
Wat ik uitgevogeld heb is dat ik waarschijnlijk iets met #46 moet doen
Dat is de punt. Maar ergens anders kom ik weer het getal 110 tegen.
Ik heb ook al zitten spelen met Ord en Chr, maar het lukt maar niet.
Iemand een idee hoe ik dit kan oplossen?
SendKeys.pas
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
| {****************************************************}
{ SendKeys Unit for Delphi 32 }
{ Copyright (c) 1999 by Borut Batagelj (Slovenia) }
{ Aleksey Kuznetsov (Ukraine) }
{ Home Page: www.utilmind.com }
{ E-Mail: info@utilmind.com }
{****************************************************}
unit SendKeys;
interface
uses
Windows, SysUtils;
const
SK_BKSP = #8;
SK_TAB = #9;
SK_ENTER = #13;
SK_ESC = #27;
SK_ADD = #107;
SK_SUB = #109;
SK_F1 = #228;
SK_F2 = #229;
SK_F3 = #230;
SK_F4 = #231;
SK_F5 = #232;
SK_F6 = #233;
SK_F7 = #234;
SK_F8 = #235;
SK_F9 = #236;
SK_F10 = #237;
SK_F11 = #238;
SK_F12 = #239;
SK_HOME = #240;
SK_END = #241;
SK_UP = #242;
SK_DOWN = #243;
SK_LEFT = #244;
SK_RIGHT = #245;
SK_PGUP = #246;
SK_PGDN = #247;
SK_INS = #248;
SK_DEL = #249;
SK_SHIFT_DN = #250;
SK_SHIFT_UP = #251;
SK_CTRL_DN = #252;
SK_CTRL_UP = #253;
SK_ALT_DN = #254;
SK_ALT_UP = #255;
procedure SendKeyString(Text: String);
procedure SendKeysToTitle(WindowTitle: String; Text: String);
procedure SendKeysToHandle(WindowHandle: hWnd; Text: String);
procedure MakeWindowActive(wHandle: hWnd);
function GetHandleFromWindowTitle(TitleText: String): hWnd;
implementation
procedure SendKeyString(Text: String);
var
i: Integer;
Shift: Boolean;
vk, ScanCode: Word;
ch: Char;
c, s: Byte;
const
vk_keys: Array[0..9] of Byte =
(VK_HOME, VK_END, VK_UP, VK_DOWN, VK_LEFT,
VK_RIGHT, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE);
vk_shft: Array[0..2] of Byte = (VK_SHIFT, VK_CONTROL, VK_MENU);
flags: Array[False..True] of Integer = (KEYEVENTF_KEYUP, 0);
begin
Shift := False;
for i := 1 to Length(Text) do
begin
ch := Text[i];
if ch >= #250 then
begin
s := Ord(ch) - 250;
Shift := not Odd(s);
c := vk_shft[s shr 1];
ScanCode := MapVirtualKey(c,0);
Keybd_Event(c, Scancode, Flags[shift], 0);
end
else
begin
vk := 0;
if ch >= #240 then
c := vk_keys[Ord(ch) - 240]
else
if ch >= #228 then {228 (F1) => $70 (vk_F1)}
c := Ord(ch) - 116
else
if ch < #110 then
c := Ord(ch)
else
begin
vk := VkKeyScan(ch);
c := LoByte(vk);
end;
ScanCode := MapVirtualKey(c,0);
if not Shift and (Hi(vk) > 0) then { $2A = scancode of VK_SHIFT }
Keybd_Event(VK_SHIFT, $2A, 0, 0);
Keybd_Event(c,scancode, 0, 0);
Keybd_Event(c,scancode, KEYEVENTF_KEYUP, 0);
if not Shift and (Hi(vk) > 0) then
Keybd_Event(VK_SHIFT, $2A, KEYEVENTF_KEYUP, 0);
end;
end;
end;
procedure MakeWindowActive(wHandle: hWnd);
begin
if IsIconic(wHandle) then
ShowWindow(wHandle, SW_RESTORE)
else
BringWindowToTop(wHandle);
end;
function GetHandleFromWindowTitle(TitleText: String): hWnd;
var
StrBuf: Array[0..$FF] of Char;
begin
Result := FindWindow(PChar(0), StrPCopy(StrBuf, TitleText));
end;
procedure SendKeysToTitle(WindowTitle: String; Text: String);
var
Window: hWnd;
begin
Window := GetHandleFromWindowTitle(WindowTitle);
MakeWindowActive(Window);
SendKeyString(Text);
end;
procedure SendKeysToHandle(WindowHandle: hWnd; Text: String);
begin
MakeWindowActive(WindowHandle);
SendKeyString(Text);
end;
end. |
Het doorsturen lukt maar half.
Alleen letters in uppercase worden goed weergegeven. Als je ze in lowercase invoert dat worden er rare tekens naar het doelprogramma gestuurt.
Ik wilde de string www.adres.nl doorsturen naar het doelprogramma.
Dit lukt voor geen meter
Wat ik tot nu toe heb:
code:
1
2
3
4
5
6
7
| ... bericht := UpperCase(Edit1.Text); programma := Edit2.Text; ... //alleen a tm z en 0 t/m 9 lukt op deze manier, SK_ENTER=enter :) SendKeysToTitle(programma, bericht+SK_ENTER); ... |
Wat voorbeelden:
code:
1
2
3
| //zonder de input naar uppercase te zetten dus bericht :=Edit1.Text; //invoer is: 'teststring' SendKeysToTitle(programma, bericht+SK_ENTER); |
output:
t5ststr9n7
code:
1
2
3
| //wel eerst naar uppercase bericht :=UpperCase(Edit1.Text); //invoer is: 'teststring' SendKeysToTitle(programma, bericht+SK_ENTER); |
output:
teststring
code:
1
2
3
| //wel eerst naar uppercase bericht :=UpperCase(Edit1.Text); //invoer is: 'www.google.nl' SendKeysToTitle(programma, bericht+SK_ENTER); |
output:
wwwgooglenl
Maar hoe krijg ik daar nu een .(punt) tussen?
Heb echt al alles geprobeerd. Ben er al 2 dagen mee bezig en met google/delphi sites kom ik ook niet veel verder.
Wat ik uitgevogeld heb is dat ik waarschijnlijk iets met #46 moet doen
Dat is de punt. Maar ergens anders kom ik weer het getal 110 tegen.
Ik heb ook al zitten spelen met Ord en Chr, maar het lukt maar niet.
Iemand een idee hoe ik dit kan oplossen?