Seite 1 von 1
Mit Sendmessage an das Fenster "Teilnehmer" ein Byte senden
Verfasst: 18.02.2013 14:20
von funkheld
Hallo, guten Tag.
Ich möchte mit Sendmessage an das Fenster "Teilnehmer" ein Byte senden und auch mal an alle Fenster senden.
Wie geht das ?
Danke.
Gruss
peter
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 18.02.2013 15:52
von NicTheQuick
Was meinst du mit allen Fenstern? Alle sichtbaren Fenster? Oder auch alle versteckte? Auch Fenstern in Fenstern?
Und was meinst du mit "Byte senden"? Eine Tastatureingabe simulieren? Oder User-Events senden?
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 18.02.2013 15:59
von funkheld
Jup danke.
An alle sichtbaren Fenster und auch an ein bestimmtes "Teilnehmer".
Ein Byte senden, kein Tastendruck.
Danke.
gruss
peter
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 18.02.2013 16:43
von NicTheQuick
Ich nehme mal an das soll alles unter Windows laufen.
Bestimmte Fenster finden kannst du mittels der API "FindWindow_()" und alle Fenster auflisten mittels "EnumWindows_()". Dazu bitte die Suche hier im Forum nutzen.
Mit "SendMessage_()" kannst du dann an ein so gefundenes Handle eines Fensters Nachrichten schicken. Aber dafür gibt's verschiedene Wege. Denn es ist nicht vorgesehen einfach nur ein Byte zu versenden. Das muss zusammen mit einem bestimmten Event ankommen und dann gibt es da die Parameter wParam und lParam in einem Window-Callback, die entweder einfache Werte sein können oder einen Pointer zu einem Speicherbereich enthalten können. Ab der Stelle bin ich allerdings überfragt, da ich selbst schon lange kein Windows mehr nutze. Aber es gibt hier im sicherlich ähnliche Dinge, die schon gemacht wurde und vielleicht auch genau das sind, was du suchst.
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 23.02.2013 23:47
von funkheld
Hallo, ich habe etwas gefunden.
Ich kann es leider nicht umsetzen.
Wer kann dieses mal in Purebasic umsetzen ?
Danke.
Gruss
peter
Code: Alles auswählen
Dlg& = Create("Dialog", %hwnd, "Senden", 220, 190, 410, 280)
senden& = Create("Button", Dlg&, "Senden", 110, 220, 80, 30)
Ende& = Create("Button", Dlg&, "Ende", 210, 220, 80, 30)
IsActive& = 0
InMemory& = 4000
'1024 Bytes Speicher
SizeOfMem& = 1024
'Speicherbereich anlegen
hmap& = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,SizeOfMem&,"MeinSpeicher")
'Zeiger auf Speicherbereich ermitteln
hMapView& = ~MapViewOfFile(hMap&,$000F001F, 0, 0, 0)
'die ersten 4 Bytes erhalten das Fensterhandle
Long hMapView&,0 = %hwnd
'die nächsten 4 Bytes bleiben frei für das Fensterhandle von Programm 2
wert&=0
WhileNot @Clicked(Ende&)
WaitInput
If @Clicked(senden&)
If Long(hMapView&,4) <> 0
IsActive& = 1
Endif
dat_send
EndIf
EndWhile
End
proc dat_send
wert&=wert&+1
long hMapView&,8 = wert&
If IsActive&
sendMessage(Long(hMapView&,4),InMemory&,0,0)
endif
endproc
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 24.02.2013 00:21
von NicTheQuick
Und welche Sprache soll das sein?
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 24.02.2013 00:28
von c4s
funkheld hat geschrieben:ich habe etwas gefunden.
Ich kann es leider nicht umsetzen.
Wer kann dieses mal in Purebasic umsetzen ?
... liest sich wie ein Gedicht.

Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 24.02.2013 00:28
von ts-soft
Der XProfan-Code ist unvollständig!
Es muss windows.ph eingebunden werden, ausserdem ist keine Variablendeklaration vorhanden.
Wenn also solche Fragen kommen, bitte funktionierenden Code posten!
Hier die 1:1 Übersetzung nach PureBasic, wohl nicht funktionstüchtig, aber das ist Dein Code ja
auch nicht
Code: Alles auswählen
EnableExplicit
Global IsActive.l = 0
Global InMemory.l = 4000
Define SizeOfMem.l = 1024
Define hWnd.i, hmap.i
Global hMapView.i
Global wert.l = 0
Procedure dat_send()
wert + 1
PokeL(hMapView + SizeOf(Integer) + 4, wert)
If IsActive
SendMessage_(PeekL(hMapView + 4), InMemory, 0, 0)
EndIf
EndProcedure
hWnd = OpenWindow(0, 220, 190, 410, 280, "Senden")
ButtonGadget(0, 110, 220, 80, 30, "Senden")
ButtonGadget(1, 210, 220, 80, 30, "Ende")
hmap = CreateFileMapping_(#INVALID_HANDLE_VALUE, 0, #PAGE_READWRITE|#SEC_COMMIT|#SEC_NOCACHE, 0, SizeOfMem, "MeinSpeicher")
hMapView = MapViewOfFile_(hmap, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
PokeL(hMapView, hWnd)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
If PeekL(hMapView + 4) <> 0
IsActive = 1
EndIf
dat_send()
Case 1
Break
EndSelect
EndSelect
ForEver
Ausserdem unterstützt XProfan Filemapping nativ, weiß also nicht, warum hier die API verwendet wird.
Gruß
Thomas
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Verfasst: 24.02.2013 10:09
von funkheld
Jup, danke. Funktioniert wunderbar.
Gruss
peter