eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPowerShell - ktos uzywa?Re: PowerShell - ktos uzywa?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!nf1.ipartners.pl!ipartners.pl!newsfeed.
    pionier.net.pl!feeder.erje.net!eu.feeder.erje.net!news2.arglkargh.de!news.mixmi
    n.net!aioe.org!.POSTED!not-for-mail
    From: "AK" <n...@n...com>
    Newsgroups: pl.comp.programming
    Subject: Re: PowerShell - ktos uzywa?
    Date: Sun, 17 Mar 2013 00:52:03 +0100
    Organization: Aioe.org NNTP Server
    Lines: 259
    Message-ID: <ki30jb$pb6$1@speranza.aioe.org>
    References: <5142e7de$0$1250$65785112@news.neostrada.pl>
    <c...@g...com>
    <ki1m73$jkn$1@news.task.gda.pl>
    <514472e5$0$1221$65785112@news.neostrada.pl>
    <ki1ttq$fc7$1@node1.news.atman.pl> <ki2370$mas$1@dont-email.me>
    NNTP-Posting-Host: VJTSif3S1kcKkhqP293jEg.user.speranza.aioe.org
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
    Content-Transfer-Encoding: 8bit
    X-Complaints-To: a...@a...org
    X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6002.18463
    X-Notice: Filtered by postfilter v. 0.8.2
    X-Newsreader: Microsoft Windows Mail 6.0.6002.18197
    X-Priority: 3
    X-MSMail-Priority: Normal
    Xref: news-archive.icm.edu.pl pl.comp.programming:202222
    [ ukryj nagłówki ]

    Użytkownik "Piotr Chamera" <p...@p...onet.pl> napisał:

    > Chyba jest też możliwość pracy z winapi, ale nie używałem.

    Skrotowo.
    Mimo ze glowny focus w PyWinie to COM to jest tez pelne Win API.

    PS: Nie potrzeba nawet PyWina.
    Standardowe ctypes moze w zupelnosci wystarczyc.
    Ponizej zmodyfikowany pod ctypes przykladzik
    (uruchomi sie na standardowym Pythonie):

    --------------------------------------------

    #import win32con
    class win32con:
    NULL = 0
    CS_VREDRAW = 1
    CS_HREDRAW = 2
    IDI_APPLICATION = 32512
    IDC_ARROW = 32512
    WHITE_BRUSH = 0
    WS_OVERLAPPED = 0
    WS_CAPTION = 12582912
    WS_SYSMENU = 524288
    WS_THICKFRAME = 262144
    WS_MINIMIZEBOX = 131072
    WS_MAXIMIZEBOX = 65536
    WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | \
    WS_CAPTION | \
    WS_SYSMENU | \
    WS_THICKFRAME | \
    WS_MINIMIZEBOX | \
    WS_MAXIMIZEBOX)
    CW_USEDEFAULT = -2147483648
    SW_SHOWNORMAL = 1
    WM_PAINT = 15
    WM_CLOSE = 16
    WM_DESTROY = 2
    DT_SINGLELINE = 32
    DT_CENTER = 1
    DT_VCENTER = 4

    import sys
    import ctypes as ct
    from ctypes import windll as win

    WNDPROC = ct.WINFUNCTYPE(ct.c_long, ct.c_int, ct.c_uint, ct.c_int, ct.c_int)

    class WNDCLASS(ct.Structure):
    _fields_ = [('style', ct.c_uint),
    ('lpfnWndProc', WNDPROC),
    ('cbClsExtra', ct.c_int),
    ('cbWndExtra', ct.c_int),
    ('hInstance', ct.c_int),
    ('hIcon', ct.c_int),
    ('hCursor', ct.c_int),
    ('hbrBackground', ct.c_int),
    ('lpszMenuName', ct.c_char_p),
    ('lpszClassName', ct.c_char_p)]

    class RECT(ct.Structure):
    _fields_ = [('left', ct.c_long),
    ('top', ct.c_long),
    ('right', ct.c_long),
    ('bottom', ct.c_long)]

    class PAINTSTRUCT(ct.Structure):
    _fields_ = [('hdc', ct.c_int),
    ('fErase', ct.c_int),
    ('rcPaint', RECT),
    ('fRestore', ct.c_int),
    ('fIncUpdate', ct.c_int),
    ('rgbReserved', ct.c_char * 32)]

    class POINT(ct.Structure):
    _fields_ = [('x', ct.c_long),
    ('y', ct.c_long)]

    class MSG(ct.Structure):
    _fields_ = [('hwnd', ct.c_int),
    ('message', ct.c_uint),
    ('wParam', ct.c_int),
    ('lParam', ct.c_int),
    ('time', ct.c_int),
    ('pt', POINT)]

    def ErrorIfZero(handle):
    if handle == 0:
    raise WinError()
    else:
    return handle

    def MainWin():
    CreateWindowEx = win.user32.CreateWindowExA
    CreateWindowEx.argtypes = [ct.c_int, ct.c_char_p, ct.c_char_p, ct.c_int,
    ct.c_int, ct.c_int,
    ct.c_int, ct.c_int, ct.c_int, ct.c_int, ct.c_int,
    ct.c_int]
    CreateWindowEx.restype = ErrorIfZero

    # Define Window Class
    wndClass = WNDCLASS()
    wndClass.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
    wndClass.lpfnWndProc = WNDPROC(WndProc)
    wndClass.cbClsExtra = wndClass.cbWndExtra = 0
    wndClass.hInstance = win.kernel32.GetModuleHandleA(ct.c_int(win32con.NULL
    ))
    wndClass.hIcon = win.user32.LoadIconA(ct.c_int(win32con.NULL),
    ct.c_int(win32con.IDI_APPLICATION))
    wndClass.hCursor = win.user32.LoadCursorA(ct.c_int(win32con.NULL),
    ct.c_int(win32con.IDC_ARROW))
    wndClass.hbrBackground = win.gdi32.GetStockObject(ct.c_int(win32con.WHITE_BRU
    SH))
    wndClass.lpszMenuName = None
    wndClass.lpszClassName = "MainWin"
    # Register Window Class
    if not win.user32.RegisterClassA(ct.byref(wndClass)):
    raise WinError()
    # Create Window
    hwnd = CreateWindowEx(0,
    wndClass.lpszClassName,
    "Python Window",
    win32con.WS_OVERLAPPEDWINDOW,
    win32con.CW_USEDEFAULT,
    win32con.CW_USEDEFAULT,
    win32con.CW_USEDEFAULT,
    win32con.CW_USEDEFAULT,
    win32con.NULL,
    win32con.NULL,
    wndClass.hInstance,
    win32con.NULL)
    # Show Window
    win.user32.ShowWindow(ct.c_int(hwnd), ct.c_int(win32con.SW_SHOWNORMAL))
    win.user32.UpdateWindow(ct.c_int(hwnd))
    # Pump Messages
    msg = MSG()
    pMsg = ct.pointer(msg)
    NULL = ct.c_int(win32con.NULL)

    while win.user32.GetMessageA(pMsg, NULL, 0, 0) != 0:
    win.user32.TranslateMessage(pMsg)
    win.user32.DispatchMessageA(pMsg)

    return msg.wParam

    def WndProc(hwnd, message, wParam, lParam):
    ps = PAINTSTRUCT()
    rect = RECT()

    if message == win32con.WM_PAINT:
    hdc = win.user32.BeginPaint(ct.c_int(hwnd), ct.byref(ps))
    win.user32.GetClientRect(ct.c_int(hwnd), ct.byref(rect))
    win.user32.DrawTextA(ct.c_int(hdc),
    "Python Powered Windows" ,
    ct.c_int(-1), ct.byref(rect),
    win32con.DT_SINGLELINE|win32con.DT_CENTER|win32con.D
    T_VCENTER)
    win.user32.EndPaint(ct.c_int(hwnd), ct.byref(ps))
    return 0
    elif message == win32con.WM_DESTROY:
    win.user32.PostQuitMessage(0)
    return 0

    return win.user32.DefWindowProcA(ct.c_int(hwnd), ct.c_int(message),
    ct.c_int(wParam),
    ct.c_int(lParam))

    if __name__=='__main__':
    sys.exit(MainWin())


    PS: w ctypes.windll jest dostep dllek:
    kernel32
    user32
    shell32
    gdi32
    w ctypes.wintypes do wielu stalych i nieco struktur
    (ale pywin jest tu zdecydowanie pelniejszy. hint : modul win32api)

    ------------------------------

    Przy okazji przykladzik Wordowania poprzez PyWin COM:

    import sys
    from win32com.client import constants
    import win32com.client

    word = win32com.client.Dispatch('Word.Application')

    word.Visible = True

    doc = word.Documents.Add()
    doc.Activate()

    range = doc.Range(Start=0, End=0)
    range.Text = 'Czesc Kolego ! Tu jestem :)'

    ---------------------------

    a tu Excelowania:

    import sys
    from win32com.client import constants
    import win32com.client

    excel = win32com.client.Dispatch("Excel.Application")

    excel.Visible = True

    if len(excel.Workbooks) == 0:
    excel.Workbooks.Add()

    excel.Cells(1,1).Value = "Hello"

    ---------------------------------------------------

    Tu jakies zabawy z IE przez COM:

    import time
    import win32com.client

    READYSTATE_COMPLETE = 4

    ie = win32com.client.Dispatch('InternetExplorer.Applicati
    on')

    def result(ie):
    while True:
    state = ie.ReadyState
    if state == READYSTATE_COMPLETE:
    break
    time.sleep(0.1)
    return ie.Document.documentElement.innerHTML

    def getURL(ie, url):
    ie.Navigate(url)
    return result(ie)

    def refreshURL(ie):
    ie.Refresh()
    return result(ie)


    if __name__ == '__main__':
    print getURL(ie, 'http://python.pl')

    ----------------------------------------

    A tu jakies zabawy z Pythonem na cudzym
    komputerze poprzez DCOM ale tez z wykorzystaniem
    WinAPI:

    import pythoncom, win32com.client
    import win32api

    clsctx=pythoncom.CLSCTX_LOCAL_SERVER
    i = win32com.client.DispatchEx("Python.Interpreter", "PLK-PLEWALSK-XP",
    clsctx=clsctx)
    i.Exec("import win32api")
    print i.Eval("win32api.GetComputerName()")
    print win32api.GetComputerName()

    PS: No ale oczywiscie "Python nie ma dostepu do WinAPI ani do niczego... " ;)

    AK

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: