Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   как бы по простому вывести картинку поверх всего изображения на монике ? (http://forum.oszone.net/showthread.php?t=127273)

mitiya 29-12-2008 03:20 992716

как бы по простому вывести картинку поверх всего изображения на монике ?
 
В общем сделал батник который отключает и включает 3g модем , теперь хочется сделать что б картинка при этом вылезала ,как при отключении штатного блютуфа и вайфай . Может кто знает простой способ (vbs,js или консольную прогу) для этого. С делфи и С конечно не буду из-за этого разбираться.

Delirium 29-12-2008 03:57 992726

Цитата:

Цитата mitiya
как при отключении штатного блютуфа и вайфай »

Имеется в виду картинка, которая в трее показывается или что именно? Если да, то можно через WMI проверять состояния сетевой карты. Опишите подробней, что необходимо, глядишь и нарисую :)

Котяра 29-12-2008 15:06 993005

Судя по всему, mitiya надо, чтобы вылазила всплывающяя подсказка из трея. Такая:

mitiya 29-12-2008 17:50 993148



вот такая картинка вылизает когда я включаю вайфай.
Это Еее 901 . Смысл в том что я туда внутрь впоял 3г модем , теперь он вроде как встроенное устройство , на свободную горячую клавишу я прицепил батник который с помощью USBDeview включает и выключает этот модем , дак вот охота сделать чтоб еще и картинка типа этой вылезала.

pva 29-12-2008 22:55 993371

Вот такой тестик набросал (сохрани под именем test.hta и тыкни мышкой)
Код:

<HTA:APPLICATION ID="hta"
    APPLICATIONNAME="myApp"
    BORDER="none"
    CAPTION="no"
    BORDERSTYLE="raised"
    INNERBORDER="no"
    SCROLL="no"/>
<SCRIPT LANGUAGE="JavaScript">
  <!-- // Activate cloak
  resizeTo(100,50);
  moveTo((screen.width-100)/2,(screen.height-50)/2);
  hta.windowState="normal";

  setInterval("close()", 1000);
  // Deactivate cloak -->
</SCRIPT>
<BODY BGCOLOR="Aqua">
  Enabled
</BODY>

достоинства:
1. просто и прозрачно
недостатки:
1. не поверх всех
2. в таскбаре появляется заголовок
3. мелькает один раз при старте
4. не стильно

вариант2: запустить с консоли mplay32 /close /play enabled.avi, где авишка - придуманная тобой какая-нить анимация.
достоинства:
1. просто и прозрачно
2. стильно (таких выкрутасов можешь в авишку загнать!)
недостатки:
1. не поверх экрана
2. появляется в случайном месте

Можно ещё написать програмку в виде экзешника, который создаёт окно поверх всех, рисует в нём что нужно и закрывается (20 строчек кода)
достоиства:
1. выполнит всё как захочешь
недостатки:
1. непросто и непрозрачно

mitiya 01-01-2009 20:13 995159

pva, если бы кто-нибудь написал програмулину которая работала из консоли следующим образом (show.exe d:\img.bmp) , был бы премного благодарен ;-)

pva 04-01-2009 00:49 996722

файл с пробелами указывается в кавычках
Код:

#define UNICODE
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
struct loader_t
{
    wchar_t** argv;
    int    argc;
    HWND    hwnd;

    loader_t() : argv(), argc(), hwnd()
    {
        argv = CommandLineToArgvW(GetCommandLine(), &argc);
    }

    bool createWindow(HINSTANCE hinst, unsigned timeout)
    {
        if (1<argc)
        {
            HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, L"STATIC", 0,
                    WS_POPUP|WS_BORDER|SS_BITMAP, 0, 0, 0, 0, 0, 0, hinst, 0);

            SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, reinterpret_cast<long>(
                    LoadImage(0, argv[1], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)));

            RECT rect;

            return GetWindowRect(hwnd, &rect) &&
                SetWindowPos(hwnd, HWND_TOPMOST, (GetSystemMetrics(SM_CXSCREEN)-rect.right)>>1,
                    (GetSystemMetrics(SM_CYSCREEN)-rect.bottom)>>1, 0, 0, SWP_NOSIZE|SWP_SHOWWINDOW) &&
                UpdateWindow(hwnd) &&
                SetTimer(hwnd, 111, timeout, 0);
        }

        return false;
    }

    ~loader_t()
    {
        GlobalFree(argv);
    }
};

#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/)
{
    if (loader_t().createWindow(hInstance, 2000))
    {
        MSG cmsg;

        while (GetMessage(&cmsg, 0, 0, 0)==1 &&
            cmsg.message!=WM_TIMER && cmsg.wParam!=111)
        {
            DispatchMessage(&cmsg);
        }

        return 1;
    }

    return 0;
}
//---------------------------------------------------------------------------

возвращает 1 если окно показывалось, 0 - если нет. Нельзя приделывать к нему манифест чтоб подключались ComCtl 6.0 - не будет работать.

mitiya 05-01-2009 19:56 998200

Спасибо большое !

mitiya 07-01-2009 00:40 999313

еслиб еще в панели задач не появлялось ничего :blush2:

pva 07-01-2009 12:12 999513

Извиняюсь, при отладке загляделся и не заметил. Исправленный вариант:
Код:

#define UNICODE
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
struct loader_t
{
    wchar_t** argv;
    int    argc;
    HWND    hwnd;

    loader_t() : argv(), argc(), hwnd()
    {
        argv = CommandLineToArgvW(GetCommandLine(), &argc);
    }

    bool createWindow(HINSTANCE hinst, unsigned timeout)
    {
        if (1<argc)
        {
            HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, L"STATIC", 0,
                    WS_POPUP|WS_BORDER|SS_BITMAP, 0, 0, 0, 0,
                    CreateWindowEx(0, L"STATIC", 0, 0, 0, 0, 0, 0, 0, 0, hinst, 0),
                    0, hinst, 0);

            SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, reinterpret_cast<long>(
                    LoadImage(0, argv[1], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)));

            RECT rect;

            return GetWindowRect(hwnd, &rect) &&
                SetWindowPos(hwnd, HWND_TOPMOST, (GetSystemMetrics(SM_CXSCREEN)-rect.right)>>1,
                    (GetSystemMetrics(SM_CYSCREEN)-rect.bottom)>>1, 0, 0, SWP_NOSIZE|SWP_SHOWWINDOW) &&
                UpdateWindow(hwnd) &&
                SetTimer(hwnd, 111, timeout, 0);
        }

        return false;
    }

    ~loader_t()
    {
        GlobalFree(argv);
    }
};

#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/)
{
    if (loader_t().createWindow(hInstance, 2000))
    {
        MSG cmsg;

        while (GetMessage(&cmsg, 0, 0, 0)==1 &&
            cmsg.message!=WM_TIMER && cmsg.wParam!=111)
        {
            DispatchMessage(&cmsg);
        }

        return 1;
    }

    return 0;
}
//---------------------------------------------------------------------------


mitiya 08-01-2009 03:47 1000217

И еще раз спасибо. :)


Время: 13:55.

Время: 13:55.
© OSzone.net 2001-