Vykresluju globálně na obrazovku text. Časovač mám nastavený na 1ms a u normálních programů je to celkem v pořádku, ale u her při větších pohybech ten text neni ani vidět. Jde nějak jinak vykreslovat text (či cokoliv jinýho) bez toho, aniž by blikal? Neni třeba nějaká globální událost, která se volá když je obrazovka překreslování a mohl bych na ni navázat mou funkci?
Někde radili udělat neviditelný okno, a vykreslovat text na něj. Zatim jsem to nezkoušel, ale zcela určitě bude problém nad fullscreen DirectX hru dát okno a přenášet z nej všechny události do hry.
Fórum › .NET
Kreslení na obrazovku bez problikávání
Jo, pro mě by bylo řešení asi tohle https://support.microsoft.com/en-us/kb/318804, jenže:
Global hooks are not supported in the .NET Framework
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.
Low-level hook procedures are called on the thread that installed the hook. Low-level hooks do not require that the hook procedure be implemented in a DLL.
#5 David Klouček
Fuj! Global hook? Tak to na mne neházej - to jsem ti vůbec neradil! Zaprvé toto jde - jen jinak. Ovšem já ti radil poslouchat zprávy a jen připoslat další! Tak to ne - to ti C++ do rukou nedám. Hoď to do Paint a je klid. (Popř jiného předcházejícího, či následného eventu s tím, že samozřejmě musí někde zavolat base, ať se provede i ten zbytek.)
#6 Matěj Andrle
Pak jsem ještě našel https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396, to asi neni ono?
OnPaint taky ne. To je přece událostu controlu, ne? Já chci zachytit překreslení cizí aplikace.
Jak nedal do ruky C++? Já dělam v C#.
#7 David Klouček
.NET je postavený na C++. Právě, že ty očividně programovat začínáš, tak tě neodesílám na C++ řešení, kteréžto stejně budeš implementovat v C#. Paint: https://msdn.microsoft.com/en-us/library/windows/desktop/dd145213(v=vs.85).aspx
Paint nesouvisí s .NET! Je to kernelová zpráva - ovšem mimo kernel messaging. Ta běží čistě na DirectX. Lze jít i na kernel messaging, ovšem tam bys očividně udělal pěkný čurbes. Zkus tedy poslouchat systémové zprávy a dostat se k DirectX...
#9 Matěj Andrle
To by mě zajímalo jak to napojit na cizí aplikaci. Když udělam třeba:
protected override void WndProc(ref Message m) {
Debug.WriteLine(i.ToString() + " | " + m.ToString());
base.WndProc(ref m);
}
tak to funguje jen v rámci mý aplikace.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Kreslení linek bez Canvas — založil Peršink163054
Problikávání spritů — založil Sony
DOS aplikace přes celou obrazovku — založil pekelnik23
Spuštění programu přes celou obrazovku — založil D@ve
I8080 - vypis adresy registra na obrazovku — založil Peter
Moderátoři diskuze