Hej! Okej tack! mmm.... varför är du inte konsekvent och skriver Testade att skriva Svara på båda här! Det var lurigt, det här skall redas ut ! Testa Ska vi se att skriva , och - funkade ej det blev blankt. Tror jag kom på det. hmm har provat lite olika nu: Oki det var lurigt. Okej tack :) mmm... har nu provkört exemplet och börjar förstå. Obs börjar. Här är en annan mer rak metod. Jag gör SendKeys till Edit1. Här en modifierad version när du önskar skicka kombinerade argument, Vid närmare eftertanke tycker jag att det är onödigt att kombinera dessa 2 Hej! Jag förstår. Tex ett Worddokument eller NotPad mfl.PostKeyEx32 punkt?
Nu är det så att jag håller på med ett litet program här hemma som jag skulle behöva lite hjälp med!
Jag använder den här koden:
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean) ;
type
TShiftKeyInfo = record
shift: Byte ;
vkey: Byte ;
end;
ByteSet = set of 0..7 ;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl) ; vkey: VK_CONTROL),
(shift: Ord(ssShift) ; vkey: VK_SHIFT),
(shift: Ord(ssAlt) ; vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
j: Integer;
begin
for j := 1 to 3 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), 0, 0) ;
end;
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0) ;
for j := 3 downto 1 do
begin
if shiftkeys[j].shift in bShift then
keybd_event(shiftkeys[j].vkey, MapVirtualKey(shiftkeys[j].vkey, 0), KEYEVENTF_KEYUP, 0) ;
end;
end;
Sen anropar jag koden med typ:
PostKeyEx32(VK_NUMPAD6, [], False);
Eller:
PostKeyEx32(VK_NUMPAD6, [ssAlt], False);
Eller:
PostKeyEx32(VK_F4, [ssAlt], False);
Ja ni fattar hoppas jag :P
Men nu undrar jag hur jag ska kunna skicka punkt men postkey, hittar inte vad för kod som behövs!Sv:PostKeyEx32 punkt?
Men jag får det inte att funka!, :/ provade med det här:
PostKeyEx32(ORD('H'), [], False);
PostKeyEx32(ORD(':'), [], False);
PostKeyEx32(ORD('J'), [], False);
och
PostKeyEx32(ORD('H'), [], False);
PostKeyEx32(46, [], False);
PostKeyEx32(ORD('J'), [], False);
Men det vill sig inte.. Det skriver ut h och j men inte punkten..Sv: PostKeyEx32 punkt?
PostKeyEx32(ORD('.'), [], False);
Functionen vill ha Word tror det är där det strular.Sv:PostKeyEx32 punkt?
Showmessage (IntToStr(Ord('.')))
Det funkade ua 46 blev svaret.
DVS Asciitecken består av 2 byte Word Intelstandard 2E00 RawHex 002E
Ordinal svarar med Word. 0.. 65535
Skriver du bara 46 blir det SmallInt -32768 .. 32767Sv: PostKeyEx32 punkt?
Skrev fel här menade att jag skrev . istället för :
Men det värkar bara inte funka.
EDIT:
Och nä det funkar inte häller om jag bara skriver
PostKeyEx32(ORD('.'), [], False);
Det blir ingenting där punkten ska vara :/Sv:PostKeyEx32 punkt?
PostKeyEx32(ORD(','), [], False);
PostKeyEx32(ORD('-'), [], False);
44 , 45
Stora A börjar på 65 har du satt en undre gräns i [......]
Testa också
PostKeyEx32(ORD('8'), [], False); // valfri siffra
Ord(':') är ju 58 dvs verkar som du har en undre gräns vid 48 någotSv: PostKeyEx32 punkt?
men att skriva 8 på det viset fungerade utmärkt!
Sen kanske jag ska tilllägga att det inte är jag som har skrevigt koden, hitta den på internet :PSv: PostKeyEx32 punkt?
Testa med både Shift och Alt och True
Har något med svenskt tangenbord att göra.
Testa Ord('Ö')Sv:PostKeyEx32 punkt?
PostKeyEx32(Ord('.'), [], False);
PostKeyEx32(Ord('.'), [], True);
PostKeyEx32(Ord('.'), [ssAlt], False);
PostKeyEx32(Ord('.'), [ssAlt], True);
PostKeyEx32(Ord('.'), [ssShift], False);
PostKeyEx32(Ord('.'), [ssShift], True);
PostKeyEx32(Ord('.'), [ssAlt, ssShift], False);
PostKeyEx32(Ord('.'), [ssAlt, ssShift], True);
men inget vill sig funka och sen så funka det inte häller när jag skulle prova att få ut Ö..Sv: PostKeyEx32 punkt?
Skall ladda ner dit exempel och testa lite själv.
Återkommer på denna kanal.
Finns det något annat geni därute som kommer på vad det kan vara ?Sv:PostKeyEx32 punkt?
Kom och tänka ifall man kunnde använda alt + siffror så får man fram bokstäver/siffror/tecken med rätt kompination.
Skrev en lista för ett tag sedan och där hittade jag Alt+46 blir då .
Så om man kunnde använda det för att få fram en punkt men jag fick inte det att funka :/Sv: PostKeyEx32 punkt?
Funktionen kan bara exekvera sådant som Windows System godkänner som short cut.
Vad skall du använda detta till ? Varför vill du ha (.) punkt ?
Man kan bara skicka tecken som har både UperCase och LowerCase (Versaler o Gemena)
I Keyargumentet kan man bara ha UperCase tecken ex.'A' och svar ut kommer 'a'
Punkt '.' som ex har bara ett läge godkännes ej.Sv:PostKeyEx32 punkt?
Obs Edit1 skall vara tom i designläge.
Du kan kanske göra en kombination av de båda Subrutinerna.
<code>
'// Example:
'//Du kan skicka till alla fönster som har HWnd (handler) här Edit1
procedure TForm1.Button1Click(Sender: TObject);
var
HWin : Integer ;
begin
HWin := Edit1.Handle ;
SendKeys('.',HWin) ;
end;
procedure SendKeys(S: string; Window: hWnd);
var
i: Integer;
begin
ShowWindow(Window, SW_RESTORE);
for i := 1 to Length(S) do
SendMessage(Window, WM_CHAR, Ord(S[i]), 0);
end;
</code>Sv: PostKeyEx32 punkt?
ex. Ctrl + F5 mfl.
Fortfarand brister men nu är Vi på väg.
<code>
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
i : Integer ;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { For }
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { For }
end; { PostKeyEx32 }
procedure SendKeys(S: Char; Window: hWnd);
begin
If Not(S in ['0'..'Z']) Then Begin
ShowWindow(Window, SW_RESTORE);
SendMessage(Window, WM_CHAR, Ord(S), 0)
End
Else Begin
Form1.Edit1.SetFocus ;// inte bra den rensar Edit1 och lägger till det senaste
PostKeyEx32(Ord(S),[ssShift], False);
End
End ;
// Test exempel skickar till Edit1
procedure TForm1.Button1Click(Sender: TObject);
begin
SendKeys('Ö',Form1.Edit1.handle)
end;
</code>Sv:PostKeyEx32 punkt?
Kör den du har nu om du vill skicka kombinationer Ctrl Alt Shift och F1- F12
och
Använd denna om du bara köra enkla Sendkeys till fönster.
<code>
'// Example:
'//Du kan skicka till alla fönster som har HWnd (handler) här Edit1
procedure SendKeys(S: string; Window: hWnd);
var
i: Integer;
begin
ShowWindow(Window, SW_RESTORE);
for i := 1 to Length(S) do
SendMessage(Window, WM_CHAR, Ord(S[i]), 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
HWin : Integer ;
begin
HWin := Edit1.Handle ;
SendKeys('Tobias',HWin) ;
end;
</code>Sv: PostKeyEx32 punkt?
Tack så mycket för allt.
Men hur ska man göra om man vill skicka till ett annat fönster alltså som inte tillhör programet!?
EDIT:
Och jag vet inte vad programet som den ska skriva i exakt. för det ändrar title hela tiden.
Så det som jag vill få det att funka är med den koden jag har innan att få den skriva i det fönstret som ligger överst..
Hoppas du förstår!Sv:PostKeyEx32 punkt?
Skall kolla det och nu resonerar jag kring Sendkeys.