Avatar billede sjh Nybegynder
02. august 2001 - 01:25 Der er 2 kommentarer og
2 løsninger

SendKeys gennem hWnd

Hvordan Sender jeg en tast til et program som \"IKKE er Activate\", jeg har prøvet med:

\'------------- Form1 -------------
Private Declare Function SendMessage Lib \"user32\" Alias \"SendMessageA\" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long

Const WM_SETTEXT = &HC
Dim chWnd As Long

Private Sub Command1_Click()
textbuffer$ = 2
SendMessage chWnd, WM_SETTEXT, 0, ByVal textbuffer$
End Sub

Private Sub Form_Load()
\'Åbner Lommeregneren
chWnd = Shell(\"C:\\WINDOWS\\CALC.EXE\", vbNormalFocus)
End Sub
\'------------- Form1 -------------

men det funker sku ikke hjælp ;)
Avatar billede jelzin101 Praktikant
02. august 2001 - 02:01 #1
>> du skal lave api ting i et modul...
Avatar billede sjh Nybegynder
02. august 2001 - 02:15 #2
hvem siger det. (jeg ved godt hvad jeg laver)

hvis man bruger \"Private\" forand \"Declare xxx\" funker de fleste api call i en form1 SendMessage gør. ;)
Avatar billede jelzin101 Praktikant
02. august 2001 - 02:20 #3
det siger jeg!!!! *gg*, ok så er det jo nok ikke det.
Avatar billede sjh Nybegynder
02. august 2001 - 02:57 #4
Man bør også lave det i et module men når man bare skal lave det som et eksempel, så man hurtig kan sette det ind i en Form. ;)


Og nu har jeg fundet en løsning. :-)

\'--------------------------------- Form1 ---------------------------------
Private Declare Function PostMessage Lib \"user32\" Alias \"PostMessageA\" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Private Declare Function FindWindow Lib \"user32\" Alias \"FindWindowA\" _
(ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long

Private Declare Function GetParent Lib \"user32\" (ByVal hwnd As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib \"user32\" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function GetWindow Lib \"user32\" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Const GW_HWNDNEXT = 2

Const WM_KEYDOWN As Long = &H100
Const VK_NUMPAD0 = &H60
Const VK_NUMPAD1 = &H61
Const VK_NUMPAD2 = &H62
Const VK_NUMPAD3 = &H63
Const VK_NUMPAD4 = &H64
Const VK_NUMPAD5 = &H65
Const VK_NUMPAD6 = &H66
Const VK_NUMPAD7 = &H67
Const VK_NUMPAD8 = &H68
Const VK_NUMPAD9 = &H69

Dim Chwnd As Long

Function InstanceTohWnd(ByVal IsId As Long) As Long
Dim Is_hwnd As Long, pid As Long, thread_id As Long
    Is_hwnd = FindWindow(ByVal 0&, ByVal 0&)
    Do While Is_hwnd <> 0
        If GetParent(Is_hwnd) = 0 Then
            thread_id = GetWindowThreadProcessId(Is_hwnd, pid)
            If pid = IsId Then
                InstanceTohWnd = Is_hwnd
                Exit Do
            End If
        End If
        Is_hwnd = GetWindow(Is_hwnd, GW_HWNDNEXT)
    Loop
End Function

Private Sub Command1_Click()
PostMessage Chwnd, WM_KEYDOWN, VK_NUMPAD1, 0
PostMessage Chwnd, WM_KEYDOWN, VK_NUMPAD2, 0
PostMessage Chwnd, WM_KEYDOWN, VK_NUMPAD3, 0
End Sub

Private Sub Form_Load()
Command1.Caption = \"Send 123\"
Chwnd = InstanceTohWnd(Shell(\"C:\\WINDOWS\\CALC.EXE\", vbNormalNoFocus))
End Sub
\'--------------------------------- Form1 ---------------------------------
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