title image


Smiley Re: E97: API: Tastenkombi per Sendmessage an Fenster-Handle
>>>schade auch, dass die Postmessage-Funktion ein im Vordergrund befindliches

>>>Fenster erwartet. Ich hätte gehofft, dass mit Postmessage anders als mit

>>>Sendkeys "{%S}" eine *stabile* Übertragung an das per Handle bezeichnete

>>>Fenster im Hintergrund möglich gewesen wäre



Ich habe hier auch ein Beispiel, das zeigt, daß man mit postmessage

nachrichten an notepad senden kann, auch wenn notepad ***keinen FOCUS*** hat, und von einer Applikation (z.B. der VB-Entwicklungsumgebung) überdeckt ist. -Probiere es einfach einmal aus..



Form1:

----------------

'benötigt 2 Button

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

Const GW_HWNDFIRST = 0: Const GW_HWNDLAST = 1: Const GW_HWNDNEXT = 2: Const GW_HWNDPREV = 3: Const GW_OWNER = 4: Const GW_CHILD = 5



Private Declare Function PostMessage Lib "user32.dll" 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 String, ByVal lpWindowName As String) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Const WM_SYSKEYDOWN = &H104: Private Const WM_SYSKEYUP = &H105

Const WM_KEYDOWN = &H100: Const WM_KEYUP = &H101

Const WM_SETFOCUS = &H7: Const WM_KILLFOCUS = &H8

Dim hwn

Private Sub Command1_Click()

Shell "notepad.exe", vbNormalFocus: DoEvents

End Sub

Private Sub Command2_Click()

hwn = FindWindow(vbNullString, "Unbenannt - Editor")



If hwn > 0 Then MsgBox "ich stelle fest : notepad ist gestartet."

If hwn = 0 Then MsgBox "notepad ist nicht gestartet.": End



MsgBox "notepad hat das handle " & hwn



PostMessage hwn, WM_SETFOCUS, 0, 0 'den postmessage-Focus auf Notepad setzen



m = GetWindow(hwn, GW_CHILD): Call PostMessage(m, WM_KEYDOWN, 13, &H0) 'Enter senden

For schleife = 65 To 77: Call PostMessage(m, WM_KEYDOWN, schleife, &H0): Next

MsgBox "ich habe soeben ENTER + abcdefghijklm an Notepad gesendet mit postmessage" & vbCrLf _

& "***ohne*** dass Notepad den Focus hat"



MsgBox "ich sende jetzt eine Alt_D_u Kombination" & vbCrLf _

& "***ohne*** dass Notepad den Focus hat"

'sendet ALT-D-u (=Datei/Speichern unter in Notepad)

PostMessage hwn, WM_SYSKEYDOWN, Asc("D"), &H20000001 'Alt-D Down

Sleep 1999

PostMessage hwn, WM_KEYDOWN, Asc("U"), &H0 'sende ASC("U")

Sleep 1500



Me.SetFocus

MsgBox "die Folge ALT-D_u wurde an notepad gesendet! - vb beenden?"

End

End Sub

Private Sub Form_Load()

Me.Move 0, 0, 4000, 3000: Command1.Width = 3000

Command1.Caption = "step1: Notepad starten (wenn noch nicht gestartet)"

Command2.Caption = "step2: starte den Test"

End Sub


 Die von mir vorgeschlagenen Lösungen wurden unter VB6 getestet (Betriebssystem: Windows 98 SE)
Meine Microsite


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: