Mit Sendmessage an das Fenster "Teilnehmer" ein Byte senden
Mit Sendmessage an das Fenster "Teilnehmer" ein Byte senden
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
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
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
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?
Und was meinst du mit "Byte senden"? Eine Tastatureingabe simulieren? Oder User-Events senden?
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Jup danke.
An alle sichtbaren Fenster und auch an ein bestimmtes "Teilnehmer".
Ein Byte senden, kein Tastendruck.
Danke.
gruss
peter
An alle sichtbaren Fenster und auch an ein bestimmtes "Teilnehmer".
Ein Byte senden, kein Tastendruck.
Danke.
gruss
peter
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
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.
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
Hallo, ich habe etwas gefunden.
Ich kann es leider nicht umsetzen.
Wer kann dieses mal in Purebasic umsetzen ?
Danke.
Gruss
peter
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
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Und welche Sprache soll das sein?
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
... liest sich wie ein Gedicht.funkheld hat geschrieben:ich habe etwas gefunden.
Ich kann es leider nicht umsetzen.
Wer kann dieses mal in Purebasic umsetzen ?

Zuletzt geändert von c4s am 24.02.2013 00:29, insgesamt 1-mal geändert.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
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
Ausserdem unterstützt XProfan Filemapping nativ, weiß also nicht, warum hier die API verwendet wird.
Gruß
Thomas
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
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Mit Sendmessage an das Fenster "Teilnehmer" ein Byte se
Jup, danke. Funktioniert wunderbar.
Gruss
peter
Gruss
peter