30. marts 2001 - 23:00Der er
26 kommentarer og 1 løsning
Hvordan udføres et tastetryk virtuelt?
Jeg har et lille program hvor man kan sende et virtuelt tastetryk til et program som man vælger ud fra en liste. (Det smarte ved programmet er at det sender tastetrykket til programmer selvom de er minimeret, og det er det jeg skal bruge.) Programmet er imellemtiden uden source så jeg kan ikke se hvordan det fungerer. Men jeg kunne godt tænke mig at lave et lignende program og... Er der nogen som kan hjælpe med noget API opkald eller lignende til se sende tastetryk/hotkeys til minimerede programmer?
Jeg er ikke helt med hvad du mener... (Mit program skal kunne sende taste input til et minimeret vindue uden at bringe det frem) Skal jeg ikke sende noget infomation til vinduets hwnd eller hdc ?
--- Declare Function FindWindow Lib \"user32\" Alias \"FindWindowA\" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SetActiveWindow Lib \"user32.dll\" (ByVal hwnd As Long) As Long
Private Sub Command1_Click() lngHWnd = FindWindow(\"Programmets Klasse. f.eks. \'iexplore\', eller vbNullString\", \"Titlen på programmet, eller vbNullString\") lngRetval = SetActiveWindow(lngHWnd)
Så vidt jeg kan forstå så er SetActiveWindow en kommando som bringer vinduet frem i forgrunden altså giver det fokus. Og det er jo det det helst ikke skal da det gerne skulle forblive minimeret.
det er SetWindowForeground() der gør det, SetActiveWindow() gør kun vinduet aktivt, men det fjerner så fokus fra det aktive program... men det er den eneste måde jeg ved at man kan gøre det på.
Det er jo ikke nok at du aktivere vinduet .. hvis du skal have en kontrol aktiveret skal du bruge {tab} til at flytte makøren med .. og hvis det er til et program du selv har lavet skal du nok gøre det i Private Sub Form_Activate()
kan det ikke lade sig gøre med: Public Declare Function SendMessage Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long og... Public Const WM_KEYDOWN = &H100 ?
Problemet med appactivate er bare at den giver programmet \"fokus\" (i status baren) det skulle gerne være sådan at hvis jeg satte en timer til at udføre forskellige tastetryk til programmet så skulle jeg kunne bruge computeren imens.
hugobart:> hvad er det for et program du vil sende taster til ? det kan være det hjælper lidt ved at vide hvad det er for et .. (evt. hvis vi så kan finde et Class ID ..)
Men jeg har jo allerede et program som kan klare det og det benytter ingen dll\'er eller noget så jeg tror det kan lade sig gøre med win32 API\'en. Hvad gør openProcess ?
Sådan her kan det gøres uden at man skal aktivere noget som helst:
---------------
Declare Function SendMessageByNum& Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Declare Function findwindow Lib \"user32\" Alias \"FindWindowA\" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const WM_CHAR = &H102
sub sendH () xHwnd = FindWindow(vbNullString, \"vinduets titel\") retval = SendMessageByNum(xHwnd, WM_CHAR, Asc(\"H\"), 0) end sub
(Retval bliver først retuneret efter at funktionen er blevet gennemført.)
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.