Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2014 20:18:21

Doktopat
Зарегистрирован: 2013-06-15
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

тэги поставил, но они не помогают
Очень жду код…
насколько я понимаю pywinauto это библиотека питона , а не какая нибудь внешняя утилита или прога

с тэгами разобрались!

Отредактировано Doktopat (Янв. 18, 2014 20:19:51)

Офлайн

#2 Янв. 18, 2014 20:24:29

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

создание Windows Service и его работа


да, pywinauto библиотека, упрощает работу с api windows

Отредактировано sanodin (Янв. 18, 2014 20:27:44)

Офлайн

#3 Янв. 18, 2014 20:27:03

Doktopat
Зарегистрирован: 2013-06-15
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

Сидел с прогером пару часов сейчас и он мне показывал ,что действительно хэндл когда совпадает ,то он входит внутрь. Это у нас работало. А по какой то причине ,сейчас не хочет. Не ясно почему….

Офлайн

#4 Янв. 18, 2014 20:48:19

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

проверь

from win32com . client import Dispatch 
from win32gui import GetClassName
import win32gui
ShellWindowsCLSID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'
ShellWindows = Dispatch ( ShellWindowsCLSID )
top = win32gui.GetForegroundWindow() #Получаем хэндл окна которое сейчас онТОП
print top
for shellwindow in ShellWindows :
    print shellwindow.HWND
    print GetClassName ( shellwindow . HWND )
    if GetClassName ( shellwindow . HWND ) == 'CabinetWClass' :
         
        print shellwindow . LocationName
        print shellwindow . LocationURL
        print 50 * '-'
        for j in range(shellwindow.Document.SelectedItems().Count): #Бежим по количеству выбранных файлов в главном окне
            print shellwindow.Document.SelectedItems().Item(j).Path #Печатаем путь к выделенному файлу

Офлайн

#5 Янв. 18, 2014 21:59:10

Doktopat
Зарегистрирован: 2013-06-15
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

я взял лишь часть твоего кода, посмотри:

from win32com.client import Dispatch
import win32gui
from win32gui import GetClassName
import pyHook
import pythoncom
import sys
import win32com.client
ShellWindowsCLSID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'
ShellWindows = Dispatch(ShellWindowsCLSID)
def OnKeyboardEvent(event):
    if event.Ascii == 25:
        top = win32gui.GetForegroundWindow()
        print top
        for shellwindow in ShellWindows:
            print shellwindow.HWND
            print GetClassName(shellwindow.HWND)
        #for i in range(int(ShellWindows.Count)):
        #    if int(ShellWindows[i].HWND) == top:
        #        for j in range(ShellWindows[i].Document.SelectedItems().Count):
        #            print ShellWindows[i].Document.SelectedItems().Item(j).Path
    elif event.Ascii == 17:
        sys.exit()
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
while True:
    pythoncom.PumpMessages()

при запуске выдает стандартную ошибку ,которую и у нас давало:

591146 - это как раз топ ,он хорошо отрабатывает
Traceback (most recent call last):
File “C:\Python27\lib\site-packages\pyHook\HookManager.py”, line 351, in KeyboardSwitch
return func(event)
File “CUsers/Doktopat/PycharmProjects/ServiceProject/cut_paste.py”, line 16, in OnKeyboardEvent
for shellwindow in ShellWindows:
TypeError: an integer is required

Process finished with exit code -1

Офлайн

#6 Янв. 18, 2014 22:12:40

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

отдельно от хука код работает, а с хуком не хочет

Офлайн

#7 Янв. 18, 2014 22:27:51

Doktopat
Зарегистрирован: 2013-06-15
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

В общем хук во всем виноват
Может сможешь придумать как его обойти?
Может можно как то иначе инициировать запуск программы….

Офлайн

#8 Янв. 18, 2014 22:31:44

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

в PyQt4 есть обработка нажатий клавиш, сигналы, возвращайся в трей-программу и пили там
http://python.su/forum/topic/13195/
или http://timgolden.me.uk/python/win32_how_do_i/catch_system_wide_hotkeys.html

Отредактировано sanodin (Янв. 18, 2014 22:48:41)

Офлайн

#9 Янв. 19, 2014 15:32:42

Doktopat
Зарегистрирован: 2013-06-15
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

Fix me if I am wrong ,but the code from this link:
http://timgolden.me.uk/python/win32_how_do_i/catch_system_wide_hotkeys.html
can work without PyQt4…..
Have I just take the necessary parts of the code and use it in my code?

Офлайн

#10 Янв. 19, 2014 17:51:36

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

создание Windows Service и его работа

Doktopat
Fix me if I am wrong ,but the code from this link:http://timgolden.me.uk/python/win32_how_do_i/catch_system_wide_hotkeys.htmlcan work without PyQt4…..Have I just take the necessary parts of the code and use it in my code?
вторая ссылка была есесно на win32api
там был выбор, либо то либо другое

кстати код для определения флешки
import sys
import win32com.client
try:
	strComputer = sys.argv[1]
except IndexError:
	strComputer = "."
objWMIService = win32com.client.Dispatch( "WbemScripting.SWbemLocator" )
objSWbemServices = objWMIService.ConnectServer( strComputer, "root/CIMV2" )
colItems = objSWbemServices.ExecQuery( "SELECT * FROM Win32_LogicalDisk" )
if colItems.Count == 1:
	print( "1 instance:" )
else:
	print( str( colItems.Count ) + " instances:" )
print( )
for objItem in colItems:
        if objItem.Description == 'Removable Disk':
            if objItem.BlockSize != None:
                    print( "BlockSize                    : " + str( objItem.BlockSize ) )
            if objItem.Caption != None:
                    print( "Caption                      : " + str( objItem.Caption ) )
            if objItem.Description != None:
                    print( "Description                  : " + str( objItem.Description ) )
            if objItem.DeviceID != None:
                    print( "DeviceID                     : " + str( objItem.DeviceID ) )
            if objItem.DriveType != None:
                    print( "DriveType                    : " + str( objItem.DriveType ) )
            if objItem.FileSystem != None:
                    print( "FileSystem                   : " + str( objItem.FileSystem ) )
            if objItem.Name != None:
                    print( "Name                         : " + str( objItem.Name ) )
            strList = " "
            try:
                    for objElem in objItem.PowerManagementCapabilities :
                            strList = strList + str( objElem ) + ","
            except:
                    strList = strList + 'null'
            
            if objItem.Size != None:
                    print( "Size                         : " + str( objItem.Size ) )
            if objItem.VolumeSerialNumber != None:
                    print( "VolumeSerialNumber           : " + str( objItem.VolumeSerialNumber ) )
            print( )

Отредактировано sanodin (Янв. 19, 2014 17:52:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version