analitics

Pages

Showing posts with label win32com. Show all posts
Showing posts with label win32com. Show all posts

Tuesday, May 12, 2020

Python 3.8.3 : Create shortcuts and add python to the context menu.

The tutorial for today is a simple script for python user.
If you run this python script in your folder you will get an python shortcut to the python and the python to the Context Menu in Windows 10.
The Context Menu can be used with right click from your mouse, see the screenshot.

This script can also be used with any executable if you make some changes.
import os
import pythoncom
from win32com.shell import shell

dirpath = os.getcwd()
if not os.path.exists(dirpath):
    os.makedirs(dirpath)

win_user = os.getenv('username')
shortcut_path = dirpath + r"\python.lnk"

shortcut_path = str(r"C:\\Users\\")+win_user+str("\\AppData\\Roaming\\Microsoft\\Windows\\SendTo\\python.lnk")

target_path = r"D:\\Python38_64\\python.exe"

shortcut_instance = pythoncom.CoCreateInstance(
    shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
persist_file = shortcut_instance.QueryInterface(pythoncom.IID_IPersistFile)
shortcut_instance.SetPath(target_path)
persist_file.Save (shortcut_path, 0)

Thursday, May 30, 2019

Python 3.7.3 : Using the win32com - part 007.

Today I show you a new script I tested a few days ago with win32com and Win32_LogonSession class, see thedocumentation.
The Win32_LogonSession WMI class describes the logon session or sessions associated with a user logged on to a computer system running Windows.
Let's see the script:
import win32com.client
from win32com.client import gencache
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_Session")
for objItem in colItems:
    print("Caption" , objItem.Caption)
    print("Description" , objItem.Description)
    print("InstallDate" , objItem.InstallDate)
    print("Name" , objItem.Name)
    print("Status" , objItem.Status)
    print("StartTime" , objItem.StartTime)
    print("AuthenticationPackage" , objItem.AuthenticationPackage)
    print("LogonId" , objItem.LogonId)
    print("LogonType" , objItem.LogonType)
The result of this python script:
Caption None
Description None
InstallDate None
Name None
Status None
StartTime 20190530105325.022532+180
AuthenticationPackage LiveSSP
LogonId 8291403
LogonType 2
Caption None
Description None
InstallDate None
Name None
Status None
StartTime 20190530105325.022532+180
AuthenticationPackage LiveSSP
LogonId 8291220
LogonType 2
You can read info with this python module.
For example, the output tells me aboutLogonType.
You’ll see type 2 logons when a user attempts to log on at the local keyboard and screen whether with a domain account or a local account from the computer.

Monday, May 27, 2019

Python 3.7.3 : Using the win32com - part 006.

Today I will show you how to see the system environment setting:
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_Environment")
for objItem in colItems:
    print("Caption:", objItem.Caption)
    print("Description:", objItem.Description)
    print("Install Date:", objItem.InstallDate)
    print("Name:", objItem.Name)
    print("Status:", objItem.Status)
    print("System Variable:", objItem.SystemVariable)
    print("User Name:", objItem.UserName)
    print("Variable Value:", objItem.VariableValue)
The result is :
...
Install Date: None
Name: PATH
Status: OK
System Variable: False...

Sunday, May 26, 2019

Python 3.7.3 : Using the win32com - part 005.

Another example with win32com python module:
This script show info about the audio or video codec, see this link:
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_CodecFile")
for objItem in colItems:
    print("Access Mask: " , objItem.AccessMask)
    print("Archive: " , objItem.Archive)
    print("Caption: " , objItem.Caption)
    print("Drive: " , objItem.Drive)
    print("Extension: " , objItem.Extension)
    print("File Name: " , objItem.FileName)
    print("File Size: " , objItem.FileSize)
    print("File Type: " , objItem.FileType)
    print("File System Name: " , objItem.FSName)
    print("Group: " , objItem.Group)
    print("Hidden: " , objItem.Hidden)
    print("Manufacturer: " , objItem.Manufacturer)
    print("Name: " , objItem.Name)
    print("Path: " , objItem.Path)
    print("Version: " , objItem.Version)
The output is this:
File Type:  Application Extension
File System Name:  NTFS
Group:  Video
Hidden:  False
Manufacturer:  Microsoft Corporation
Name:  C:\Windows\system32\MSVIDC32.DLL
Path:  \windows\system32\
Version:  6.3.9600.17415
Access Mask:  1179817
Archive:  True
Caption:  c:\windows\system32\l3codeca.acm
Drive:  c:
Extension:  acm
File Name:  l3codeca
File Size:  82432
File Type:  acm File
File System Name:  NTFS
Group:  Audio
Hidden:  False
Manufacturer:  Fraunhofer Institut Integrierte Schaltungen IIS
Name:  C:\Windows\system32\L3CODECA.ACM
Path:  \windows\system32\
Version:  1.9.0.401

Saturday, May 25, 2019

Python 3.7.3 : Using the win32com - part 004.

This is a source code I created a few days ago.
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_ProgIDSpecification")
for objItem in colItems:
    print ("Caption: ", objItem.Caption)
    print ("Check ID: ", objItem.CheckID)
    print ("Check Mode: ", objItem.CheckMode)
    print ("Description: ", objItem.Description)
    print ("Name: ", objItem.Name)
    print ("Parent: ", objItem.Parent)
    print ("ProgID: ", objItem.ProgID)
    print ("Software Element ID: ", objItem.SoftwareElementID)
    print ("Software Element State: ", objItem.SoftwareElementState)
    print ("Target Operating System: ", objItem.TargetOperatingSystem)
    print ("Version: ", objItem.Version)
This script uses the win32com python module to show us info about Win32_ProgIDSpecification.
The result is strange and shows like this:
...
Version:  None
Caption:  Addin Class
...
See the full documentation at this link.

Friday, May 24, 2019

Python 3.7.3 : Using the win32com - part 003.

This is another python script with win32com python module and python version 3.7.3 .
The script shows us info about the drive:
import win32com
from win32com import client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
out_items = objSWbemServices.ExecQuery("SELECT * FROM Win32_DiskDrive")
for object_item in out_items:
    if object_item.Availability != None:
        print("Availability:" +  str(object_item.Availability))
    if object_item.BytesPerSector != None:
        print("BytesPerSector:" +  str(object_item.BytesPerSector))
    print("Capabilities:")
    strList = " "
    try :
        for obj_element in object_item.Capabilities :
            strList = strList + 'obj_element' + "," + obj_element
    except:
        strList = strList + 'null'
    print(strList)
    print("CapabilityDescriptions:")
    strList = " "
    try :
        for obj_element in object_item.CapabilityDescriptions :
            strList = strList + 'obj_element' + "," + obj_element
    except:
        strList = strList + 'null'
    print(strList)
    if object_item.Caption != None:
        print("Caption:" +  str(object_item.Caption))
    if object_item.CompressionMethod != None:
        print("CompressionMethod:" + str(object_item.CompressionMethod))
    if object_item.ConfigManagerErrorCode != None:
        print("ConfigManagerErrorCode:" + str(object_item.ConfigManagerErrorCode))
    if object_item.ConfigManagerUserConfig != None:
        print("ConfigManagerUserConfig:" + str(object_item.ConfigManagerUserConfig))
    if object_item.CreationClassName != None:
        print("CreationClassName:" + str(object_item.CreationClassName))
    if object_item.DefaultBlockSize != None:
        print("DefaultBlockSize:" + str(object_item.DefaultBlockSize))
    if object_item.Description != None:
        print("Description:" + str(object_item.Description))
    if object_item.DeviceID != None:
        print("DeviceID:" + str(object_item.DeviceID))
    if object_item.ErrorCleared != None:
        print("ErrorCleared:" + str(object_item.ErrorCleared))
    if object_item.ErrorDescription != None:
        print("ErrorDescription:" + str(object_item.ErrorDescription))
    if object_item.ErrorMethodology != None:
        print("ErrorMethodology:" + str(object_item.ErrorMethodology))
    if object_item.Index != None:
        print("Index:" + str(object_item.Index))
    #object_item.InstallDate - this is not show
    if object_item.InterfaceType != None:
        print("InterfaceType:" + str(object_item.InterfaceType))
    if object_item.LastErrorCode != None:
        print("LastErrorCode:" + str(object_item.LastErrorCode))
    if object_item.Manufacturer != None:
        print("Manufacturer:" + str(object_item.Manufacturer))
    if object_item.MaxBlockSize != None:
        print("MaxBlockSize:" + str(object_item.MaxBlockSize))
    if object_item.MaxMediaSize != None:
        print("MaxMediaSize:" + str(object_item.MaxMediaSize))
    if object_item.MediaLoaded != None:
        print("MediaLoaded:" + str(object_item.MediaLoaded))
    if object_item.MediaType != None:
        print("MediaType:" + str(object_item.MediaType))
    if object_item.MinBlockSize != None:
        print("MinBlockSize:" + str(object_item.MinBlockSize))
    if object_item.Model != None:
        print("Model:" + str(object_item.Model))
    if object_item.Name != None:
        print("Name:" + str(object_item.Name))
    if object_item.NeedsCleaning != None:
        print("NeedsCleaning:" + str(object_item.NeedsCleaning))
    if object_item.NumberOfMediaSupported != None:
        print("NumberOfMediaSupported:" + str(object_item.NumberOfMediaSupported))
    if object_item.Partitions != None:
        print("Partitions:" + str(object_item.Partitions))
    if object_item.PNPDeviceID != None:
        print("PNPDeviceID:" + str(object_item.PNPDeviceID))
    print("PowerManagementCapabilities:")
    strList = " "
    try :
        for obj_element in object_item.PowerManagementCapabilities :
            strList = strList + 'obj_element' + "," + obj_element
    except:
        strList = strList + 'null'
    print(strList)
    if object_item.PowerManagementSupported != None:
        print("PowerManagementSupported:" + str(object_item.PowerManagementSupported))
    if object_item.SCSIBus != None:
        print("SCSIBus:" + str(object_item.SCSIBus))
    if object_item.SCSILogicalUnit != None:
        print("SCSILogicalUnit:" + str(object_item.SCSILogicalUnit))
    if object_item.SCSIPort != None:
        print("SCSIPort:" + str(object_item.SCSIPort))
    if object_item.SCSITargetId != None:
        print("SCSITargetId:" + str(object_item.SCSITargetId))
    if object_item.SectorsPerTrack != None:
        print("SectorsPerTrack:" + str(object_item.SectorsPerTrack))
    if object_item.Signature != None:
        print("Signature:" + str(object_item.Signature))
    if object_item.Size != None:
        print("Size:" + str(object_item.Size))
    if object_item.Status != None:
        print("Status:" + str(object_item.Status))
    if object_item.StatusInfo != None:
        print("StatusInfo:" + str(object_item.StatusInfo))
    if object_item.SystemCreationClassName != None:
        print("SystemCreationClassName:" + str(object_item.SystemCreationClassName))
    if object_item.SystemName != None:
        print("SystemName:" + str(object_item.SystemName))
    if object_item.TotalCylinders != None:
        print("TotalCylinders:" + str(object_item.TotalCylinders))
    if object_item.TotalHeads != None:
        print("TotalHeads:" + str(object_item.TotalHeads))
    if object_item.TotalSectors != None:
        print("TotalSectors:" + str(object_item.TotalSectors))
    if object_item.TotalTracks != None:
        print("TotalTracks:" + str(object_item.TotalTracks))
    if object_item.TracksPerCylinder != None:
        print("TracksPerCylinder:" + str(object_item.TracksPerCylinder))
The result looks something like this:
MediaLoaded:True
...
MediaType:Fixed hard disk media
Model:TOSHIBA MQ01ABF050
Name:\\.\PHYSICALDRIVE0
Partitions:2
PNPDeviceID:SCSI\DISK&VEN_TOSHIBA&PROD_MQ01ABF050\4&AD866E5&0&000000
PowerManagementCapabilities:
 null
SCSIBus:0
SCSILogicalUnit:0
SCSIPort:0
SCSITargetId:0
SectorsPerTrack:63
Signature:-1846003871
Size:500105249280
Status:OK
SystemCreationClassName:Win32_ComputerSystem
SystemName:CATAFEST
TotalCylinders:60801
TotalHeads:255
TotalSectors:976768065
TotalTracks:15504255
TracksPerCylinder:255

Thursday, May 23, 2019

Python 3.7.3 : Using the win32com - part 002.

Today I tested the win32com python module with python 3.7.3.
I'll show you two scripts I tested with this python module.
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_ClassicCOMClass")
for objItem in colItems:
    print("Component ID: " , objItem.ComponentId)
    print("Description: " , objItem.Description)
    print("Name: " , objItem.Name)
The result is something like this:
Name:  Shell Execute Hardware Event Handler
Component ID:  {FFC9F9AE-E87A-3252-8E25-B22423A40 }
Description:  System.ThreadStaticAttribute
Name:  System.ThreadStaticAttribute
Component ID:  {FFCDB781-D71C-4D10-BD5F-0492EAFFD }
Description:  PSFactoryBuffer
Name:  PSFactoryBuffer
Component ID:  {ffd90217-f7c2-4434-9ee1-6f1b530db }
Description:  XML Feed Moniker
Name:  XML Feed Moniker
Component ID:  {ffe1df5f-9f06-46d3-af27-f1fc10d63 }
Description:  HomeGroup CPL Advanced Settings Writer
Name:  HomeGroup CPL Advanced Settings Writer
Component ID:  {FFE2A43C-56B9-4bf5-9A79-CC6D42856 }
Description:  Windows Photo Viewer Image Verbs
Name:  Windows Photo Viewer Image Verbs
The following example contains this source code:
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_ComponentCategory")
for objItem in colItems:
    print("Category ID: " , objItem.CategoryId)
    print("Name: " , objItem.Name)
The result is something like this:
Name:  3D DirectTransform
Category ID:  {F0B7A1A1-9847-11CF-8F20-00805F2CD }
Name:  Active Scripting Engine
Category ID:  {F0B7A1A2-9847-11CF-8F20-00805F2CD }
Name:  Active Scripting Engine with Parsing
Category ID:  {F0B7A1A3-9847-11CF-8F20-00805F2CD }
Name:  Active Scripting Engine with Encoding

Wednesday, May 22, 2019

Python 3.7.3 : Using the win32com - part 001.

The tutorial is about win32com python module using the python 3.7.3.
First exameple is simple:
import sys
import win32com.client
from win32com.client import constants

speaker = win32com.client.Dispatch("SAPI.SpVoice")
print ("Type word or phrase, then enter.")
while 1:
      text_to_say = input("> ")
      speaker.Speak(text_to_say)
Let's run it.
The Microsoft Speech SDK to speak what you type in from the keyboard.
C:\Python373>python.exe speak_001.py
Type word or phrase, then enter.
> this is a test
The next example is more complex and uses speech recognition to create outputs.
You can change this example to execute tasks.
# This is a sample code for speech recognition using the MS Speech API

from win32com.client import constants
import win32com.client
import pythoncom
 
""" 
You will see a voice say: Started successfully
The you need to start the speech recognition tool.
After running this, then saying "One", "Two", "Three" or "Four" should
display "You said One" etc on the console.
"""
 
class SpeechRecognition:
    """ Initialize the speech recognition with the passed in list of words """
    def __init__(self, wordsToAdd):

        # For text-to-speech
        self.speaker = win32com.client.Dispatch("SAPI.SpVoice")

        # For speech recognition - first create a listener
        self.listener = win32com.client.Dispatch("SAPI.SpSharedRecognizer")

        # Then a recognition context
        self.context = self.listener.CreateRecoContext()

        # which has an associated grammar
        self.grammar = self.context.CreateGrammar()

        # Do not allow free word recognition - only command and control
        # recognizing the words in the grammar only
        self.grammar.DictationSetState(0)

        # Create a new rule for the grammar, that is top level (so it begins
        # a recognition) and dynamic (ie we can change it at runtime)
        self.wordsRule = self.grammar.Rules.Add("wordsRule",
                        constants.SRATopLevel + constants.SRADynamic, 0)

        # Clear the rule (not necessary first time, but if we're changing it
        # dynamically then it's useful)
        self.wordsRule.Clear()

        # And go through the list of words, adding each to the rule
        [ self.wordsRule.InitialState.AddWordTransition(None, word) for word in wordsToAdd ]

        # Set the wordsRule to be active
        self.grammar.Rules.Commit()
        self.grammar.CmdSetRuleState("wordsRule", 1)

        # Commit the changes to the grammar
        self.grammar.Rules.Commit()

        # And add an event handler that's called back when recognition occurs
        self.eventHandler = ContextEvents(self.context)

        # Announce we've started
        self.say("Started successfully")
    """Speak a word or phrase"""
    def say(self, phrase):
        self.speaker.Speak(phrase)
 
"""
The callback class that handles the events raised by the speech object.
"""

class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")):

    """Called when a word/phrase is successfully recognized and is
        found in a currently open grammar """

    def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result):
        newResult = win32com.client.Dispatch(Result)
        print ("You said: ",newResult.PhraseInfo.GetText())
    
if __name__=='__main__':
    wordsToAdd = [ "One", "Two", "Three", "Four" ]
    speechReco = SpeechRecognition(wordsToAdd)
    while 1:
        pythoncom.PumpWaitingMessages()
The result can be see on my youtube channel:

Thursday, April 21, 2011

Python and Merlin , using win32com module.

I remembered my days when I played with visual script.
Later I discovered python on linux and I realized that it's as good if not better.
Then I made ​​a script that display the character Merlin said something.
Today I'll try the same thing with python.
First you have to install python module called win32com.
For this we use installer from here.
It automatically installs python 2.6 folder, see picture below...
To begin to build script.
For this we need to read the MSDN documentation least, see here.
The first step required is to import module module ...
import win32com
from win32com import client
from win32com.client import constants
Access file .acs and declare a variable named vrajitor to use it.
agent = win32com.client.Dispatch("Agent.Control.2")
agent.Connected = -1
agent.Characters.Load("Merlin", "Merlin.acs")
vrajitor= agent.Characters("Merlin")
Now we can use its methods for animation and not only ...
vrajitor .LanguageID = 0x409
vrajitor .Show()
vrajitor .Play("Announce")
vrajitor .Speak("I like to use Python programming language!")
vrajitor .Speak("... and I'm really good. See!?")
vrajitor .Play("Congratulate")
print "Type some commands! (max 99 comands)"
print "Congratulate, Acknowledge, Blink, Confused, Decline, Explain"
for i in range(100):
 cmd=raw_input()
 print cmd
 vrajitor .Play(cmd)
Here's the result ...

merlin python from Catalin Festila on Vimeo.