AutoHotkey Homepage AutoHotkey Community
Let's help each other out
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Work Break Timer, Task/Idea Logger, ScreenCapture - v. 3.00
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions
View previous topic :: View next topic  
Author Message
TotalBalance



Joined: 22 Jan 2007
Posts: 180
Location: CO, USA

PostPosted: Wed Feb 27, 2008 10:37 am    Post subject: Reply with quote

Deleted previous response.
Tic wrote:
Edit: previous posts removed. hope a mod deletes them so as not to ruin the usefulness of this thread.
.
Thanks Tic, hope mods concur and remove the recent anonymous comments that "distract" from the purpose of this thread and script.
_________________
Lars


Last edited by TotalBalance on Wed Feb 27, 2008 6:40 pm; edited 5 times in total
Back to top
View user's profile Send private message
tic



Joined: 22 Apr 2007
Posts: 1375

PostPosted: Wed Feb 27, 2008 10:55 am    Post subject: Reply with quote

Ok, as pointed out (with my tiny error Wink) here is the updated function to allow screenshots of chosen monitor:
This is correct, ignore "Guest's" comments. The only slight caveat is that if a window is between 2 monitors that each have different resolutions (and input var is "window"), then each respective part of the window will be the resolution of the monitor it is on. I do not wish to fix this as it is unimportant to me, unless someone desperately wants it Wink

Code:
; TextToImage v1.08 by tic
;
; TextToImage can overlay writing to a screenshot of the entire screen or active window, or from an existing image and write to file
; TextToImage(In, Text, Output, x, y, Font, TColour, Size, Weight)
;
; In: Can either be the "Screen" or "Window" and will take a screenshot of the respective choice, or the location of an exisitng image
; Screen will use all available monitors, and "screen1" will use monitor 1, "screen2", moniotr 2, etc.
;
; Text: This is the text to overlay onto the screenshot
;
; Output: This is the path and filename that the image will be written to.
; The extension can be .bmp,.jpg,.png,.tif,.gif and will be written as that type accordingly
;
; x: This is the x-coordinate to place the text. This coordinate will be the distance from the left the text will be placed.
; This value may be a ratio. For instance 4:5 would place the text at the position 4/5ths of the width of the image
; You must also consult which mode align is in
;
; y: This is the y-coordinate to place the text. This coordinate will be the distance from the top the text will be placed.
; This value may be a ratio. For instance 1:3 would place the text at the position 1/3ths of the height of the image
; You must also consult which mode align is in
;
; Size: This is the height of the text in pixels
;
; Align: This must have 2 styles set, The text's x placement (Left,Centre,Right) and the text's y placement (Top,Bottom)
; It must be used for example as Left|Bottom - This would place the text at the bottom of it's bounding area and aligned left
;
; Weight: This is the boldness of the text. Make the value greater to make it more bold
;
; Font: This is the font to set the text to be
; Examples are: Arial, Bookman Old Style, Times New Roman
;
; TColour: This is the colour to set the text in RGB format.
; So FF0000 is red
;
; Style: Can contain the words Underline,Italic,Strikeout and will set the text in the appropriate styles

TextToImage(In="Screen", Text="TextToImage", Output="TextToImage.bmp", x="1:2", y="1:2", Size="20", Align="Bottom|Centre", Weight="400", Font="Arial", TColour="000000", Style="")
{
    hGdiPlus := DllCall("LoadLibrary", "Str", "gdiplus.dll")
    VarSetCapacity(si, 16, 0), si := Chr(1)
    DllCall("gdiplus\GdiplusStartup", "UIntP", pToken, "UInt", &si, "UInt", 0)
   
    If In Contains Screen,Window
    {
        If (In = "Screen")
      {
         SysGet, nL, 76                                                ; Get coordinates for all monitors
         SysGet, nT, 77
         SysGet, nW, 78
         SysGet, nH, 79
      }
      Else If ((SubStr(In, 1, 6) = "Screen") && ((Substr(In, 0) & 1) != ""))
      {
         SysGet, Coords, Monitor, % Substr(In, 0)   ;%
         nL := CoordsLeft, nT := CoordsTop, nW := CoordsRight - CoordsLeft, nH := CoordsBottom - CoordsTop
      }   
        Else If (In = "Window")
        {
            WinGetPos, nL, nT, nW, nH, A                                                ; Get coordinates for active window
            WinGet, ID, ID, A
            WinGetTitle, Title, A
            Winget, MinMax, MinMax, A
            If !(DllCall("IsWindowVisible", UInt, ID) && (Title) && (MinMax != -1))      ; Check active window is visible
            {
                GoSub, TTS_GdiplusShutdown
                Return, "Window is not visible"
            }
        }       
        mDC := DllCall("CreateCompatibleDC", "UInt", 0)
        NumPut(VarSetCapacity(bi, 40, 0), bi)
        NumPut(nW, bi, 4)
        NumPut(nH, bi, 8)
        NumPut(32, NumPut(1, bi, 12, "UShort"), 0, "UShort")
        hBM := DllCall("gdi32\CreateDIBSection", "UInt", mDC, "UInt", &bi, "UInt", 0, "UIntP", "", "UInt", 0, "UInt", 0)
        oBM := DllCall("SelectObject", "UInt", mDC, "UInt", hBM)                        ; Place bitmap object Into compatible DC
        hDC := DllCall("GetDC", "UInt", 0)                                             ; Get DC of screen and bitblt
     
        DllCall("BitBlt", "UInt", mDC
      , "Int", 0, "Int", 0
      , "Int", nW, "Int", nH
      , "UInt", hDC, "Int"
      , nL, "Int", nT
      , "UInt", 0x40000000|0x00CC0020)
    }
    Else
    {
        VarSetCapacity(wFile, StrLen(In)*2+2)
        DllCall("kernel32\MultiByteToWideChar", "UInt", 0, "UInt", 0, "UInt", &In, "Int", -1, "UInt", &wFile, "Int", VarSetCapacity(wFile)//2)
        DllCall("gdiplus\GdipCreateBitmapFromFile", "UInt", &wFile, "UIntP", pBitmap)

        If !pBitmap
        {
            Gosub, TTS_GdiplusShutdown
            Return, "Failed to load image"
        }
       
        DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "UInt", pBitmap, "UIntP", hBM, "UInt", 0)
      DllCall("gdiplus\GdipDisposeImage", "Uint", pBitmap)
        mDC := DllCall("CreateCompatibleDC", "UInt", 0)
        oBM := DllCall("SelectObject", "UInt", mDC, "UInt", hBM)
      hDC := DllCall("GetDC", "UInt", 0)
    }

    StringSplit, OutputArray, Output, .
    Extension := "." . OutputArray%OutputArray0%
    If Extension not in .bmp,.jpg,.png,.tif,.gif                                    ; Check file extension is correct
    {
        GoSub, TTS_GdiplusShutdown
        Return, "Invalid file extension. Only bmp,jpg,png,tif,gif are available"
    }

    VarSetCapacity(bm, 24, 0)
    If !DllCall("GetObject", "UInt", hBM, "Int", 24, "UInt", &bm)
    {
        GoSub, TTS_GdiplusShutdown
        Return, "GetObject failed on bitmap {" hBM "}"
    }
    Width := NumGet(bm, 4, "Int")                                                  ; Get properties of bitmap
    Height := NumGet(bm, 8, "Int")
    bpp := NumGet(bm, 18, "Ushort")
   
    DllCall("SetBkMode", "UInt", mDC, "UInt", 1)                                   ; Leave background untouched for background mix mode
    DllCall("SetGraphicsMode", "UInt", mDC, "UInt", 2)                            ; Set graphics mode for DC to allow world transformations                           

    VarSetCapacity(logfont, 60, 0)
   
    LogPixelsSY := DllCall("GetDeviceCaps", "UInt", hDC, "Int", 90)                 ; Number of pixels per logical inch along the screen height
    DllCall("ReleaseDC", "UInt", 0, "UInt", hDC)
    TextHeight := -(Size*logPixelsSY)/72
   
   NumPut(TextHeight, logfont, 0)                                       ; Set text height
   ;NumPut(TextWidth, logfont, 4) ; Change text width
   
    NumPut(Weight, logfont, 16)                                          ; Set text weight
   If InStr(Style, "Underline")                                       ; Set style to be either underline,italic,Strikeout
   NumPut(1, logfont, 21)
   If InStr(Style, "Italic")
   NumPut(1, logfont, 20)
   If InStr(Style, "Strikeout")
   NumPut(1, logfont, 22)
   
   NumPut(5, logfont, 26)                                             ; ClearType antialiasing XP and above only
   
    AlignWord := "Right,Top,Bottom,Centre,Left"
    AlignNum := "2,0,8,6,0"
   
    StringSplit, AlignWords, AlignWord, `,
    StringSplit, AlignNums, AlignNum, `,
   
    Loop, %AlignWords0%
    StringReplace, Align, Align, % AlignWords%A_Index%, % AlignNums%A_Index%, All
    StringSplit, Pos, Align, |
    Align := Pos1 | Pos2

    StringLeft, FaceName, Font, 32
    DllCall("lStrcpy", "UInt", &logfont + 28, "Str", FaceName)                       ; Set font
    DllCall("SetTextAlign", "UInt", mDC, "UInt", Align)                             ; Align text
    #hFont := DllCall("CreateFontIndirect", "UInt", &logfont)
    #hOldFont := DllCall("SelectObject", "UInt", mDC, "UInt", #hFont)                ; Change DC Font
    TColour := "0x" . TColour
    prevColor := DllCall("SetTextColor", "UInt", mDC, "UInt", ((TColour & 0xFF) << 16) + (TColour & 0xFF00) + ((TColour >> 16) & 0xFF), "UInt")
   
    If InStr(x, ":")
    {
        StringSplit, XRatio, x, :
        XPos := XRatio1*(Width//XRatio2)
    }
   Else
   XPos := x
   
    If InStr(y, ":")                                                                ; Get ratios of x and y position
    {
        StringSplit, YRatio, y, :
        YPos := YRatio1*(Height//YRatio2)
    }
   Else
   YPos := y
   
    StringSplit, Text, Text, `n
       
    Loop, %Text0%
    {   
        DllCall("TextOut", "UInt", mDC, "Int", XPos, "Int", YPos, "Str", Text%A_Index%, "UInt", StrLen(Text%A_Index%))
        YPos += 1.5*Size                                                            ; Draw text Into device
    }   
                                                                                   
    DllCall("SelectObject", "UInt", mDC, "UInt", #hOldFont)
    DllCall("DeleteObject", "UInt", #hFont)                                         ; Restore DC Font
       
    DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "UInt", hBM, "UInt", 0, "UIntP", pImage)
   DllCall("SelectObject", "Uint", mDC, "Uint", oBM)
   DllCall("DeleteObject", "Uint", hBM)
   DllCall("DeleteDC", "Uint", mDC)
    DllCall("gdiplus\GdipGetImageEncodersSize", "UIntP", nCount, "UIntP", nSize)    ; Get encoder
    VarSetCapacity(ci, nSize)
    DllCall("gdiplus\GdipGetImageEncoders", "UInt", nCount, "UInt", nSize, "UInt", &ci)
       
    Loop, %nCount%
    {
        nSize := DllCall("WideCharToMultiByte", "UInt", 0, "UInt", 0, "UInt", NumGet(ci, 76 * (A_Index - 1) + 44), "Int", -1, "UInt", 0, "Int",  0, "UInt", 0, "UInt", 0)
        VarSetCapacity(sString, nSize)
        DllCall("WideCharToMultiByte", "UInt", 0, "UInt", 0, "UInt", NumGet(ci, 76 * (A_Index - 1) + 44), "Int", -1, "Str", sString, "Int", nSize, "UInt", 0, "UInt", 0)
   
        If !InStr(sString, Extension)                                               ; Find encoder matching extension
        Continue
        pCodec := &ci + 76 * (A_Index - 1)
        Break
    }
    If pImage                                                                     ; Save image to file
    {
        sString := Output
        nSize := DllCall("MultiByteToWideChar", "UInt", 0, "UInt", 0, "UInt", &sString, "Int", -1, "UInt", 0, "Int", 0)
        VarSetCapacity(wString, nSize * 2)
        DllCall("MultiByteToWideChar", "UInt", 0, "UInt", 0, "UInt", &sString, "Int", -1, "UInt", &wString, "Int", nSize)
   
        DllCall("gdiplus\GdipSaveImageToFile", "UInt", pImage, "UInt", &wString, "UInt", pCodec, "UInt", 0)
      DllCall("gdiplus\GdipDisposeImage", "Uint", pImage)
    }
    GoSub, TTS_GdiplusShutdown
    Return, XPos . "|" . YPos

   TTS_GdiplusShutdown:
    DllCall("gdiplus\GdiplusShutdown" , "UInt", pToken)                            ; Shutdown and free library
    DllCall("FreeLibrary", "UInt", hGdiPlus)
   Return
}


Edit: previous posts removed. hope a mod deletes them so as not to ruin the usefulness of this thread.


Last edited by tic on Wed Feb 27, 2008 4:03 pm; edited 2 times in total
Back to top
View user's profile Send private message
Guest






PostPosted: Wed Feb 27, 2008 11:23 am    Post subject: Reply with quote

TotalBalance wrote:
As for "Guest", no doubt you're knowledgeable of AHK. Why the anonymity. If you and Tic have issues, it's disappointing you feel the need to vent on a post you didn't even originate rather than be "human" enough to work things out via PM. Shame on you.

What's the problem with the Guest account? Why is it allowed at all then? I just don't want to register, that's it. And I told you how to solve your problem, then you blamed me. What's wrong with you? Read again carefully the posts. Who flamed? I only told the solution and pointed out the mistakes. By the way, the last updated one is still incorrect. So, shame on who?
Back to top
Starbuck



Joined: 26 Feb 2008
Posts: 13

PostPosted: Sun Mar 02, 2008 1:33 pm    Post subject: Re: Experience so far and Enhancement ideas Reply with quote

Thanks for the considered responses. Brief responses to most other points below.
TotalBalance wrote:
I could just add a "reset" button in the icon tray. Would that work for you?
Yup!
Starbuck wrote:
- Add ability to associate time blocks with specific kinds of activity.
TotalBalance wrote:
do you just mean to have the ability to create a drop down list that will automatically populate the title of a new task with the selected list entry?
Yes - like TDL has configurable dropdown lists for Categories, Statuses, Allocated To, and Allocated By. I'm thinking it would help to have maybe three empty dropdowns that get populated in the INI file like this:
Code:
[DropDown1]
1=Work
2=Play
3=Sleep
[DropDown2]
1=Bob
2=Barb
3=Bill
[DropDown3]
1=Business
2=Family
3=Community
You don't need to provide an edit box to populate the lists, or label the lists or anything similar, just pull data in so that we can apply it to the logs.
Starbuck wrote:
Pulldown for client or department codes - general, not too many.
TotalBalance wrote:
Yes, I've got this on my ToDoList. I think the first pass wil probably be something you have to manually enter into a new section on the ini file and change the control to a combo text/dropdown list that pulls the list from the ini file.
That's fine, notice how this seems to be exactly the same as the other request - maybe I would use this as one of my 3 lists ... another 2 birds with one stone item?
TotalBalance wrote:
I just drag/drop or cut/paste into the TDL project/sub-project/task it falls under. Everything rolls up anyway, Make sense?
Yup - I keep different clients in different TDLs so it helps me to be able to sort activity quickly so that I can drag it over to the right TDL and tasks.
TotalBalance wrote:
I'm not sure, at the end of the day, which is faster. Clicking, thinking and selecting from a drop-down list, then adding additional info in the comments or just typing it all free form. What are your thoughts?
I know after creating 100 logs (hotkeys are way too easy, Laughing ) that I'm going to spend some amount of time going back through each, hoping I added enough info to properly categorize. As I bang out the logs I feel the impending dread of yet another thing to do later - organizing logs - so I've been considering faster ways to categorize up front. I could just update the TDL task that gets created but now I'm doing entry in two UI's. My pattern is to create a log with WBT then hit ESCape to close TDL as soon as I've verified the clock has been reset - or not. Just having the option seems of value.
Starbuck wrote:
Checkbox for billable.
TotalBalance wrote:
Good idea. I'll put it on my ToDoList. Again, will probably set default to non-billable but can be changed in ini file.
Maybe this is just like the dropdown lists - if there are just 3 or 4 optional checkboxes with definitions and default values in the INI, then you don't need to worry about putting something in that won't have value to someone else. If we care about details we can learn to edit the code. Smile[/quote]
Starbuck wrote:
-Sound for timer should be selectable...
TotalBalance wrote:
Agreed, another thing to add to my ToDoList. Maybe you'll beat me to the punch Cool
It's almost 5:30am here and I'm just about to wrapup my day. Err, my yesterday. What does that tell you about how much time I have? LOL, I'll try when I can. Promise.
Starbuck wrote:
Allow for a configurable ASCII character that replaces embedded carriage returns. Multiple lines in comments mess up exports but if we can control the delimiter we can zap that into CRLF later.
TotalBalance wrote:
I've noticed this myself and agree. Just don't know how to do it. Tic or others, any ideas?
Back to top
View user's profile Send private message
TotalBalance



Joined: 22 Jan 2007
Posts: 180
Location: CO, USA

PostPosted: Tue Mar 04, 2008 12:04 am    Post subject: Reply with quote

HugoV,
I'm doing some updates to WBT and wanted to include the code below. There some additional discussions you had with Tic, did you come to a final solution? If so, can you share it to make sure I've got it right? TIA.

HugoV wrote:
Ignore the post above, doesn't work (must be something with global v local vars or something I think) anyway, I've tested the code below and it works for me:

As hotkeys:

Code:
Hotkey, LWIN & Enter, HotkeyOK
Hotkey, LWIN & !E, HotkeyExit
Hotkey, LWIN & !R, HotkeyRepeat

And these labels:

Code:
HotkeyOK:
If !DllCall("IsWindowVisible", "UInt", hwnd)
Return
If !End
   {
   Gui, 2: Hide
   Working := !Working, Time1 := A_TickCount
   SetTimer, UpdateTray, 250
   SetTimer, EndWorkBreak, % Working ? WorkTime*60*1000 : BreakTime*60*1000
   }
Return

HotkeyExit:
If !DllCall("IsWindowVisible", "UInt", hwnd)
Return
;MsgBox Hello Exit
   If End
      ExitApp
Return

HotkeyRepeat:
If !DllCall("IsWindowVisible", "UInt", hwnd)
Return
;MsgBox Hello Repeat
If End
   {
   End =
   Gui, 2: Hide
   GoSub, TrayStart
   }
Return

The only problem that I have is that if I use a hotkey like F11 and press that while the OK/EXIT/REPEAT gui is visible it also sends the keypress to the active program (and I've mapped F11 in most of my programs).

But by using "exotic" keycombos like LWIN & Enter, LWIN & Alt-E, LWIN & Alt-R you can prevent that. Suggestions welcome on how to use a regular ENTER without interfering with the active program.

I tried:
Code:
Hotkey, ~Enter, HotkeyOK
but that didn't seem to do the trick for me.

_________________
Lars


Last edited by TotalBalance on Tue Mar 04, 2008 1:06 am; edited 1 time in total
Back to top
View user's profile Send private message
tic



Joined: 22 Apr 2007
Posts: 1375

PostPosted: Tue Mar 04, 2008 12:49 am    Post subject: Reply with quote

the way to do it would be that when the gui subroutine is run showing that alpha blended gui then immediately map enter to do whatever would happen when you clicked "ok":

Code:
Hotkey, Enter, EnterSub, On


and then inside that subroutine that is run when you press enter then turn off that hotkey so it functions correctly afterwards:

Code:
Hotkey, Enter, EnterSub, Off
Back to top
View user's profile Send private message
HugoV



Joined: 27 May 2007
Posts: 650

PostPosted: Tue Mar 04, 2008 10:13 am    Post subject: Reply with quote

@TotalBalance:

This is the code I use for HotkeyOK:

Code:
HotkeyOK:
If !DllCall("IsWindowVisible", "UInt", hwnd)
   {
   Send, {Enter}
   Return
   }
If !End
   {
   Gui, 2: Hide
   Working := !Working, Time1 := A_TickCount
   SetTimer, UpdateTray, 250
   SetTimer, EndWorkBreak, % Working ? WorkTime*60*1000 : BreakTime*60*1000
   }
Return


@tic:

If I add
Code:
Hotkey, LWIN & Enter, HotkeyOK, On
Hotkey, LWIN & !E, HotkeyExit, On
Hotkey, LWIN & !R, HotkeyRepeat, On

in EndWorkBreak: I can see using ListHotkeys that the Hotkeys
should be active but when I press a hotkey nothing happens, I checked
using a MsgBox to see if it would jump to the hotkey label but it
doesn't. Where should the code above be added to make it work?
Back to top
View user's profile Send private message
crimsonsky



Joined: 03 Jun 2008
Posts: 4

PostPosted: Tue Jun 03, 2008 8:22 pm    Post subject: Reply with quote

hey guys, really like this script. i needed some changes that were mentioned in some of the more recent posts as far as ability to reset the timer and choose categories.

wondering if this script is still being developed as don't see changes in the last couple of months.

great work!
Back to top
View user's profile Send private message
TotalBalance



Joined: 22 Jan 2007
Posts: 180
Location: CO, USA

PostPosted: Tue Jun 03, 2008 8:51 pm    Post subject: Reply with quote

Glad to hear you like the program, thx!

Regrettably, I'm really pre-occupied with personal & health matters. For now, I'm challenged to make user requested updates (and not being a programmer, it's not always easy for me).

All the code is available for others to make enhancements, I just ask they share them with the forum.

Having said the above, I did add the "restart timer" and "reload program" to my most recent version, I'll make a note to upload it sometime today.
_________________
Lars


Last edited by TotalBalance on Tue Jun 03, 2008 9:13 pm; edited 1 time in total
Back to top
View user's profile Send private message
Guest






PostPosted: Tue Jun 03, 2008 9:11 pm    Post subject: Reply with quote

Sorry to hear that. hope everything gets better for you.
Back to top
TotalBalance



Joined: 22 Jan 2007
Posts: 180
Location: CO, USA

PostPosted: Tue Jun 03, 2008 9:27 pm    Post subject: Reply with quote

@crimsonsky - Just uploaded newest version with new functionality mentioned earlier. Haven't tested the *.zip file contents. Let me know if everything works OK. Go to "Download' section of original post for link.
@guest - Thanks for your kind words, this too shall past Smile
_________________
Lars
Back to top
View user's profile Send private message
crimsonsky



Joined: 03 Jun 2008
Posts: 4

PostPosted: Tue Jun 03, 2008 11:16 pm    Post subject: Reply with quote

that was actually me on both comments. login troubles! anyways, glad you are doing better and appreciate the quick response.

i also use todolist and it's a great software.

i personally follow the "do it tomorrow" system by mark forster and that works great for me. I will adapt it to this system.

Thanks.
Back to top
View user's profile Send private message
TotalBalance



Joined: 22 Jan 2007
Posts: 180
Location: CO, USA

PostPosted: Tue Jun 03, 2008 11:24 pm    Post subject: Reply with quote

Agreed, TDL is the best app of it's kind I'ver ever used (and over the years I've probably tried just about everything out there). The fact it's open source yet Dan's provides a level of support and enhancements that exceeds many commercial apps blows me away. TDL has been on my donation list for a while now Very Happy

Not familiar with the "do it tomorrow" system. Thx. I'll take a look.
_________________
Lars
Back to top
View user's profile Send private message
crimsonsky



Joined: 03 Jun 2008
Posts: 4

PostPosted: Wed Jun 04, 2008 2:36 am    Post subject: Reply with quote

sorry, one more question.

how do you incorporate this program with items you already have in todolist? is there a way to click on an existing task in todolist and link it to work break timer for the screenshot functionality.

i.e. i have a task to check email. i can click the timer in todolist, but wondering if there is a trigger to start the timer and capture screenshots together.

thanks.
Back to top
View user's profile Send private message
TotalBalance



Joined: 22 Jan 2007
Posts: 180
Location: CO, USA

PostPosted: Wed Jun 04, 2008 4:00 am    Post subject: Reply with quote

This may not work for you, but here's how I handle such things. It works for me because of how I record tasks and sub-tasks in TDL (regardless of using Work-Break Timer (WBT) or not).

1) I also have daily tasks listed in TDL, (e.g. Phone Calls, Check Email, Conditioning Program, Reading, etc.). These daily tasks are treated as Parent tasks.

Since the particulars are usually unique, Call Jack, Read "Get it Done Tomorrow, Read RSS feeds, Rowing Machine, etc. their all treated as sub-tasks under their associated Parent task. Even for sub-tasks that have the same name as Parent (e.g email), I'll still list them individually as sub-tasks:

Parent: Check Email
sub-task: check email
sub-task: check email re: Customer 1
sub-task: check email
sub-task: check email re: Project A

Doing it this way gives me daily reports with particulars and also rolls up the time spent into the Parent Task.

With this approach, when I check email, whether for a specific purpose or just in general, I'll hit my WBT "New Active Task" hotkey and enter the info in the pop-up screen. The new task will be added to the top of the TDL list specified, but it's not a big deal for me at the end the day to drag and drop the specific sub-tasks under their associated Parent. For Daily tasks listed in TDL, I have them right at the top of my TDL list. This way the associated sub-tasks are close by and it's easy to find the parent task that may have a link to open any associated program, file or url.

2) Here's another work around I sometimes use that does pretty much the same thing. I usually use this technique when I don't feel like typing out a long title eg:

TDL Task: "Research, find and buy a new car for my daughter"

I'll highlight the task, CTRL-C (copy to clipboard), and then hit my WBT hotkey to launch the "New Active Task" pop-up screen. Then paste (CTRL-V) clipboard content into the "Task" field (a glifix carries over, I just delete it - someday I might have AHK remove it).

WBT then does it's thing to replicated task, by the same name, into the TDL list with timer started. If I want to uniquely reference the sub-task in TDL, I'll add some relevant info in the comment area to remind me of any particulars later. Again, I'll move it where it belongs and at end of day.

I hope this works for you or at least helps. Let me know if you've got questions.
_________________
Lars


Last edited by TotalBalance on Thu Jun 05, 2008 4:20 pm; edited 3 times in total
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions All times are GMT
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
Page 7 of 8

 
Jump to:  
You can post new topics in this forum
You can reply to topics in this forum


Powered by phpBB © 2001, 2005 phpBB Group