Avatar billede mpk Nybegynder
28. december 2006 - 15:02 Der er 1 kommentar og
1 løsning

sende key events fra og til et program ude af focus

Hej

Jeg har en hardware enhed, hvorfra jeg modtager forskellige input, disse input vil jeg gerne konvertere til short-cuts som fx kan styre winamp eller wmp, eller et vilkårligt andet program for den sags skyld. Mit problem ligger i at jeg gerne vil gøre det selvom hverken mit program eller fx. winamp er i fokus.

Hvis de er i fokus virker det fint med:
keybd_event(VK_RETURN, 0, 0, 0);
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);


ude fokus har jeg forsøgt med først at finde handlet til winamp, det går fint nok, men når jeg så sender enten:
::PostMessage(ApplicationWnd, WM_LBUTTONDOWN, VK_RETURN, 0);
::PostMessage(ApplicationWnd, WM_LBUTTONUP, VK_RETURN, 0);

eller
::PostMessage(ApplicationWnd, WM_KEYDOWN, VK_RETURN, 0);
::PostMessage(ApplicationWnd, WM_KEYUP, VK_RETURN, 0);

så sker der bare ingenting
jeg tror umiddelbart at mit handle er korrekt for hvis jeg fx kalder:
::SetActiveWindow(ApplicationWnd);    // Set active window
::SetForegroundWindow(ApplicationWnd); // move window to foreground.
::SetFocus(ApplicationWnd);            // set keyboard focus

så bliver det pågældende vindue som jeg har et handle til, sat i fokus...såååå..... jeg forstår ikke hvorfor mine key events ikke bliver til noget....

Jeg har også uden held været ved at rode med:
GetWindowThreadProcessId(ApplicationWnd, &ApplicationID);
GetWindowThreadProcessId(pThisWnd->m_hWnd, &thisID);
AttachThreadInput(thisID, ApplicationID, true);


any ideas anyone ??


/vh mpk
Avatar billede comfortably_numb Nybegynder
25. januar 2007 - 10:59 #1
Lige for at få dig på en retning, er godt klar over det ikke er et forkromet svar men sidder i toget :)

Det er lang tid siden jeg har lavet disse programmer, men jeg mener at det desværre ikke så simpelt at du kan sende dine keystrokes til parent-handle som du gør i ovenstående eksempel, du skal ned og finde det handle der netop er aktivt i applikationen og sende data til dette.

Det kunne f.eks. være en editbox eller lignende som var aktivt, og det er så denne's handle du skal sende dine keystrokes til - ikke parent-handle af applikationen.

Så fra toppen af hukommelsen er det noget med du udfra parent-handle, løber igennem hvilket child der er aktivt i applikationen, tager det, og sender dine data til denne control.
Avatar billede mpk Nybegynder
12. juni 2008 - 19:41 #2
Dette spg. er gammel
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester