Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 6
1

Смена обоев рабочего стола

22.03.2019, 11:10. Показов 2234. Ответов 11
Метки нет (Все метки)

Вопрос вот в чем. Я не силен в Visual Studio. Хочу объединить vbs скрипт и картинку, в один exe фаил. Чтоб по клику менять заставку на раб столе.Где ошибка?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using Marmel.Properties;
namespace Marmel
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            string file1 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)+ "\\script.vbs";
            string file2 = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Image.jpg";
            
            if (!File.Exists(file1))
            {
                File.WriteAllText(file1, Resources.script);
                Process.Start(file1);
            }
            else
            {
                File.Delete(file1);
                File.WriteAllText(file1, Resources.script);
                Process.Start(file1);
            }
            if (!File.Exists(file2))
            {
                File.WriteAllText(file2, Resources.Image);
                Process.Start(file2);
            }
            else
            {
                File.Delete(file2);
                File.WriteAllText(file2, Resources.Image);
                Process.Start(file2);
            }
 
          
 
        }
    }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2019, 11:10
Ответы с готовыми решениями:

Сканирование рабочего стола
Кто нить может подсказать код сканирования на файлы. Нужно сканировать рабочий стол, выявить кол-во...

Скрыть ярлыки рабочего стола
Можно сделать так чтоб при запуске программы исчезали все ярлыки рабочего стола?

Свой аналог рабочего стола
Делаю программу аналог рабочего стола.Что-то типа такого,как на скрине,только со своими виджетами и...

Изменение заставки рабочего стола
сабж, такое возможно?

11
311 / 224 / 78
Регистрация: 17.08.2014
Сообщений: 910
22.03.2019, 11:19 2
Viktor74, где то ошибка по любому есть.
особенно мне нравится сохранение картинки как строки..
Цитата Сообщение от Viktor74 Посмотреть сообщение
File.WriteAllText(file2, Resources.Image);
как минимум тут должно быть File.WriteAllBytes(file2, Resources.Image)
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 6
22.03.2019, 11:22  [ТС] 3
нет все равно ошибка
0
311 / 224 / 78
Регистрация: 17.08.2014
Сообщений: 910
22.03.2019, 11:24 4
но и это ничего не даст потому что вы потом картинку пытаетесь запустить. соответственно откроется редактор картинки но никак картина на рабочий стол не поместится.
если через Vbs вы устанавливаете картинку то вы должны:
1.сохранить картинку на диск если ее нет.
2.сохранить vbs скрипт с указанием пути до картинки которую сохранили ранее.
3.запустить vbs скрипт и дождаться его отработки.
4.удалить скрипт и картинку после запуска.
при этом я бы не использовал Writeall... а использовал бы streamwriter для 100% освобождения ресурсов после записи.
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 6
22.03.2019, 12:09  [ТС] 5
Скрипт написал, все работает. Но я хочу чтоб был один exe-ик
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
On error resume next
set Shell = createobject("wscript.shell")
Set shell = Nothing
Set oADOStream = CreateObject("ADODB.Stream") 
oADOStream.Mode = 3 
oADOStream.Type = 1 
oADOStream.Open 
oADOStream.Write oXMLHTTP.responseBody 
Set wshShell = CreateObject( "WScript.Shell" )
Comp  = "RemoteCompX"
'Image = "ПУТЬ до КАРТИНКИ\165029_07.jpg"
If CompStr(Comp, CreateObject("WScript.Network").ComputerName, 1) = 0 Then
  With GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}")
    .document.Application.NameSpace(0).ParseName(Image).InvokeVerb "setdesktopwallpaper"
    .Quit
  End With
Else
  With GetObject("winmgmts:{impersonationLevel=Impersonate}!")
    .Get("\\" & Comp & "\root\default:StdRegProv").SetStringValue _
    2147483650, "SOFTWARE\Microsoft\Windows Script Host\Settings", "Remote", "1"
    .Get("\\" & Comp & "\root\CIMV2:Win32_Process").Create "wsbcript.exe -regserver"
  End With
  Set RScript = WSH.CreateObject("WSHController").CreateScript(WSH.ScriptFullName, Comp)
  RScript.Execute : Do : WSH.Sleep 50 : Loop Until RScript.Status = 2
End If
0
311 / 224 / 78
Регистрация: 17.08.2014
Сообщений: 910
22.03.2019, 16:00 6
Viktor74,
чуть позже смогу вам написать код под тот самый алгоритм который я указывал выше.
У вас сейчас ошибки картинки которую надо грузить у вас нет на диске в момент запуска скрипта.
название картинки в скрипте закоменчено.
картинка в момент выгрузки скорее всего будет заблокирована для использования ее в качестве рабочего стола.
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 6
22.03.2019, 16:29  [ТС] 7
Спасибо, но проблема не в этом. Закоментировал это я сам. Скрипт vbs работает. картинка есть, путь знаю. Но это два файла, а мне нужно их "склеить" в один -EXE. Чтоб по клику все происходило. Как "склеить" два exe в Visual Studio я знаю. А тут что то не срастаются.
0
872 / 660 / 215
Регистрация: 30.04.2009
Сообщений: 2,749
23.03.2019, 00:18 8
Если не принципиально использовать vbs script, то можно сменить обои средствами .NET

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Wallpaper.Set(Resources.Image, Wallpaper.Style.Stretched);
        }
    }
 
    public static class Wallpaper
    {
        const int SPI_SETDESKWALLPAPER = 20;
        const int SPIF_UPDATEINIFILE = 0x01;
        const int SPIF_SENDWININICHANGE = 0x02;
 
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
 
        public enum Style : int
        {
            Tiled,
            Centered,
            Stretched
        }
 
        public static void Set(Image img, Style style)
        {
            string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp");
            img.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp);
 
            RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
            if (style == Style.Stretched)
            {
                key.SetValue(@"WallpaperStyle", 2.ToString());
                key.SetValue(@"TileWallpaper", 0.ToString());
            }
 
            if (style == Style.Centered)
            {
                key.SetValue(@"WallpaperStyle", 1.ToString());
                key.SetValue(@"TileWallpaper", 0.ToString());
            }
 
            if (style == Style.Tiled)
            {
                key.SetValue(@"WallpaperStyle", 1.ToString());
                key.SetValue(@"TileWallpaper", 1.ToString());
            }
 
            SystemParametersInfo(SPI_SETDESKWALLPAPER,
                0,
                tempPath,
                SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
        }
    }
}
Мопед не мой.

Добавлено через 21 минуту
Цитата Сообщение от Viktor74 Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
  With GetObject("winmgmts:{impersonationLevel=Impersonate}!")
    .Get("\\" & Comp & "\root\default:StdRegProv").SetStringValue _
    2147483650, "SOFTWARE\Microsoft\Windows Script Host\Settings", "Remote", "1"
    .Get("\\" & Comp & "\root\CIMV2:Win32_Process").Create "wsbcript.exe -regserver"
  End With
  Set RScript = WSH.CreateObject("WSHController").CreateScript(WSH.ScriptFullName, Comp)
  RScript.Execute : Do : WSH.Sleep 50 : Loop Until RScript.Status = 2
У вашего скрипта какая то странная "полезная нагрузка". Троян?
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 6
23.03.2019, 07:39  [ТС] 9
Спасибо. Но все равно да файла. А нужен один. Нет это не троян, мне далеко еще до написания троянов. Просто тот код тоже найден на просторах инета. Что значит простыми способами никак?
0
311 / 224 / 78
Регистрация: 17.08.2014
Сообщений: 910
23.03.2019, 15:56 10
Viktor74, в любом случае будет минимум 2 файла. картинка+ ехе либо еще что то. Потому что установить картинку вы сможете только с существующего файла. потом когда винда закеширует файл его можно удалить, обои при этом останутся.
Но в момент установки все равно будет 2 файла.....
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 6
23.03.2019, 23:42  [ТС] 11
Да в момент установки два, согласен. Логика такова. Один EXE из него картинка и скрипт установщик, все "распаковывается" на рабочий стол. Скрипт делает свое дело, картинку можно не удалять. Как?
0
311 / 224 / 78
Регистрация: 17.08.2014
Сообщений: 910
24.03.2019, 13:06 12
Viktor74, вам же дали код в 8 комментарии, код абсолютно рабочий. никаких vbs скриптов. будет 1 Exe файл
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2019, 13:06

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Обработка изображения рабочего стола
Всем доброго времени суток. По задаче для начала нам необходимо получить скрин с экрана, после...

Как определить hwnd рабочего стола?
Как определить hwnd рабочего стола? Добавлено через 2 часа 22 минуты решено. через спай пробил...

Скриншот рабочего стола удаленной машины.
Только начал изучать С#, прошу вашей помощи. Возможно ли получить скриншот рабочего стола...

Как программно сменить фон рабочего стола
Как программно сменить фон рабочего стола? P.S. Windows 7


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.