November 21, 2008

Navigate and injecting C# code using visual studio macro

Visual studio macros are great, probably I will write this in all posts that I write for macros :). Sometime back, I need to change a fairly big CF.NET application such a way that it will log a line on each function entry and on function exit. We were tracing for cause of intermittently occurring GWES.EXE error, and we were tracing it from multiple directions. The error code of GWES was 0xC0000005, which means someone was trying to access something, which was never allocated or is being accessed after releasing it. Application was multi-threaded, and hence it was difficult to understand which thread will do what at what time.

Moving back to original point, we wanted to log entry and exit of each functions. There can be more then one way to do that, but we have selected to change each functions. And to change each functions I have selected to use developer named “VS.NET macro”.

From macro it is possible to navigate through solution and projects. So macro first needs to find out all class types from a project, and then for each class, iterate through its member and find out functions that has body. If function has body, inject the code that logs line on function entry and exit.

It was easy to find function entry, but there can be many way function ends, like exception is being thrown, or based of some condition it may execute “return”, or body of the function is ended and hence return. To accommodate such cases, we decide to use “using statement” of C#.

All right, enough of the background, have look at Macro code here

July 23, 2008

Creating a windows shortcut using AutoIt

Filed under: autoIt,robo coding Himanshu @ 6:07 am

AutoIt library do have function to create windows shortcut, FileCreateShortcut. AutoIt script to create new shortcut of specified target in specified file/folder. Once compiled and created executable, use it in following way.

Usage:

shortCut.exe  []

First parameter is required and should be path of file/folder for which to create shortcut

Second parameter is optional and if specified, should be full existing path including shortcut file name. If not specified shortcut will be created in the folder from where executable is run.

If ($CmdLine[0] < 1) Then
    MsgBox(16, "Error", "Insufficent parameters. In first parameter, specify for which file, shortcut should be created.") 
    Return 
EndIf 
$shortcutOf = $CmdLine[1] 
If (Not FileExists($shortcutOf)) Then 
    MsgBox(16, "Error", "File/directory """ & $shortcutOf & """ do not exists") 
    Return 
EndIf 
$shortcutPath = @WorkingDir & "\" & "Shortcut of " & 
$shortcutOf & ".lnk" 
If ($CmdLine[0] = 2) Then 
    $shortcutPath = $CmdLine[2] 
    If (StringLower( StringRight($shortcutPath , 4)) <> ".lnk" ) Then 
        $shortcutPath = $shortcutPath & ".lnk" 
    EndIf 
EndIf 
$objShell = ObjCreate("Wscript.Shell") 
$shortcut = $objShell.CreateShortcut($shortcutPath) 
$shortcut.TargetPath = $shortcutOf 
$shortcut.WindowStyle = 1 
$shortcut.Save()

If you want to download script file click here

Let me know if you need any further help in it.

March 27, 2008

Sending keystrokes (Key press) from .Net to active application

Filed under: .net,programming,robo coding Himanshu @ 5:32 pm

Many of the part of windows works on messages – windows messages. One code can send different kind of messages to another application using Windows API. Keyboard messages and mouse messages are one of them.

.NET is one more layer above OS, e.g. Windows. If someone needs to emulate keyboard strokes to another application from .NET there is a choice of using .NET class library. To emulate keyboard events from .NET it’s easier to use

  • System.Windows.Forms.SendKeys.Send(string) and
  • System.Windows.Forms.SendKeys.SendWait(string)

Recently, I used this to auto log into a application that I’m developing if it’s debug build. Just to get a change from AutoHotKey.

The problem of this is it sends keystrokes to only active application.

March 17, 2008

VS.NET, macro creating string const, and macro creating string resource entry

Filed under: .net,programming,robo coding,vs.net Himanshu @ 2:08 pm

Per me, macro is one of the most important feature for any text editor or software IDE. And hence, it is very import for VS.NET user to understand and then use macros available in VS.NET. VS.NET macros are very powerfully tool and they help in lot more different ways.

I have created two macros that are very common in their need. While programming, we need to create string const on regular bases. It becomes inconvenient to go to top of the class while writing a method body for same class and create constant. Macro in library attached with this post becomes handy at that time.

Same use case hold very much true for creating string resources while writing method body. And it becomes really very easy if string resource can be created while writing method body.

For those who thinks like me (or want to 🙂 ), I have attached two macros with this post. Macro works for VS.NET 2005, haven't tested in any other version. But should work fine in VS.NET 2003 or VS.NET 2008

March 11, 2008

Create shortcuts by scripting (AutoIt, AutoHotKey)

Filed under: autoIt,robo coding Himanshu @ 12:01 pm

In windows, one can create shortcuts; Windows shortcuts can point to may resources like URL, an executable file, document files or folder in file system, disk, and network shares. But not all are same in their behavior. For example: If I create shortcut of an executable and put that shortcut in one of the directory which is included in PATH (Environment variable), I can invoke executable by just typing in shortcut name in Start->Run (Windows + R Key). But I could not do same with http URL. I also wanted to parameterize some of them. For example if I type in “jira ata-586”, it should open jira item “ata-586”.

I use AutoIt for quite some time. There are many good things about AutoIt, easy to learn it’s language (almost like VB), can create executable from script, comes with SciTE Script Editor along with plug-in for language and libraries of AutoIt. Because of plug-in SciTE can give nice code complete feature. I have also been using AutoHotKey a bit. One of the nice features of AutoHotKey is you can program it to wait until specific keys are pressed to perform certain operations, recording keyboard keystrokes and mouse gestures. And also supports to create executable from script.

It’s good to create this kind of scripts that will minimize effort to locate specific place that once can access on regular basis. I have created windows shortcuts or script shortcuts for following specific tasks that I perform regularly

  • Open folder of my projects in windows explorer. (“cd ata” or “cd pub”)
  • JIRA home page
  • JIRA space of specific project
  • Specific JIRA issues
  • Confluence Dashboard
  • Specific confluence space.
  • http://dictionary.reference.com with specific word
  • Google with specific search result.
  • Cisco vpn connection
  • Mapping network share to a drive letter
  • Starting tools that I regularly use, like specific version of visual studio, reflector, vmplayer, nunit…
  • Logging in to application that I’m working/testing
  • Fill-in form that I’m working
  • ….

Big list, I also recommend all to do same for the tasks that you regularly perform, and make you life easier.

March 10, 2008

Automation, Software Engineering, Productivity

Filed under: programming,robo coding,vs.net Himanshu @ 12:22 pm

It’s good to use computer as far as it is possible to do. Around the world, many computer engineers work for others to generate code-base that instructs computers to act as it’s user would like it to. Computers gives more accessibility to the information, knowledge, gives more processing power, help to be more managed and allow us to utilize much more clock cycle of our main thread – a human main thread, which can really do the thinking. Ultimately that what the difference is between human and machines in today edge. That is why we have many software built today. Operating systems, financial applications, engineering application and many others, including the RAD (Rapid application development) tools. RAD in compare to the edge where programmers need to punch the cards makes developer very efficient in generating computer instructions. And of-course even computers are also much more efficient now a days.

Anyway, many of us knows most of above that I have written. The point here is use computers, as much as you can to increase productivity. And it applies to software engineers as well. To support that, I’m planning to take several efforts that will include blog-posts, posting some tools, VS.NET macros, snippets and something else that will help.

Although this wouldn’t be the only goal of this blog-post repository (making it explicit as this is first blog-post in this repository), I’m starting with posting first version of first macro that creates resource entry of a selected string in the code. The macro is posted separately to make both more manageable. I’m linking my first macro with this blog post here, but will not do same for other automation posts that I will post later. To find them you should see posts tagged under RoboCoding. Please mind that the macro is in version-1, I will fix and enhance it as time ticks and the need. As well as more of such will come in future.

Powered by WordPress