• 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

    • Surprise! We still can't get it right. With the current state of AI, the crappy software, the huge mega-corporations that back all of these idiot things, I think we are a very long way away from SAE Level 5. I, for one, will never get in one.
    • Nice. September/October GA?! I'll keep following it, but won't install any preview or beta versions.
    • Wow, that could have been dangerous, certainly not ready for these things. They have to be 100% or pretty well close to it. Not that I will see one i doubt, never mind ride in one, they may have them in London, but I doubt they will come to where I live.
    • Nothing kills CMF Phone 2 Pro's successor due to rising memory prices by Hamid Ganji Storage and RAM prices have been rising over the past year, leading to a significant increase in the cost of electronics for customers around the world. Many companies are now revising their plans for upcoming devices due to higher component costs and overall production expenses. CMF is the latest company to cancel the successor to one of its best-selling phones due to rising memory prices. CMF is a sub-brand of Nothing and focuses on making budget smartphones for growing markets. The brand launched the CMF Phone 2 Pro last year with some eye-catching specifications and an affordable price. While many customers may have been waiting for a successor this year, one of the company’s executives has announced that CMF will not release a new smartphone this year. And AI is to blame. As Nothing co-founder Akis Evangelidis announced on X, the company has been working on a successor to the CMF Phone 2 Pro, but with current memory prices, it cannot “build a phone that feels like a genuine step forward at a price that makes sense for CMF.” So, no new CMF phone will be launched this year. Meanwhile, Evangelidis said the company still has several new products in the pipeline, including some in entirely new categories. He added that the Nothing brand will also continue launching new products through 2026. Budget smartphones are among the first victims of the surge in RAM and memory prices, as they have become more expensive to build. The sharp increase in memory costs could also reshape the traditional price ranges associated with budget phones. Apple CEO Tim Cook also recently said that price increases for some of the company’s products are unavoidable because RAM and memory have become significantly more expensive this year. Analysts estimate that the base price of the upcoming iPhone 18 Pro could rise to $1,399 due to current market shortages.
    • Nudge me when they bring back hardware audio acceleration so I can get my EAX 5 back. We've evolved graphics to real-time path tracing, but regressed audio some 15 years back in time with this stupid software audio stack.
  • Recent Achievements

    • Collaborator
      ryansurfer98 went up a rank
      Collaborator
    • Week One Done
      Eurosoft10 earned a badge
      Week One Done
    • One Month Later
      Eurosoft10 earned a badge
      One Month Later
    • One Year In
      Skeet Campbell earned a badge
      One Year In
    • One Month Later
      Sharbel earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      541
    2. 2
      +Edouard
      187
    3. 3
      Michael Scrip
      77
    4. 4
      PsYcHoKiLLa
      75
    5. 5
      Steven P.
      71
  • Tell a friend

    Love Neowin? Tell a friend!