Win10 배경화면으로 프로그램을 실행할 수 있나요? (안드로이드 라이브 배경화면과 유사)

Win10 배경화면으로 프로그램을 실행할 수 있나요? (안드로이드 라이브 배경화면과 유사)

프로그램을 배경화면으로 실행할 수 있는 방법이 있나요? 백그라운드에서 지속적으로 exe를 실행하면 됩니다. 그것은 본질적으로 내 자신의 '벽지 응용 프로그램'이 될 것입니다.

답변1

아니요, 불가능합니다. Vista에서 Microsoft는드림씬데스크탑에서 재생되는 비디오일 뿐이었습니다. 이는 Windows 7에서 제거되었으며 Microsoft는 이와 같은 기능을 다시는 추가하지 않았습니다.

이제 다음과 같은 타사 도구가 있습니다.활기찬 배경화면 앱/게임을 백그라운드로 실행할 수 있다고 주장합니다.

답변2

예, EXE 및 기술에 따라 바탕 화면 배경으로 응용 프로그램을 실행하는 것이 가능합니다.

  1. 가장 좋은 방법은 올바른 종류의 창을 생성하는 프로그램이나 스크립트를 작성하는 것입니다. 쉽지는 않지만 가능합니다. 단 몇 백 줄의 코드로 이 작업을 수행하는 방법을 보여주는 Python 스크립트가 있습니다. 이는 최고의 유연성과 효율성을 제공하며 비용은 최소화합니다.

  2. 대부분의 항목(이미지, 비디오, 웹 페이지, Unity 엔진 게임/애플리케이션 등)을 데스크탑 배경으로 추가하는 데 도움이 되는 Lively라는 무료 오픈 소스 프로그램이 있습니다. 그 기능은 일부 유료 프로그램만큼 광범위하지도 않고 그다지 효율적이지도 않습니다.

  3. Lively보다 더 많은 기능과 더 나은 성능을 제공하는 Wallpaper Engine이라는 저렴한($4-$5 USD) 프로그램이 있습니다.

다른 유료 배경화면 프로그램도 있습니다. 특정 목적에 적합한 옵션을 찾으려면 각 옵션을 실험해 봐야 합니다.

답변3

완전한 제어권을 확보하고 EXE를 배경 화면으로 사용하여 최대한의 유연성을 확보할 수 있는 간단한 방법을 원한다면 프로그램을 직접 만들고 시작할 때 실행되도록 설정하고 자원을 낭비하지 않는지 확인해야 합니다.

즉, 월페이퍼 엔진을 사용할 수 있습니다. 하지만 5달러를 쓰고 싶지 않고 프로그래밍할 수 있다면 이 방법을 추천하지 않습니다.

처음부터 프로그래밍하기로 결정했다면 C와 <windows.h> 라이브러리 및 기타 필요한 모든 것을 사용하는 것이 좋습니다. windows.h는 WINDOW를 만들고 제어하며 훨씬 낮은 수준에서 I/O를 관리하는 데 사용할 수 있는 다양한 기능과 유형을 제공합니다. 예를 들어:

    #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "v/Vec.h"
#include <windows.h>


#define PI 3.14159265358979323846
#define SECONDS_ANGLE  PI/60*2
#define MINUTES_ANGLE  PI/60/60*2
#define HOURS_ANGLE  PI/60/60/12*2
#define SECONDS_HAND_LENGTH 135*3
#define MINUTES_HAND_LENGTH 140*3
#define HOURS_HAND_LENGTH 90*3
#define PIXEL_RATIO_X 2.0
#define PIXEL_RATIO_Y 5.0
#define nScreenWidth  (1920.0)/PIXEL_RATIO_X        // Console Screen Size X (columns)
#define nScreenHeight (1080.0)/PIXEL_RATIO_Y        // Console Screen Size Y (rows)

typedef struct Circle{
    Vector center;
    float radius;
} Circle,*PCircle;

void scrprint(wchar_t* scrn, Vector center, Vector b, char L){
    //Vector a = VaddR(c,VratioScale(b,(Vector){1,1}));
    Vector a = VaddR(center,b);
    scrn[(int)((int)a.y*nScreenWidth + a.x)] = L;
}

void mlerp (wchar_t* scrn, Vector c, Vector b, double count,char L){
    double inc = 1/count;
    
    for (double i = 0; i <1 ; i+=inc)
    {
        scrprint(scrn, c, VscaleR(b,i), L);
    }
    
}

void DrawCircle(wchar_t* scrn, Circle C, double definition){
    Vector pointer = {0, -1,1};
    double angle = 2*PI/definition;
    for (double i = 0; i<2*PI; i+=angle){
        scrprint(scrn,C.center,VratioScale(VscaleR(pointer,C.radius),(Vector){1/PIXEL_RATIO_X,1/PIXEL_RATIO_Y}),'0');
        Vrotate(&pointer,angle);
    }
}

// #define _WIN32_WINNT 0x0601
// #include<windows.h>
// typedef struct _CONSOLE_FONT_INFOEX
// {
//     ULONG cbSize;
//     DWORD nFont;
//     COORD dwFontSize;
//     UINT  FontFamily;
//     UINT  FontWeight;
//     WCHAR FaceName[LF_FACESIZE];
// }CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
// //the function declaration begins
// #ifdef __cplusplus
// extern "C" {
// #endif
// BOOL WINAPI SetCurrentConsoleFontEx(HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFOEX
// lpConsoleCurrentFontEx);
// #ifdef __cplusplus
// }
// #endif

int main(){
    
    //*set up font size , screen and allocation of buffer
    
    CONSOLE_FONT_INFOEX cfi;
    //WindowFromPoint((POINT){0,0});
    //ShowWindow(GetConsoleWindow(), SW_MAXIMIZE);
    
    ShowCursor(SW_HIDE);
    
    cfi.nFont = FF_DECORATIVE;
    cfi.FontWeight = 1;
    cfi.FontFamily = FKF_CLICKON;
    cfi.dwFontSize.X = 1;
    cfi.dwFontSize.Y = 1;
    
    PCONSOLE_FONT_INFOEX cfiP = &cfi;
    
    // Create Screen Buffer
    wchar_t *screen = (wchar_t*)malloc(sizeof(wchar_t[(int)(nScreenWidth*nScreenHeight)]));
    
    
    POINT mousexy;
    MOUSEINPUT mI;
    COORD loc;
    //*/

    //*handle the console screen
    PCOORD throwaway;
    HWND hCosWindow = GetConsoleWindow();
    UINT hConsoleOut = GetConsoleOutputCP();
    HANDLE hSTDCon = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, 0);
    SetConsoleActiveScreenBuffer(hConsole);
    SetCurrentConsoleFontEx(hCosWindow, 0,cfiP);
    SetConsoleDisplayMode(hCosWindow,SHOW_FULLSCREEN,throwaway);
    
    
    
    DWORD dwBytesWritten = 0;
    //*/

    Vector VminutesHand, VhoursHand, VsecondsHand, VscrCenter,
           VhalfCM, VrescaledHands_S, VrescaledHands_M, VrescaledHands_H;
    //*Vector Init
    VscrCenter.x = (nScreenWidth)/2;
    VscrCenter.y = (nScreenHeight)/2;
    VsecondsHand.y = -SECONDS_HAND_LENGTH;
    VminutesHand.y = -MINUTES_HAND_LENGTH;
    VhoursHand.y = -HOURS_HAND_LENGTH;
    VsecondsHand.x = 0;
    VminutesHand.x = 0;
    VhoursHand.x = 0;
    //*/
    
    clock_t start =clock(), end = clock();
    double timeTaken = 0;
    
    time_t rawtime;
    struct tm * timeinfo;
    
    time(&rawtime);
    timeinfo = localtime(&rawtime);
    
    //angle between 12o'clock and current time
    Vrotate(&VsecondsHand,(2*(double)timeinfo->tm_sec*PI)/60);
    Vrotate(&VminutesHand,(2*((double)timeinfo->tm_min+(double)timeinfo->tm_sec/60)*PI)/60);
    Vrotate(&VhoursHand,(2*((double)timeinfo->tm_hour+((double)timeinfo->tm_min/60+(double)timeinfo->tm_sec/60/60))*PI)/12);

    Circle ClockCirc     = {VscrCenter, 150*3};
    Circle Clock12thDots = {VscrCenter, 120*3};
    Circle Clock60thDots = {VscrCenter, 140*3};

    while(GetAsyncKeyState('Q')==0 || GetAsyncKeyState(VK_LCONTROL)==0 || GetAsyncKeyState(VK_LMENU)==0){
        start = clock();
        //clear screen
        for (size_t i = 0; i < nScreenWidth*nScreenHeight; i++)
        {   
            screen[i] = ' ';           
        }
        
        DrawCircle(screen,ClockCirc,800);
        DrawCircle(screen,Clock12thDots,12);
        DrawCircle(screen,Clock60thDots,60);

        Vrotate(&VsecondsHand, -SECONDS_ANGLE * timeTaken);
        Vrotate(&VminutesHand, -MINUTES_ANGLE * timeTaken);
        Vrotate(&VhoursHand, -HOURS_ANGLE * timeTaken);       
        
        //GetCursorPos(&mousexy);
        //loc.X = (mousexy.x)/2;
        //loc.Y = (mousexy.y)/5;
        //VhalfCM = VaddR(VscrCenter,VratioScale(VsubR((Vector){loc.X, loc.Y},VscrCenter),(Vector){0.5,0.5}));
        //screen[(int)(loc.Y*(nScreenWidth) + loc.X)] = '0';
        //screen[(int)(((int)VhalfCM.y)*nScreenWidth  + (VhalfCM.x))] = '0';
        //screen[(int)((VhalfCM.y) * (nScreenWidth) + (VhalfCM.x))] = '0';
        //always 1half shifted towards vscrncenter but it is smooth 
        //screen[(int)((VscrCenter.y+loc.Y-VscrCenter.y/2)*(nScreenWidth) + VscrCenter.x+(loc.X-VscrCenter.x/2))] = '0';

        screen[(int)(VscrCenter.y*(nScreenWidth) + VscrCenter.x)] = '0';
        
        VrescaledHands_S = VratioScale(VsecondsHand,(Vector){0.5,0.2});
        VrescaledHands_M = VratioScale(VminutesHand,(Vector){0.5,0.2});
        VrescaledHands_H = VratioScale(VhoursHand,(Vector){0.5,0.2});
        
        //mlerp(screen, VscrCenter, VsubR((Vector){loc.X,loc.Y}, VscrCenter),20,'q');
        mlerp(screen,VscrCenter,VrescaledHands_S,60,'.');
        mlerp(screen,VscrCenter,VrescaledHands_M,100,'m');
        mlerp(screen,VscrCenter,VrescaledHands_H,150,'H');
        /*mouse cursor handler
        SetConsoleCursorPosition(hConsole, loc);
        //screen[(int)(loc.Y*(nScreenWidth) + loc.X)] = '0';
        //printf("\033[%d;%dH",mousexy.x, mousexy.y);
        //*/
        
        if (-0.01<VangleR(VsecondsHand,(Vector){0,-1}) && VangleR(VsecondsHand,(Vector){0,-1})<0.01){
            //MessageBeep(MB_ICONWARNING);
        }

        //diagnostics and writeout
        //swprintf_s(screen, 60, L"X= %d, Y= %d, halfCM.x= %.2f, halfCM.y= %.2f", loc.X, loc.Y, VhalfCM.x, VhalfCM.y*nScreenWidth);
        WriteConsoleOutputCharacterW(hConsole, screen, nScreenWidth * nScreenHeight, (COORD){0,0} , &dwBytesWritten);
        timeTaken = ((double) (end - start)) / CLOCKS_PER_SEC;
        end = start;
    }
    free(screen);
    
    
    return 0;
}

그것은 콘솔에서 시계를 만들기 위해 만든 간단한 프로그램입니다. 작동하려면 콘솔 글꼴을 5로 설정해야 합니다. 창을 마우스 오른쪽 버튼으로 클릭하여 콘솔 속성에 들어가서 전체 화면을 보려면 F11을 누르세요. 의견은 문제 해결 및 테스트를 위한 것입니다. 제거할 수 있지만 Windows 프로그래밍을 처음 접하는 경우 명명 체계에 대한 느낌을 얻고 더 많은 문서를 원하는 경우 다음과 같이 하는 것이 좋습니다.https://learn.microsoft.com/en-us/windows/win32/learnwin32/what-is-a-window-


내 "Vec.h"의 경우 일반 벡터 라이브러리입니다.

    #ifndef VEC_H
#define VEC_H

#include <math.h>
typedef struct Vector{
    double x,y,m;

} Vector, *PVector;

void VSetEqual (PVector v1,Vector v2){
    v1->x = v2.x;
    v1->y = v2.y;
    v1->m = v2.m;
}

void Vadd (PVector v1,Vector v2){
    v1->x += v2.x;
    v1->y += v2.y;
    
}

void Vsub (PVector v1,Vector v2){
    v1->x -= v2.x;
    v1->y -= v2.y;
}

void Vscale (PVector v1, double s1){
    v1->x*=s1;
    v1->y*=s1;
    v1->m*=s1;
}

Vector VaddR (Vector v1,Vector v2){
    return (Vector){v1.x + v2.x, v1.y + v2.y};
    
}

Vector VsubR (Vector v1,Vector v2){
    return (Vector){v1.x - v2.x, v1.y - v2.y};
}

Vector VscaleR (Vector v1, double s1){
    return (Vector){v1.x * s1, v1.y * s1};
}

double Vdot(Vector A, Vector B){
    return (A.x* B.x + A.y * B.y);
}

double VmagR(Vector v1){
    return sqrt(v1.x*v1.x + v1.y*v1.y);;
}

void Vmag(PVector v1){
    v1->m =  sqrt(v1->x*v1->x + v1->y*v1->y);
}

void Vnorm(PVector v1) {
    Vmag(v1);
    if(v1->m==0) return;
    v1->x /= v1->m;
    v1->y /= v1->m;
    v1->m = 1;
}

Vector VnormR(Vector v1){
    double m = VmagR(v1);
    if (m==0)return (Vector){0,0,0};
    
    return VscaleR(v1,m);
}

Vector VratioScale(Vector v1,Vector scalars){
    v1.x *= scalars.x;
    v1.y *= scalars.y;
    return v1;
}

void Vrotate (PVector v1, double angle){
    double temp = v1->x;
    v1->x = v1->x*cosf(angle) - v1->y*sinf(angle);
    v1->y = temp*sinf(angle) + v1->y*cosf(angle);

}
Vector VrotateR (Vector v1, double angle){
    double temp = v1.x;
    v1.x = (v1.x * cos(angle)) - (v1.y * sin(angle));
    v1.y = (temp * sin(angle)) + (v1.y * cos(angle));
    return v1;
}

double VangleR(Vector v1, Vector v2){
    return (acos((v1.x*v2.x+v1.y+v2.y)/(VmagR(v1)*VmagR(v2))));
}

//cos -sin |  x
//         |
//sin cos  |  y

#endif

관련 정보