Найти - Пользователи
Полная версия: создание Windows Service и его работа
Начало » Python для новичков » создание Windows Service и его работа
1 2 3 4 5
Doktopat
тэги поставил, но они не помогают
Очень жду код…
насколько я понимаю pywinauto это библиотека питона , а не какая нибудь внешняя утилита или прога

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

да, pywinauto библиотека, упрощает работу с api windows
Doktopat
Сидел с прогером пару часов сейчас и он мне показывал ,что действительно хэндл когда совпадает ,то он входит внутрь. Это у нас работало. А по какой то причине ,сейчас не хочет. Не ясно почему….
sanodin
проверь
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 #Печатаем путь к выделенному файлу
Doktopat
я взял лишь часть твоего кода, посмотри:
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
sanodin
отдельно от хука код работает, а с хуком не хочет
Doktopat
В общем хук во всем виноват
Может сможешь придумать как его обойти?
Может можно как то иначе инициировать запуск программы….
sanodin
в PyQt4 есть обработка нажатий клавиш, сигналы, возвращайся в трей-программу и пили там
http://python.su/forum/topic/13195/
или http://timgolden.me.uk/python/win32_how_do_i/catch_system_wide_hotkeys.html
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.html
can work without PyQt4…..
Have I just take the necessary parts of the code and use it in my code?

sanodin
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( )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB