• 0

C# Screen saver?


Question

Recommended Posts

  • 0
Do you know how can I get the name of a screen saver? I want to have a combo box with screen savers names like in the screen savers menu. For example, my screen saver is "c:\windows\system32\myss.scr" - Can I get its name ?

You can search all files with ".src" in x:\win\system32

But this will spend times.l

  • 0

Aww, my code isn't needed anymore :(

But i will check out the problem with it not killing the screensaver, it works perfectly here.

Edit: Yeah, weenur, i looked at your code and it's superior than mine, at least my code was good for something

Also, my code is killing the screen saver here, so who knows.

Edited by The_Decryptor
  • 0

Lol, i was just going to post that i got weenur's code and improved on it (sorry weenur)

It's all Object Orientated now, so you call new on the module, supply the file name and Control to paint it on (and it's overloaded with directories to)

Then it has the Functions:

ShowScreenSaver

ShowScreenSaverConfig

ShowScreenSaverPreview

KillScreenSaver

Ill post it if you want, but if it's working in your code i wouldn't mess with it.

  • 0

I have absolutely no idea, but ill start working on it now.

Also, just wondering, what is this program your working on?

Edit: Okay, worked out how windows get's the name, it reads the name from the first string resource in the first string table in the file, now lets see how to access resources from managed code.

Edited by The_Decryptor
  • 0

Actually its a plugin for a program called Desktop Sidebar. It puts a toolbar on the side of the screen and allows you to launch programs, see video, mail and it has also an RSS aggresor... Great program (I suggest anyone to use it :) ). So I develop a plugin for it. I've already distrobuted the beta verion here. This is a plugin which allows users to see their screen savers on the desktop sidebar program. Already has about 47 downloads :laugh:

Hope you can find the code about the resources.

  • 0

Im on a roll lately, here is the code to get the name of the screen saver (again, sorry it's in vb)

API Declarations

? ?Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Integer) As Integer
 ? ?Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Integer
 ? ?Private Declare Function LoadString Lib "user32" Alias "LoadStringA" (ByVal hInstance As Integer, ByVal wID As Integer, ByVal lpBuffer As String, ByVal nBufferMax As Integer) As Integer

Code (Note, i made this as a function so it's easier to work with)

? ?Public Function GetScreenSaverName() As String
 ? ? ? ?Dim ScreenSaverHandle As Integer
 ? ? ? ?Dim ScreenSaverName As String = New String(Chr(0), 255)
 ? ? ? ?ScreenSaverHandle = LoadLibrary(scrFolder & scrPath)
 ? ? ? ?LoadString(ScreenSaverHandle, 1, ScreenSaverName, 255)
 ? ? ? ?FreeLibrary(ScreenSaverHandle)
 ? ? ? ?Return ScreenSaverName.Trim(Chr(0))
 ? ?End Function

the bit of code that says "scrFolder & scrPath" in the function LoadLibrary is the path to the .scr file (e.g. C:\WINDOWS\System32\logon.scr)

Edit: just changed the code a bit

Edited by The_Decryptor
  • 0

This is just to show that the code works now, this is my ScreenSaver Shower Thingy updated to use the object orientated ScreenSaver class i based off weenur's code, and my code to get the name

Notice the word Flurry in the caption of the group box

post-47-1093528664.png

Edited by The_Decryptor
  • 0

It doesn't work for me :no: Can you convert it to c#? I only need

Public Function GetScreenSaverName() As String
       Dim ScreenSaverHandle As Integer
       Dim ScreenSaverName As String = New String(Chr(0), 255)
       ScreenSaverHandle = LoadLibrary(scrFolder & scrPath)
       LoadString(ScreenSaverHandle, 1, ScreenSaverName, 255)
       FreeLibrary(ScreenSaverHandle)
       Return ScreenSaverName.Trim(Chr(0))
   End Function

this. My converter doesn't conver Chr(0). I tried to replace it with something else but all I get is a blank string. Can you do it ?

  • 0
It doesn't work for me  :no: Can you convert it to c#? I only need

Public Function GetScreenSaverName() As String
       Dim ScreenSaverHandle As Integer
       Dim ScreenSaverName As String = New String(Chr(0), 255)
       ScreenSaverHandle = LoadLibrary(scrFolder & scrPath)
       LoadString(ScreenSaverHandle, 1, ScreenSaverName, 255)
       FreeLibrary(ScreenSaverHandle)
       Return ScreenSaverName.Trim(Chr(0))
   End Function

this. My converter doesn't conver Chr(0). I tried to replace it with something else but all I get is a blank string. Can you do it ?

public string GetScreenSaverName()
{
    int scrHandle;
    string scrName = new string( '\0', 25 ); // note that according to the specs of a screensaver, the name can never be longer than 25 chars.

    scrHandle = LoadLibrary( scrFolder + scrPath );
    LoadString( scrHandle, 1, scrName, 25 );
    FreeLibrary( scrHandle );
    return scrName.Trim();
}

Edited by weenur
  • 0

I get the same thing. Wierd.

HMODULE LoadLibrary(LPCTSTR lpModuleName)

BOOL FreeLibrary(HMODULE hModule)

int LoadString(HINSTANCE hInst, UINT uid, LPTSTR lpBuffer, int nBufferMax)

<edit> Fixed it. I was passing in by reference. pass in the string by val to the LoadString function.

  • 0

I don't understand - I use this:

 [System.Runtime.InteropServices.DllImport("kernel32")]
  private static extern int FreeLibrary(int hLibModule);
  [System.Runtime.InteropServices.DllImport("kernel32", EntryPoint="LoadLibraryA")]
  private static extern int LoadLibrary(string lpLibFileName);
  [System.Runtime.InteropServices.DllImport("user32", EntryPoint="LoadStringA")]
  private static extern int LoadString(int hInstance, int wID, string lpBuffer, int nBufferMax);
  

public string GetScreenSaverName()
{
   int scrHandle;
   string scrName = new string( '\0', 25 ); 

   scrHandle = LoadLibrary( @"c:\windows\system32\3d maze.scr" );
   LoadString( scrHandle, 1, scrName, 25 );
   FreeLibrary( scrHandle );
   return scrName.Trim();
}

And I can't see anything but a blank text :( What am I do wrong ?

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • And none of them have a "notchless" 3:2 OLED screen, for which I was always willing to pay more.
    • Remember when the PS2 was banned from export because "its too high tech".. "it could be used for missiles".....
    • Nvidia 610.62 driver lands with big bug fixes and Empulse support by Pulasthi Ariyasinghe There is a new driver available for Nvidia GeForce hardware owners, and it's carrying a whole lot of bug fixes. The WHQL-certified 610.62 Game Ready driver is also adding support for Empulse. Empulse lands from 1047 Games. That may be familiar to first-person shooter fans, as this is the studio that has been behind Splitgate and the Splitgate: Arena Reloaded sequel. This latest FPS entry will land into early access on June 24, and it will have support for DLSS 4.5 with dynamic multi-frame generation and Nvidia Reflex on day one. FIXED World of Warcraft: Gaming stability improvements [5563205] FIXED Apex Legends: Occasional visual corruption after extended gameplay [6239327] FIXED Users may observe DLSS settings being grayed out in certain games after updating to display driver 610.47 [6262805] FIXED Improved gaming stability in multi-monitor configurations when using V-SYNC with DLSS Frame Generation [6158481] FIXED Resolved an issue that could cause jittering or ghosting in some DirectX 11 games when Smooth Motion is enabled [5937897] FIXED Resolved an issue that could cause some games to crash when launched with Smooth Motion enabled [5466398] FIXED [Ada] Resolves a frame pacing issue on certain monitors when G-SYNC is enabled [6226972] FIXED Resolved an issue that prevented the EDID from being read on certain monitors causing them to be identified as "NVIDIA NV-Failsafe” [6005508] FIXED Resolved an issue where certain monitors would not wake from sleep mode [5806798/5635230] FIXED General stability improvements when the system fails to create a new allocation [5449920] Nvidia has only listed a single open issue for this release: “Prefer Maximum Performance” Power Management Mode may not be applied correctly [6007998] The NVIDIA 610.62 driver is now available for download from the NVIDIA app. For those who want to download it directly, standalone links are here. Here are the official release notes (PDF).
    • You could do that in the last 2 updates as well.
  • Recent Achievements

    • One Year In
      Console General earned a badge
      One Year In
    • One Year In
      Twozo Technologies earned a badge
      One Year In
    • One Month Later
      Twozo Technologies earned a badge
      One Month Later
    • Week One Done
      Twozo Technologies earned a badge
      Week One Done
    • Veteran
      branfont went up a rank
      Veteran
  • Popular Contributors

    1. 1
      +primortal
      510
    2. 2
      +Edouard
      190
    3. 3
      PsYcHoKiLLa
      109
    4. 4
      Steven P.
      89
    5. 5
      Nick H.
      68
  • Tell a friend

    Love Neowin? Tell a friend!