22. maj 2004 - 22:31Der er
4 kommentarer og 1 løsning
tryk enter i andet program
hejsa delphi hajer,
har sidet og surfet google rundt et par timer efterhånden efter en måde at simulere et enter tryk i et andet program jeg kan godt få den til at skrive ved at activere en form i programmmet med musen, men efter den har skrevet skal den trykke på enter.. og den kan jeg simpelthen ikke få til at virke.. her er en lille stump kode som jeg har prøvet, som i kan se har jeg både prøvet med keybd_event og som postmessage(handle... men det virker bare ikke..
Nu spørger jeg bare dumt, men du har vel styr på den klasse til det handle som du finder? Prøv med en if Wnd = 0 then ShowMessage('No handle'); I øvrigt behøver du ikke SetForeGround
det program som jeg vil lave det til har samme class i hele programmet.. så jeg kan ikke bruge windowex til menuer, og der er ikke nogen send klap.. man skal trykke på enter
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;
hmm hreiff det virker, men kun når man aktivere det vindue som skal skrives i,... det gør dog ikke så meget tror jeg, da det er aktivt i forvejen, jeg prøver lige at implementere det i mit program, så vender jeg tilbage..
for cool det virker bare som det skal.. mange tak for hjælpen begge to :O)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.