-
Data: 2013-03-17 00:52:03
Temat: Re: PowerShell - ktos uzywa?
Od: "AK" <n...@n...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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
Następne wpisy z tego wątku
- 17.03.13 00:56 AK
- 17.03.13 01:12 AK
- 17.03.13 11:14 PawelS
- 17.03.13 12:14 Adam Przybyla
- 17.03.13 12:27 R.e.m.e.K
- 17.03.13 19:36 Roman W
- 17.03.13 20:51 Edek Pienkowski
- 17.03.13 21:46 PawelS
- 18.03.13 08:07 Adam Przybyla
- 18.03.13 10:36 R.e.m.e.K
- 18.03.13 11:09 Adam Przybyla
- 18.03.13 12:37 Edek Pienkowski
- 18.03.13 12:52 Adam Przybyla
- 18.03.13 13:12 grapeli23
- 20.03.13 22:31 Edek Pienkowski
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-19 Lista afer
- 2025-02-19 Lista afer
- 2025-02-19 Lista afer PIS
- 2025-02-19 Ogrodzenie dla krów szkockich "Highland"
- 2025-02-19 Gdańsk => System Architect (background deweloperski w Java) <=
- 2025-02-19 Gdańsk => Solution Architect (Java background) <=
- 2025-02-19 Białystok => Data Engineer (Tech Leader) <=
- 2025-02-19 Kraków => Ekspert IT (obszar systemów sieciowych) <=
- 2025-02-19 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-02-19 Rzeszów => International Freight Forwarder <=
- 2025-02-19 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-02-19 Chrzanów => Spedytor Międzynarodowy (handel ładunkami/prowadzenie f
- 2025-02-19 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-19 Nigdy
- 2025-02-19 Katowice => Key Account Manager (ERP) <=