Mauscursor systemweit verstecken

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Es macht den Desktop zum Screensaver

da muss ich mal meinen senf dazugeben:

ein ScreenSaver heißt so, weil er eine Überbeanspruchung des Monitors durch ein statisches Bild verhindert.
ein statisches Bild selber kann also kein ScreenSaver sein.

ein ScreenSaver wäre es, wenn du das bild permanent bewegst, also z.b. waagerecht durchscrollen läßt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

Ich möchte noch kurz eines einwerfen, bevor hier die Diskutiererei los geht:

Es geht hier nicht um Sinn, oder Unsinn des von mir geschrieben Programmes, fakt ist, es hat keinen Sinn, aber es macht Spaß es zu schreiben.

Und bevor hier jetzt eine Debatte über Screensaver losgeht.
Ich weiß was Sinn & Zweck eines Screensavers ist und die aussage aus dem Desktop einen Screensaver zu machen war genau so sinnvoll wie das Programm das ich schreibe.
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag von PMTheQuick »

Also... Ich habe mir mal die Mühe gemacht, einen anpassungsfähigen Code zu schreiben, der bei Mausbewegung den Wallpaper wieder hidden macht, und sobald eine Zeit lang die Maus nicht bewegt wurde, wieder angezeigt wird. Es arbeitet mit einem Fenster. Hier der Code:

Code: Alles auswählen

Procedure Diff(Z1,Z2)
  If Z1 > Z2
    ProcedureReturn Z1-Z2
  ElseIf Z2 > Z1
    ProcedureReturn Z2-Z1
  EndIf
EndProcedure

; get filename of current wallpaper 
unibuff=AllocateMemory(2*(#MAX_PATH+1)) 
ansibuff=AllocateMemory(#MAX_PATH) 
CoInitialize_(0) 
If CoCreateInstance_(?clsid_activedesktop,0,1,?iid_iactivedesktop,@iad.IActiveDesktop)=#S_OK 
    !PUSH dword 0      
    !PUSH dword 522; 2*(#max_path+1)          
    !MOV eax,dword [v_unibuff] 
    !PUSH eax 
    !MOV eax,dword [v_iad] 
    !PUSH eax 
    !MOV eax, [eax] 
    !CALL dword [eax+16]; iad\getwallpaper(unibuff,2*(#max_path+1),0) 
    WideCharToMultiByte_(#CP_ACP,#WC_COMPOSITECHECK,unibuff,-1,ansibuff,#MAX_PATH,0,0)  
    iad\release() 
EndIf 
CoUninitialize_() 
Wallpaper$ = PeekS(ansibuff) 
FreeMemory(unibuff) 
FreeMemory(ansibuff) 

ME = 10 ; Maus Empfindlichkeit (min. XX Pixel-Verschiebung)
WSZ = 2 ; Zeit bis der Wallpaper kommt (sek)

ExamineDesktops()
If OpenWindow(0,0,0,DesktopWidth(0),DesktopHeight(0),"Wallpaper",#PB_Window_BorderLess)
  CreateGadgetList(WindowID(0))
  ID = LoadImage(#PB_Any,Wallpaper$)
  ResizeImage(ID,WindowWidth(0),WindowHeight(0),#PB_Image_Raw)
  ImageGadget(0,0,0,WindowWidth(0),WindowHeight(0),ImageID(ID))

  OldX = DesktopMouseX()
  OldY = DesktopMouseY()

  ShowCursor_(0)
  StickyWindow(0,#True)
  Repeat
    WindowEvent()
    If modus = 1
      If Diff(OldX,DesktopMouseX()) > ME Or Diff(OldY,DesktopMouseY()) > ME
        lasttime = ElapsedMilliseconds()
      Else
        If ElapsedMilliseconds()-lasttime > WSZ * 1000 ; Nach 5sek Wallpaper anzeigen
          modus = 0
          HideWindow(0,0)
          
        EndIf
      EndIf
      OldX = DesktopMouseX()
      OldY = DesktopMouseY()
    Else
      If Diff(OldX,DesktopMouseX()) > ME Or Diff(OldY,DesktopMouseY()) > ME
        modus = 1
        lasttime = ElapsedMilliseconds()
        HideWindow(0,1)
      EndIf
      OldX = DesktopMouseX()
      OldY = DesktopMouseY()
    EndIf
  ForEver
EndIf
  

DataSection 
clsid_activedesktop: 
Data.b $00,$87,$04,$75,$1F,$EF,$D0,$11,$98,$88,$00,$60,$97,$DE,$AC,$F9 
iid_iactivedesktop: 
Data.b $00,$EB,$90,$F4,$40,$12,$D1,$11,$98,$88,$00,$60,$97,$DE,$AC,$F9 
EndDataSection
Ich hoffe, das dir das was nützt. Er hiddet auch die Maus ;) Im Code hat es 2 Variablen, die beschrieben werden ;)

Gruss
PMTheQuick ;)
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Was ich machen würde: Einen Screensaver selber schreiben (ist idR nur eine umbenannte .exe in .scr), der einfach sich das Hintergrundbild ausließt, und es mit "OpenScreen" einfach läd. Keine Maus - keine Störungen. UND man kann zusätzlich noch eine Screensaver-Funktion einbauen, die das Bild einfach manchmal ein bisschen verzerrt.

So bist du viel variabler :allright:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Tafkadasom2k5 hat geschrieben:Was ich machen würde: Einen Screensaver selber schreiben (ist idR nur eine umbenannte .exe in .scr), der einfach sich das Hintergrundbild ausließt, und es mit "OpenScreen" einfach läd.
AND51 hat bereits [i]vorher[/i] hat geschrieben:Das ist aber umständlich! Ich hätte es anders gelöst: Ich hätte den Pfad zum Wallpaper ermittelt und dieses dann in einem OpenScreen() oder in einem Fenster (borderless, sticky (immer im Vordergrund), genauso breit und hoch wie der Desktop) anzeigen lassen. [...]
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

A) :praise: Bild:roll:

B) Es ging hier auch um die Umbenennung, um die Verwandschaft von exen zu SCRs.

Nennen wirs Teamwork, okay? :roll:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> Nennen wirs Teamwork, okay?
Ja natürlich, Marc... Zusammenarbeiten ist immer besser als gegeneinander. :allright:
Es war ja auch nicht bös gemeint meinersets. Sorry, sollte es so interpretiert worden sein.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Da hat jemand aber ein gutes Gedächtnis was Vornamen angeht ;)
Ansonsten: Alles klar :allright: <)
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> Da hat jemand aber ein gutes Gedächtnis was Vornamen angeht
Och, das war ganz einfach... <)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

Auch wenn es etwas spät kommt.

Vielen Dank für den Code, vorallem für das Ermitteln des Pfades zum Wallpaper.
Antworten