You are here


admin의 아바타
첨부 파일파일 크기
Binary Data tomasoft-winutils.tar.gz52.97 KB


Just a random collection of stuff for Win32 Tcl


    Creates a system-wide hot key with an event handler.  This is an Itcl class.

    Usage: winutils::hotkey <#auto|name> <keyString> <script>
           winutils::hotkey delete <token>

    Returns: The Itcl oject name or an error describing what went wrong.

        Describes the key sequence with the following modifiers:

        Use a '+' to separate them with the virtual key name as the last.
        Such as:

        The virtual key names are in flux as I write this, but this is the
        big list as I have it now.  It may not seem to make sense, and I would
        have to agree, but I don't know what else to say, except VK_ macro
        these associate to are in the source, and a tool to display (or create)
        the proper keyString would be a welcome addition some day.


        The reference is maintained, thus re-use of bytecode is supported.
        The script is run as a proc and from the ::winutils namespace.
        When the hot key is fired, the script is posted through Tcl's event
        loop.  tclsh users should be aware that the event loop needs manual
        'churning' for this to work.


        % set hk [winutils::hotkey #auto Ctrl+Shift+Alt+A {global a; puts "hello there:[incr a]"}]
        % set a 5
        hello there:6       <-- pressing the combo from another app in foreground
        hello there:7
        hello there:8
        hello there:9
        hello there:10
        hello there:11
        hello there:12
        % $hk destroy

   winutils::shell is a direct connection to the ShellExecuteEx() Win32 API
   function. Like [exec], it starts programs, but the exec command is blocking
   and waits for the started app to exit before Tcl regains control. To me,
   this is not what windows is all about.  The shell command returns
   immediatly and Tcl is free to process.  winutils::shell can also start
   documents using the proper application as found in the registry, as well as,
   launch URLs.  The behavior is idendical to the "Run..." dialog off the start

   Usage: winutils::shell [-verb <verb>] [-directory <DefDirectory>]
                          [-show <ShowStyle>] [-wait] <file>
                          [<params> ...]

   NOTES: Options may be in any order, but the <file> must be the last
          argument.  Use the "/" instead of the "\" as a directory
          seperator in the <file> and <DefDirectory>.

   Returns: nothing, the exitcode when waiting, or an error describing what
            happened wrong.  $errorCode is not set as the POSIX codes are not
            descriptive enough for the types of errors that happen and have
            no POSIX mirrors.

    [-verb <verb>]
      Valid verbs are:

       open     Opens the file specified by <file>.  The file can be an
                 executable file or a document file.  The file can be a
                 Windows 95 folder to open. "open" *might be* the default, if  
                 <verb> is missing.  Depends on which OS.
       print    Prints the file specified by <file>.  The file should  
                 be a document file.  If the file is an executable
                 file, the function opens the file, as if "
open" had
                 been specified.
       explore  The function explores the folder specified by <file>.
       *any*    Any action name located in the associate section of the
                 registry for the filetype specified by <file>.
    [-show <ShowStyle>]
       Valid showstyles are:

       hide     Hides the window. Be careful with this; it truely hides it.
       maximum  Maximizes the window.
       minimum  Minimizes the window to start.
       normal   Activates and displays a window normally. This is the default,
                 if <ShowStyle> is missing.

    [-wait]  Will cause the command to wait until the launched process (if any)
           has completed.  It's possible that an existing instance of an
           application may use DDE to start <file>.  When this happens,
           an application can not be waited on for exit and will return
           immediately instead.  When waiting, the exitcode will be returned.

     Opens winhlp32.exe to a file with options that you specify.

     Usage: winutils::winhelp <filename> <optionname> ...

        string containing the path, if necessary, and the name of the Help
        file that the Help application is to display.

        The filename may be followed by an angle bracket (>) and the name of
        a secondary window if the topic is to be displayed in a secondary
        window rather than in the primary window. The name of the secondary
        window must have been defined in the [WINDOWS] section of the Help
        project (.HPJ) file.

       Valid option names and associated parameter are:

       command <macro>
         Executes a Help macro or macro string command.
         Displays the topic specified by the Contents option in the [OPTIONS]
         section of the Help project (.HPJ) file.  This is for backward
         compatibility.  New applications should provide a .CNT file and use
         the finder command.

       context <index>
         Displays the topic identified by the specified context identifier
         defined in the [MAP] section of the .HPJ file.

       contextpopup <index>
         Displays, in a pop-up window, the topic identified by the specified
         context identifier defined in the [MAP] section of the .HPJ file.

         Displays the Help Topics dialog box. The Help Topics dialog box lets
         the user select topics to display by viewing the titles of the
         topics, the keywords associated with the topics, or the words and
         phrases found in the topics. Applications typically display the Help
         Topics dialog box when the user chooses a command, such as Help
         Topics, from the Help menu. An application may also display this
         dialog box if the user presses the F1 key when no specific window,
         control, or menu in the application has the focus or is active.

         Ensures that WinHelp is displaying the correct help file. If the
         incorrect help file is being displayed, WinHelp opens the correct
         one; otherwise, there is no action.

         Displays help on how to use Windows Help, if the WINHELP.HLP file
         is available.

         Displays the Index in the Help Topics dialog box. This command
         is for backward compatibility. New applications should use the
         finder command.

       key <keyword>
         Displays the topic in the keyword table that matches the specified
         keyword, if there is an exact match. If there is more than one match,
         displays the Index with the topics listed in the Topics Found list

       partialkey <keyword>
         Displays the topic in the keyword table that matches the specified
         keyword, if there is an exact match. If there is more than one match,
         displays the Index tab. To display the Index without passing a
         keyword, you should use an empty string ("").

         Informs the Help application that it is no longer needed. If
         no other applications have asked for Help, Windows closes the
         Help application.

       setcontents <index>
         Specifies the Contents topic. The Help application displays
         this topic when the user clicks the Contents button.

       setindex <index>
         Specifies a keyword table to be displayed in the Index of the
         Help Topics dialog box.

     Gets or sets the scroll, num, or caps lock attribute of the keyboard.

     Usage: winutils::keylock caps|num|scroll [boolean]

  Documentation will go here... sometime in the future as opposed to now.

  Returns a 3 part list about the volume.  First is the volume name, then the
  serial number, then the file system type.

  Usage: winutils::volinfo <drive>

    % winutils::volinfo e:/
    {Audio CD} 16190012 CDFS
    % winutils::volinfo c:/
    {} -1998926753 NTFS

  Launches a new process.  This is a direct shot into CreateProcess().  It
  doesn't setup pipes to communicate with, never uses the same console
  window, nor does it wait (unless asked) for the exit code the way [exec]
  does.  A true fire-and-forget with loads of win-specific startup options.

  Usage:  winutils::launch [options] <exe> [<param> ...]

  Returns: The PID of the new process (or exitcode when waiting) or an error
           describing why it went boom.

    <exe> may be prepended with //?/ to over-come the MAX_PATH limitation
    on NT and raise the limit to 32K, but no part may be greater than MAX_PATH
    (260 chars) itself.  Commandline parameters support unicode on NT, but this
    doesn't guarentee the app launched will either get the unicode commandline
    or that there's a valid codepage conversion.

    % winutils::launch -cfill 0x1F -cfull -ctitle "merry christmas" telnet

    Launch Win2K's character-mode telnet.exe with no pipes and in a separate
    console, full-screen, with blue background and bright white text and with
    the titlebar text of "merry christmas" when restored with Alt+Enter.

    % winutils::launch -show hide -wait find "qwerty" c:\\somefile.txt

    Runs the find.exe utility and waits for the exitcode.

    % winutils::launch find "qwerty" c:\\somefile.txt

    Runs the find.exe utility (again, as above), but doesn't wait and has a
    momentary flash of a new command prompt window.

    % array set myenv [list abc 123 def 456]
    % winutils::launch -env myenv tclsh84

    Other tclsh->
    % parray env
    env(COMSPEC) = cmd.exe
    env(HOME)    = c:\
    env(abc)     = 123
    env(def)     = 456

    Runs a new tclsh with a custom environment.

The following options are valid:

  [-desktop <value>]
        <value> specifies either the name of the desktop only or the name
        of both the desktop and window station for this process.  Only valid on
        Win2K.  I have no clue what this really does, yet.

  [-ctitle <value>]
        <value> specifies the titlebar text used by default in the
        console window.  Only valid for a console process.

  [-cdims <Xchars> <Ychars>]
        Sets the default screen buffer size in characters.  This happens to be
        different than the window size.  Only valid with a console process.
        Window size overrides when larger.  This is a strange option to get
        right.  Best used with a small -size and -show max, but then -origin
        isn't respected...   Hmmph..

  [-cfill <value>]
        Sets the color attributes used by the console process.
        An or'ed combo of the following from wincon.h:

        #define FOREGROUND_BLUE      0x0001 //text color contains blue.
        #define FOREGROUND_GREEN     0x0002 //text color contains green.
        #define FOREGROUND_RED       0x0004 //text color contains red.
        #define FOREGROUND_INTENSITY 0x0008 //text color is intensified.
        #define BACKGROUND_BLUE      0x0010 //background color contains blue.
        #define BACKGROUND_GREEN     0x0020 //background color contains green.
        #define BACKGROUND_RED       0x0040 //background color contains red.
        #define BACKGROUND_INTENSITY 0x0080 //background color is intensified.

        Launches the console process in full-screen mode.  Same as Alt+Enter.

        Hides the console window from the user.  This might be a dangerous
        option to use.  Doesn't seem to work on Win2K as described.

  [-origin <X> <Y>]
        Sets the origin point where the window will be created when the new
        process uses CW_USEDEFAULT for the ShowWindow() dimensions.

  [-size <Xspan> <Yspan>]
        Sets the height and width of the process's window should it respect and
        use CW_USEDEFAULT in the first ShowWindow() call.

  [-show <ShowStyle>]
        <ShowStyle> must be one of "hide", "maximum", "minimum" or "normal".
        Same as winutils::shell.

  [-priority <PriorityClass>]
        <PriorityClass> must be one of "realtime", "high", "above",
normal", "below" or "idle".  Sets the main thread's priority class of
        the newly created process.

        Will wait until the process completes before returning.  The PID is not
        returned in this case, but is the exitcode instead.

  [-directory <dir>]
        Sets the starting directory.  Use "/" instead of "\" as directory
        seperators in the normal Tcl style.

  [-env <arrayName>]
        Set the environment the process will use from the named Tcl array.
        Unicode characters are supported under NT, but this doesn't guarentee
        the app to be launched understands unicode.  This allows you to copy
        `env` to a different array and modify it, then hand it the launch
        command without ever changing `env` itself and needing to undo the
        changes later.

  Reads the PE header in an executable file and returns the type it is and the
  fullpath in a two element Tcl list.  This does a simplified PEDUMP.  When an
  error happens and the exe is not determined a valid executable, 'None' is
  returned as the type and a useful system error message is returned in the
  third list element.

  Usage: winutils::exetype <exe>

    % winutils::exetype notepad
    {Win32 GUI} C:/WINNT/System32/notepad.exe
    % winutils::exetype edlin
    MS-DOS C:/WINNT/System32/edlin.exe
    % winutils::exetype ntoskrnl.exe
    {Win32 Driver} C:/WINNT/System32/ntoskrnl.exe
    % winutils::exetype tcl84.dll
    {Win32 DLL} {C:/Program Files/Tcl/bin/tcl84.dll}
    % winutils::exetype c:/games/doom2/doom2.exe
    MS-DOS c:/games/doom2/doom2.exe
    % winutils::exetype C:/WINNT/System32/os2/dll/netapi.dll
    {OS/2 Driver} C:/WINNT/System32/os2/dll/netapi.dll
    % winutils::exetype a:/aspils_o.sys
    {OS/2 Driver} a:/aspils_o.sys               <- Old Adaptec SCSI driver
    % winutils::exetype c:/dev/msvc/pharlap/bin/gorun286.exe
    MS-DOS c:/dev/msvc/pharlap/bin/gorun286.exe <- Old PharLap DOS Extender
    % winutils::exetype
    {Win32 CUI} C:/WINNT/system32/      <- This .com is really Win32!
    % winutils::exetype d:/tcl_ws/tcl/win/release/tcl84.dll
    {Win64 DLL} d:/tcl_ws/tcl/win/release/tcl84.dll  <- compiled for 64-bit.

  Types returned will be one of the following:
        Win16 GUI
        Win16 Driver
        OS/2 Driver
        Win32 CUI
        Win32 GUI
        Win32 DLL
        Win32 Driver
        Win64 CUI
        Win64 GUI
        Win64 DLL
        Win64 Driver

  Register a running process ID with the Windows 95/98/ME Service
  Control Manager (SCM). This enables a process to continue running
  when the current user logs out of the desktop. Normally processes
  are terminated when the user logs out. This command is useful for
  network daemons running under Win95/98/ME although consideration
  should be given to using NT for this sort of software.

  Usage: winutils::reg9Xservice ?-process PID? boolean

  A true argument (the default) registers the process with the SCM. A
  false argument unregisters the process.

  The following options are valid:

  [-process <PID>]
        <PID> specifies the ID of the process to register as a
        service. A PID of 0 means the current process.

    % winutils::reg9Xservice -process 0 true
    % winutils::reg9Xservice -process 203 false

  Returns the number of seconds since boot.

  Usage: winutils::uptime

  A script procedure to turn seconds into a formatted elapsed time.

  Usage: winutils::duration <seconds>

    % winutils::duration [winutils::uptime]
    19 days 14 hrs 11 mins 2 secs
    % namespace eval ::winutils {duration [uptime]}
    19 days 14 hrs 11 mins 22 secs