Windows環境で、ユーザーのスクリーンセーバーが定義されている場合は、そのスクリーンセーバーを呼びたいと思っています。 hereのように、純粋なC++コードを使用して(そしてC#でのラッピングはかなりシンプルに)行うことができます。
しかし、好奇心のために、私はそのようなタスクが純ネット管理フレームワーク(バージョン2.0以上)を使用し、p/invokeなしで、C++側を訪れずに純粋に管理されたコードによって達成できるかどうかを知りたいと思います、簡単にWindows APIを使用することができます)。C#でWindowsでスクリーンセーバーを呼び出す方法は?
2
A
答えて
3
私はアイデアをした、うまくいけば、私はこれがどのように動作するか一貫わからないので、あなたは、私が考える少しを研究する必要があると思いますが、それはあなたを始めさせるのに十分です。
スクリーン・セーバーは、単に実行可能であり、レジストリはビスタの私のコピーにHKCU\Control Panel\Desktop\SCRNSAVE.EXE
にこの実行可能ファイルの場所を格納し、これが私の仕事:のいずれかのバージョンに取り組ん
RegistryKey screenSaverKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop");
if (screenSaverKey != null)
{
string screenSaverFilePath = screenSaverKey.GetValue("SCRNSAVE.EXE", string.Empty).ToString();
if (!string.IsNullOrEmpty(screenSaverFilePath) && File.Exists(screenSaverFilePath))
{
Process screenSaverProcess = Process.Start(new ProcessStartInfo(screenSaverFilePath, "/s")); // "/s" for full-screen mode
screenSaverProcess.WaitForExit(); // Wait for the screensaver to be dismissed by the user
}
}
1
1
私はこれを行うネットライブラリ機能を持つとは思わない - 私は気づいていない。クイック検索では、このコードプロジェクトtutorialが返されました。これには、あなたの質問に記載されている管理対象ラッパーの例が含まれています。
P/invokeが存在し、OS特有の機能(スクリーンセーバーがその一例です)にアクセスできるようになりました。
0
これを行うために完全に管理されたコードを使用できるかどうかはわかりません。
これは、Windows APIを使用していますが、それでも非常に簡単です:Launch System Screensaver from C# Windows Form
0
ウィンドウ...
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace HQ.Util.Unmanaged
{
public class ScreenSaverHelper
{
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
private static extern IntPtr GetDesktopWindow();
// Signatures for unmanaged calls
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SystemParametersInfo(int uAction, int uParam, ref int lpvParam, int flags);
// Constants
private const int SPI_GETSCREENSAVERACTIVE = 16;
private const int SPI_SETSCREENSAVERACTIVE = 17;
private const int SPI_GETSCREENSAVERTIMEOUT = 14;
private const int SPI_SETSCREENSAVERTIMEOUT = 15;
private const int SPI_GETSCREENSAVERRUNNING = 114;
private const int SPIF_SENDWININICHANGE = 2;
private const uint DESKTOP_WRITEOBJECTS = 0x0080;
private const uint DESKTOP_READOBJECTS = 0x0001;
private const int WM_CLOSE = 16;
public const uint WM_SYSCOMMAND = 0x112;
public const uint SC_SCREENSAVE = 0xF140;
public enum SpecialHandles
{
HWND_DESKTOP = 0x0,
HWND_BROADCAST = 0xFFFF
}
public static void TurnScreenSaver(bool turnOn = true)
{
// Does not work on Windows 7
// int nullVar = 0;
// SystemParametersInfo(SPI_SETSCREENSAVERACTIVE, 1, ref nullVar, SPIF_SENDWININICHANGE);
// Does not work on Windows 7, can't broadcast. Also not needed.
// SendMessage(new IntPtr((int) SpecialHandles.HWND_BROADCAST), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, (IntPtr)SC_SCREENSAVE, (IntPtr)0);
}
}
}
関連する問題
- 1. フォームをC#で呼び出す方法
- 2. C#でメソッドを呼び出す方法
- 3. C#でメソッド/呼び出しを別のメソッドから呼び出す方法は?
- 4. Windows XPスクリーンセーバー - スクリーンセーバーでプロセスダイを公開
- 5. Windowsでvsnprintfを呼び出すCコードを呼び出すRustコード
- 6. Mono/C#プログラムでlinux/C++関数を呼び出す方法は?
- 7. Windows Phone 7でwebserviceメソッドを呼び出す方法は?
- 8. WindowsバッチスクリプトでIF - ELSE IF条件を呼び出す方法は?
- 9. apache cgiアプリケーションでwindows api(FindWindow)を呼び出す方法は?
- 10. .NETで作成したWindowsサービスを呼び出す方法は?
- 11. Windowsフォームアプリケーションでmagento soap webserviceを呼び出す方法は?
- 12. C++でopenCVでcvMorphologyExを呼び出す方法は?
- 13. Windows Universal - C++プロジェクトでC#ランタイムコンポーネントを呼び出すとクラッシュする
- 14. C#WPF Windows Media Playerを呼び出す
- 15. C++でC++ DLLを呼び出す方法
- 16. c#.netでビジュアルC++メソッドを呼び出す方法
- 17. Windows 7でwin32 dllを呼び出す方法
- 18. 特定のPythonバージョンをscript.py内で呼び出す方法 - Windows
- 19. Python - サブプロセス - WindowsでPipedコマンドを呼び出す方法
- 20. ハスケルWindows上でffiを呼び出す方法
- 21. ローカルホストのPHPプログラムでwindowsフォルダダイアログを呼び出す方法
- 22. C#でメッセージボックス呼び出しを検出する方法
- 23. ウィンドウを呼び出す別の方法は? Objective-Cで
- 24. Visual C++で `dir`コマンドを正しく呼び出す方法は?
- 25. C#本体でXAMLコードを呼び出す方法は?
- 26. JavaでC#Webサービスを呼び出す方法は?
- 27. 目的のCでメソッドを呼び出す方法は?
- 28. C++でクラスを再帰的に呼び出す方法は?
- 29. C#でWSAAsyncSelect()を呼び出して使用する方法は?
- 30. C#でメソッドを連続して呼び出す方法は?
Windows APIをC#からも簡単に呼び出すことができます。 – Nate
重複しています(お探しの答えがあります):http://stackoverflow.com/questions/267728/launch-system-screensaver-from-c-windows-form – mockobject
詐欺ではない - 問題は、 p/invoke。 –