Sunday, April 29, 2007

Analytic tools For Better Optimization Of your Blog

Everyone wants to keep track of the kind of visitors they are getting on their blog or site. So that they can improve their contents or may be able to provide targeted content.That's why adsense is getting succeded.
Know your Audience
is the funda behind the success on web blogosphere.

Various analytics tools are available on the web. Some are free and some are paid. One among the most used is google analytics . But some people are really scared of it because of its privacy intervention. If you are on a slower internet connection, you will be able to notice that each thin that you do with gooogle will be stored as all link requests pass through . Google is scrutinizing each and everything on web and that's why people are getting more and more frustrated. It would be a blog or may be a whole website if I will start scruitnizing Google's privacy policy, So its better to leave the topic for some other day.

One more good tool available out there is Feedburner . This also really cool. But is limited to few stats in its free version

Recently i have found a new service by ewebcounter, The site is really cool and provide cool information about visitors. The cool thing about it is its real time stats which may not be much of use to a blogger but it can be fun to play with. You can see who's online on your website.

Isn't it cool?

It also provides IP lookup on Google MAPs. Now that's what i found interesting. Its also a toy like facility.
So If you are joining them you will get the following facilities(since I'm not a flattering kind of person so I have copied these features from their homepage, but i guess you will get much more than that):
  • A 100% free web counter that be can installed on virtually any website

  • A wide assortment of invisible and graphical web counter styles to choose from

  • A password protected account to view your detailed web statistics

  • We provide a hosted solution, so there's no software for you to install and to maintain

  • Over 20+ web statistical reports with detailed logs and charts

  • Monitor who's on your website with real-time streaming data

  • Track page views, unique visitors, visitor paths, referrals, search engine keywords, etc.

  • Get statistical reports emailed to you

One more cool thing that it provide is pie charts for all the infos (viz country, ISP, browser, Platform, activity, referral, search engine, keywords, length of the session, pages visited) about visitors to you site. It has tonnes of information about your visitors, is very easy to use and install, but is limited to only 200 reports at a time in its free version. But you can upgrade it whenever you want. If you won't believe me then check it out yourself. I bet you won't be regretting about your decision to follow my advice. Check it Out for yourself

Few Sites For Blogging Dummies Like Me

I have found Some new sites(ok buddy! they are not new, But they are new to me) which can be useful for dummies like me banned from adsense.
Which may help you in getting some money and better Ranking.

  • Text Link Ads is a site which claims to give you $100 in FREE Links. But The problem is that your site has to qualify there standards. Even If your site is not much popular, you can earn upto $40-50 bucks in a month.

  • If you are banned from adsense and would advice you to Join the CrispAds Blog Advertising Network!, as they claim to give you targeted advertisements like Adsense. Here too they will review your site before accepting you.

  • One more site that I would like to recommend is Trafficg. The site is really cool if you have low visits per day and would like to get a cool site like this with higher ranking.

  • Exoclick is also a new PPC site which pays you in the same way as adsense does. But the problem here is that the CPM is low and the ADs are not targetted.

  • And Ofcourse I would recommend my site, so that you can get to grow and earn with a dummy like me.

Handy Yahoo Tips

  • Change Your Name
Here is tip for writing your name on yahoo messenger. It's really easy and hopefully you like this tip. Just follow these easy steps

  1. First of all open the messenger's directory. The default location is C:\Program Files\Yahoo! \Messenger
  2. In the Messenger directory find a (.ini) file name "ymsgr".
  3. 3. Open the file. By default it opens with notepad, but you can use any other text editor as well
  4. place these word on the top
[app title]

Note: you had to place your name instead of hackaback

5. Save and close the file. Launch yahoo messenger to view the new title.

  • Save your Chat

You can save save your chat by following these steps
  1. Go to preferences
  2. Go to the archive category, you will see some options there, select the one which suits your requirement

  • Use keyboard to view inbox

If you are any where in yahoo mail, like address book, calendar or any other option and you want to go to inbox then simply press ctrl+shift+c. You will come to the inbox of yahoo mail. This shortcut may not be supported by older browsers.

  • Multiple yahoo profiles

You can make up to six profiles on yahoo messenger which will behave like six different yahoo IDs. When you are using these profiles no one can think that it's your original ID or a fake one. Just follow these steps:

1. Sign in to yahoo messenger, click on Messenger menu and then click My Profiles

2. Click on Create/Edit My Profiles button

3. A window will open and ask for yahoo password, if you are not signed in. After singing in following page will open. Just click on create new public profile and add profiles.

4. After doing this, sign out your messenger and again sign-in. Go to Messenger > My Profiles, now here some new profiles will be added (which you created in step three). These profiles will currently be inactive, activate them. From now on when you open window for a person for chat you will see the list of your profiles.

Yahoo Mindset

Yahoo Mindset has introduced a new style of searching. Now a user can search the things more close to his requirements. Go to mindset.research.

Yahoo search engine divides the query in two categories, shopping and researching. For example if you want to search about mobiles then you just write mobile and press Search button . The search will give some results, in the same page you see a slider with left side marked as shopping and right side as researching.

Friday, April 27, 2007

American Idol

Who do you think will be the next American Idol. voice your views here with appropriate reasons. You may get a chance to get reviewed by me:p

How To Manage Directory Submissions

'More than 80% of the traffic comes from the top ten search engines'.

You have probably read this statement many times and it's true at least for the majority of websites.

So how about web directories? Is submitting your site to them a waste of time?

Even if directories usually don't deliver a lot of traffic they contribute inbound links to your site increasing its link popularity a very important factor used by search engines to rank websites.

When someone queries a search engine using a keyword relevant to your site, higher is your site link popularity higher are its chances to come up near the top of the results.

Submitting your site to web directories will help you increase its visibility and attract more traffic from search engines.

However you need an overall strategy to successfully manage your directory submissions or you will only lose your time and energies.

Is your site ready?

You should never forget that directories don't exist to give away free links. Their purpose is to provide their visitors with good quality sites.

If you want some chances to get listed you need a well designed web site containing useful and original content or offering useful services.

Your site must also be complete without broken links or links to 'under construction' pages.

Other things that can cause a rejection of your submission are: too many ads (especially pop-ups and pop-unders), automatic redirections to another domain, having the same exact content of other sites (example: the 'self replicated' sites some companies provide to their affiliates).

Preparing your listing details

Open your favorite text editor and write down the following informations:

1) your web site URL.

2) your website Title. Some directories accept only the official site name as title, others allow some descriptive keywords, but in general stuffing a lot of keywords in your title is not acceptable.

Write 2-3 different titles in compliance with these different rules.

3) your website description. Write what your site is about in a couple of sentences. Avoid superlatives, exclamation marks, excessive hype and generally everything that makes your description sound like an ad.

Description should be written in third person. Avoid expressions like 'we offer', 'we are ...'.

4) a set of search keywords related to your site. Separate the keywords with commas, then write down the same set of keywords this time separated by spaces. Some directories require the first format, others the second one.

5) your full name and email address.

Once you have done save the document. By copying and pasting these informations into the submissions forms you will save time and avoid errors.

Finding web directories

The next step is finding directories where you can submit your site.

You can use browse the 'Directories' category of top directories like Yahoo and DMOZ to find minor and specialized directories.

Spend some time to determine how each directory is organized and find the most appropriate category for your site.

Submitting to the wrong category usually causes a rejection of your submission.

Compile a list of all directories where you have submitted your site indicating the date of your submission.

Verifying the results

Not all directories send you an email when your site is listed.

You should periodically visit your list of directories and make a search for your site title or url. Flag all directories where you find your site.

If your site has not been listed after about 2 months from the date of your first submission you can try to submit it again. My advice is to not resubmit more frequently.

You can also contact the directory owner and ask about the status of your submission, but if you don't receive a reply, don't insist. There may be many reasons why a directory doesn't list your site, simply accept the fact that not all submissions are successful.

Submitting your site to web directories is an essential part of your website promotion strategy. It's a time consuming task, but with the right planning you will be able to manage it successfully.

Thursday, April 26, 2007

Quotes Of the Day

Hey I was sitting and getting bored in my office. So found some quotes
that I think That you all should give a thought. Hehe...... Nevermind.
Here They Are

- It's Best to avoid standing between a competitive jerk and his goals

- It takes 43 muscles to Frown and 17 to Smile, But it Doesn't Take Any
to Just Sit There With A Dumb Look On Your Face.

- Always remember that you are unique, Just like everybody else.

- No one can make you feel inferior without your consent, but you would
be a fool to withold that from your superiors

- Leaders are like Eagles. We don't have Either of them here.

- If a pretty poster and a cute saying is all it takes to motivate you,
You probably have a very easy job. The kind Robots will be doing soon.

- You can do anything you set your mind to when you have Vision,
Determination and an endless supply of Expendable Labor

- Power Corrupts, Absolute power corrupts absolutely, But it rocks
Absolutely too.

- Some People live to dream of success, while other people live to crush
those dreams.

- The journey of thousand miles sometimes end very very baadly.

- You aren't being paid to believe in power of your own Dreams.

Wednesday, April 25, 2007

Exclusive Picture Of ASH and Abhi's Wedding Flight


thought I should share with you. For those who don't know, Abhishek Bachchan is a superstart in bollywood and son of legendary Amitabh Bachchan. And Aishwarya Rai is former miss world and a beauty idol. Recently they got Married

Tuesday, April 24, 2007

Want Ubuntu Feisty Fawn ?

Everyone is looking for a copy of ubuntu feisty fawn so that they can have one of the coolest operating system out there. So let's get to Know something about it first and I may tell you later where you can download it, once I become aware of it:p.

Ubuntu 7.04 is the most user-friendly Ubuntu to date and includes a ground-breaking Windows migration assistant, excellent wireless networking support and improved multimedia support.

Windows migration tool - The new migration tool recognises Internet Explorer favorites, Firefox bookmarks, desktop wallpaper, AOL IM contacts, Yahoo IM contacts and imports them in Ubuntu. This offers easier and faster migration for new users of Ubuntu and individuals wanting to run a dual partition. In addition to single accounts, you can migrate several users' settings in Ubuntu.

Easy installation of multimedia codecs
Playing an MP3 or other media file just got a lot easier. If the required pieces are not yet installed, 7.04 will get the correct codecs for you, no more searching and no need for long and complicated instructions.

Desktop Effects
Stunning new desktop effects are available as a technology preview for users who choose to enable them. They remain turned off by default, for the benefit of users with older or less powerful chips and certain non-supported graphics cards.

Better debugging of crashes
For those times when programs crash, 7.04 builds in a new tool to catch the data about that crash and make certain all the right information gets to the developers, making a better Ubuntu experience for all.

Xorg 7.2 included
Keeping in step with the cutting edge mentality, X11R7.2, the third release of the modular X Window system, is utilized in this and future Feisty releases. X11R7.2 comes with significant stability and correctness fixes, including improved auto-configuration heuristics, enhanced support for GL-based compositing managers such as Compiz and Beryl, and improved support for PCI systems with multiple domains. It also incorporates the new, more extensible XACE security policy framework.

New Games: Sudoku and Chess
With a change of maintainers in gnome-games, the plea for new and more exciting games was heard. After two surveys, one to figure out which game to remove and another to determine to which one to add, two winners emerged: gnome-soduku and glchess. Both of these games have now been added to gnome-games 2.17 and you can find them under Applications > Games > Chess or Sudoku. Of course, one game did get axed. Sadly Ataxx, a game similar to Reversi and Othello, didn't make it.

Download 7.04
Get it while it's hot. ISO CD images and torrents are available for Ubuntu, Kubuntu, Edubuntu and Xubuntu.

Awesome David Copperfield ILLUSION ! [C1]

Hey! Check this out. This amazing video of David Copperfield performing an illusion thingy in front of hundreds of audience. This is really cool.
I don't have Youtube access from my office, so couldn't post it there. Here is the link. Its in wmv format

Burning PS2 games on PC

1. Take the ps2 game put it in the dvd rom or dvd burner, your choice.

2. open the dvd decryptor program then go to to tool bar and hit MODE>ISO>READ. Then choose the correct dvd drive that the game is in as the "source". Also choose where you want the files to be stored on the pc hdd. THEN CLICK DECRYPT , or the huge graphical picture at the bottom of the program which makes it run. The game is now copying to your HDD. Take the game out when finished (it might take a while).

3. Go to the same tab in dvd decryptor and choose MODE>ISO>WRITE. This will then let you look for the files you just created in step 2. Select the file that you just created. (There is only 2 files creadted so pick the smaller one, I forget what its called. If it dosen't work pick the other file instead.) Then click WRITE, make sure there is blank DVD or CD in the drive depending on if its a cd or dvd game.

The game is now burning.... when done Take the game out

Five Powerful Strategies for Getting Maximum Website Traffic

Every webmaster dreams of getting so much traffic from the search engines that it overloads the circuits of their web hosting provider's network. Getting your site listed on page one for several relevant keyword phrases on the major search engines is the key to approaching this level of traffic. Getting there requires creative writing skills, diligent effort and a little knowledge about search engine optimization. Read on for some search optimization instructions including five indispensable elements to help your search engine rankings and resulting traffic.

We've heard that a million monkeys at a million keyboards could produce the
complete works of Shakespeare; now, thanks to the Internet, we know that is not

Content is King: - If you have done any research on search engine optimization, you are aware of the need to optimize the content of your web pages. Your content must be optimized for the search engines and have optimal usage of your most important relevant keywords and keyword phrases. As you write user friendly content keep in mind you should be optimizing your pages with phrases that best match your overall theme. This is preferred by the search engine algorithms. You can then focus on link popularity and link quality to help drive traffic. More on those two strategies in a moment.

Keyword Optimization - By optimizing your pages with the phrases that best match the overall theme of your site, it will improve the likelihood that users will find your site when searching for content like yours. You should seek out short multi-word phrases unless your keywords are unique. First, find your optimum keywords and determine their popularity. Also, use your top keyword phrases within your meta tags including your title, description, keyword and h1 through h6 meta tags.

Link Popularity - To increase your traffic, you must increase your link popularity. Link popularity is the number of links on the internet that reference to your website. If you are on a budget, link popularity can generally be increased primarily in two ways. The first method is by exchanging links with other web sites with similar content. The second method is publishing articles online that relate to your site, including a link to your site in the article and then publishing the article on as many article directory sites as possible. Employing both methods is the most effective; however, the latter is extremely effective because it creates multiple one-way links back to your site.

Article Publishing - Most webmasters frequently seek out good site content - remember content is king. They either lack the writing skills or lack the innovation or initiative to develop the content themselves. Webmasters with a budget often hire ghost writers. Those without money look to article directories to obtain some of their content. This demand for content by other webmasters creates an opportunity for you to socialize your site. Writing articles that relate to your content and publishing those articles within article directories ultimately disseminates your link onto other webmaster's sites. Think of the potential here. You are getting a one-way link from every site that posts your article. Top search engine optimization gurus exploit this little known strategy to drive their client web sites to top rankings

Link Quality - Remember, link popularity is important, but link quality may be even more crucial. There are two facets to link quality. First, sites that are pointing to your website ideally must have related content. Search engines will give links from sites with related content more credibility. The second component to link quality is the actual words the other webmaster uses in your link. The goal is to ensure the links pointing back to your website include your most relevant keywords in the link title.

Search engine optimization requires a combination of these five elements. Highly optimizing your website content and obtaining high link popularity from quality links will absolutely strengthen your search engine rankings over time. Of course, as with many things, your level of effort at implementing these elements is directly proportional with the results you can expect to get out.

Monday, April 23, 2007

How to optimize your's blog for better ranking.

Now, you should have a blog full with content you have passionately written. It should be a very interesting grapevine for the community of your chosen niche, as opposed to a lifeless factsheet.
However, no matter how delicious your content is, if there is nobody to read it you can’t generate profit from it. Traffic is the lifeblood of your blog. In order to attract people, you must offer attractive information. Simple enough.
However, to get traffic onto your site, you have to think backwards. Where do people look when they need information? Yes, they search using search engines like, and, to name a few more popular ones. So, to get these people on your blog, your blog needs to rank high on search result pages of these search engines. When these people search for information through the search engines and see your site among the top results, they will naturally click through to your blog! The art of getting your blog or website onto high rankings on search result pages is called search engine optimization. It is a very complex and hard subject to master, but that doesn’t stop us from learning simple yet effective techniques to conquer the search results for certain keywords. The more complex techniques are usually needed to fight for very competitive and general keywords such as “fat loss”, but I’ll teach you how to overcome that later. For now, let’s determine the keywords that you want to optimize your site for. For example, your blog talks about tech gadgets. Now, you’d want to check in Google whether it is a very competetive keyword. At this time of writing, there are 29, 000 ,000 search results. Think you can beat 29, 000, 000 sites at your first attempt? I don’t think so.

Now, let’s try to narrow down our scope. Let’s look for “technological gadgets” instead. At this time of writing, Google lists 792, 000 results. That’s more manageable, but you’d like to search for more focused keywords. However, let’s optimize your blog for “technological gadget” just for the sake of learning.
First, you have to pay attention to the title of your blog. Since you’re optimizing for technological gadgets, you need to have that exact phrase in your blog title. For example, a line like “Your Best Technological Gadget Blog!” would work great. You can change the title of your blog in the Blogger control panel or the Wordpress blog when you’re creating it. If you’re proficient with HTML, you can even do that on other blog engines like Moveable Type. Bottom line? Learn a little HTML!
Other than that, your page heading should also contain the term you’re optimizing for. The page heading is the bit of text in your code that is enclosed within the and tags. This is important as it tells the search engines what your page is about (in this case, “technological gadgets”). Since we’re posting a blog, the tags are usually the post titles, so remember to include the term there whenever relevant.
One last bit, you should also sprinkle the words “technological gadgets” in your posts whenever possible. The frequent occurrence of that phrase in your blog will hint the search engines that your blog is really relevant to that topic.

However, this is the most important bit of all. Always keep in mind that you’re writing for real life people who read your blog to obtain information, so it is very stupid to spam your blog with keywords! In fact, if you do that, the search engines will end up thinking you’re spamming and drop your ranking further down into oblivion… So keep in mind! Write for humans, not search engines!

Restart Your PC automagically

Here's how you can set up a restart button on your desktop:

1. Create a shortcut (Right-click on desktop, select New > Shortcut).

2. For location, type the following:

shutdown -r -t 0

3. Click Next, enter a name for the shortcut ("Restart" is appropriate), and click Finish.

When you click your Restart shortcut, Windows XP will reboot *automagically*!

The "-r" switch tells XP to reboot. If you'd like the shortcut to shut off your PC instead, change it to "-s"; to simply log off, change it to "-l". The "-t 0" sets the timeout (in seconds), so up this value if you find the need for it. To force running applications to close, add "-f" -- be careful with this one!

For more information on Shutdown, type "shutdown" in a command prompt window (Start > All Programs > Accessories > Command Prompt), or search for Shutdown in Windows XP's Help and Support Center.

3 Column K2 Templates for blogspot

This is an K2 clone with 3 columns template for blogspot.
- 3 columns
- fixed width : 880 pixels
- navigation bar
- clickable post title
- clean look
-fast loading



Hey! I have just found this cool info. You can post your blog on Mylot too to improve your traffic and earn some money too.

myLot User Profile

4 ways to improve your link popularity

Link popularity one of the most important factors for search engines when calculating their rankings for any particular query. Of course the term entered into the search box should be represented on the returned pages, but link popularity will be a big part of that calculation. Gaining link popularity isn’t hard, but it can be time consuming. Look at the options, and decide what you need to do to climb the search engines.

Trying to gain link popularity - without focus on relevance - is heavily debated, but many SEO theorists claim it to be of very high importance. Deciding for a linking strategy, and following it, is excellent for following up your strategy, and to improve it if necessary. As mentioned, there are plenty of ways of gaining link popularity, all more or less effective. Some options available will give you an excellent opportunity to actually gain relevant links while focusing on link popularity.

Submitting to various web directories

Submitting your site to web directories is a good way of getting more inbound links for free. There are many directories accepting free submissions, and even more directories available if you reciprocate their link. The amount of directories, and it’s time consuming nature, will make this option a full time job for a few week, but the results won’t wait. A very viable option, and something every webmaster should include in her strategy, is to submit your site to as many high PR directories possible. The high PR, and the obvious relevance, will give you a few very good links at little or no cost. This is a good long-term strategy. Submitting to a few directories on a daily basis will give you a steady flow of new, relevant backlinks.

Exchanging links

Exchanging links with other webmasters is a fairly easy way of getting your inbound links, but the downside is you won’t get many one-way links at all. The variety of options in the link exchange business makes it highly likely to find an alternative fitting both your wallet and demands. Many services offer completely automated link exchanges, thus leaving you with more time to improve your website, conversion ratio or to increase your one-way links from directories or article submissions.

Writing and submitting articles

Writing articles is perhaps the best way to gain both link popularity and highly relevant links. Because it is you who are writing the whole page, you can cram in just about any keyword you want. The number of article directories accepting submissions will make every article count, no matter how few people actually seeing it. This is a very good way of gaining backlinks, but it can be hard to come up with enough material to make it to the top. It can also prove difficult for non-native English speakers, but with a good text editor and a lot of patience, it should not be impossible.

Using link-bait

Many webmasters create pages only to attract inbound links. This can be done in a number of ways, often with a useful and extensive list of something (i.e. web directories, article directories etc.) or free software of some kind. For people with no programming skills, there are plenty of ways of finding free software with the right to sell – or give it away. Creating a good link-bait page can give you a huge amount of new links, and if you are lucky the number of links to that page will only grow over time. Once you have made the page, you often need to get the ball rolling by posting the link on your favorite forum etc. Once people see it, they will post it on their forums, mail it to friends or even add it to their page.

Using any of these methods will surely move your link popularity in the right direction, but it is advised you try to utilize as many ways you can, as it will be both faster and more effective.

How did I discover a dishonest employee? – With a Nokia Spy Phone.

Hard work and strength of mind is what earned me my own business today. From a very young age this was a goal that I had set out to achieve. I had spent many years working towards my dream, chopping and changing jobs just to earn a living. Finally my break came. I had finally achieved my target of owning by own business of many hard years of work. It was now my chance to be the manager. I was always brought up in life that you should work hard for your money – apparently some people are not!

It all started last fall. I was whistling away inventorying new stock when I noticed several things were gone. I always kept strict records when it came to stock inventory so I knew for a fact something was not right. The count did not add up. Now, in the day-to-day operation of owning a business, things can and will come up missing. But this was more than normal; this was above and beyond simple common mistakes.!

I never expected anyone within my business would pocket from me. After all I had employed each and every one of them. I trusted them with my livelihood. They all seemed so nice and down to earth, but apparently not. I know for a fact that I was not misguided with my figures but how would I be able to prove it??

I was told by some about a company that sold Spy Phones. They help deal with software that helps you catch workers from stealing. They had a very large variety of software to choose from. The software ranges from listening devices to text messaging services. This was how I was going to catch my dishonest employee.!

I used the Spy Phone Software so I could listen in on any outgoing or incoming phone calls from this untrustworthyworker. The set up for the phone was a snap and soon I heard things that made my blood boil. Not only was my worker pocketing, they were giving these items to the competition! I was taken aback. They were planning on stealing from me and then using my own business model to make me go out of business.

It could’ve been a long and drawn out situation trying to find my disloyal worker, but thanks to the Spy Phone I was able to get it resolved as soon as possible. It was an extremely easy process to bugging the device and even easier to get rid of my dishonest worker. I can now feel positive again that nobody will rob from me again.

Sunday, April 22, 2007

Upgrading To Windows Vista

As the Microsoft's Widows Vista operating system continues to make its mark in the marketplace, computer users around the globe are anticipating the increased hardware requirements that the system will need. Graphics cards, increased CPU size, and larger RAM requirements are just a few of the many areas that experts are warning users about. This is especially noteworthy for businesses, who will likely be forced to make the upgrade in order to remain competitive whether they want to or not. The issue, says Cari Diaz of Fast-Teks' On-Site Computer Service, is less focused on the Vista system itself than it is on installation.

Fast-teks is a nationwide, on-site computer service company which specializes in both residential and business hardware installation and maintenance. Companies such as Fast-teks have put together several recommendations for consumers interested in running the Windows Vista system, many of which are aimed at upgrading existing systems on PC's.

  1. Download and run Windows Upgrade Advisor. The Upgrade Advisor examines a computer and provides a summary of the Windows Vista versions that can be run on that computer. The report is also convenient to have on-hand to show your installation professional.
  2. Check your CPU. Anything below 800 MHz is too low for Windows Vista to run properly. Your local Fast-teks technician can advise you on upgrades if you fall below minimum requirements.
  3. Examine your computer's memory. 512 MB of RAM is minimum; most users will want at least 1 GB of system RAM to adequately run Vista. Fast-teks can assist in choosing a memory upgrade, and can have it installed on your computer within minutes.
  4. Verify hard drive capacity on your computer. Windows Vista requires a hard drive of at least 40 GB in size, including 15 GB of free space.
  5. Check your graphics adapter. "Many people are unfamiliar with graphics adapters," says Diaz, "which is unfortunate because a big requirement of Vista is the graphics portion of the program. Fast-teks can assess your computer and provide adequate upgrades in order to eliminate any confusion."
  6. Look for a DVD drive on your computer. If you don't have one, you won't be able to install Windows Vista. If you don't have one, however, there's no need to fret. "DVD drives are something that our technicians can install at a relatively small cost," says Diaz.
  7. Back up your data. According to experts, this is one of the most important (and often overlooked) steps when upgrading a system. "This is where we shine," states Diaz. "We provide complete data protection solutions for both businesses and individuals at a relatively small cost."

Google Logo On Earth Day

Isn't that cool and chilly??

Saturday, April 21, 2007

How things Work: GPS locator

Down here an example would be a Telstra mobile customer changing over to the Optus network and being able to keep the same number.

All GSM mobile phones have an International Mobile Equipment Identity (IMEI) number (like a serial number) that is transmitted along with the SIM number when a phone is active. If a mobile phone is stolen or mislaid, the IMEI can be "banned", meaning that even if a different SIM is placed in the phone, it still won't connec
t to the network. Tracking of mobile phones can be done via the SIM or the IMEI. That is done by triangulating network base stations (see below). You can find a couple of good explanations at these 2 links: What is triangulation? - a definition from & Triangulation method of location cell phones.

GPS is the next step. Built into each modern phone is a GPS locator. So, by using the GPS locator instead of the SIM or IMEI, the phone can be more accurately traced to within a few metres of it's actual location.

on See a GPS Amazon

I recieved my payment from ADbux

I have just recieved $5 from Adbux. This isn't much, but it certainly boosts your confidence when you get something for doing so less. Well it is fast. I joined it 7 days back and I didn't expect that I will earn this much fast. This will add upto my website fund.

Friday, April 20, 2007

Google is going the MSN way

Google is removing all the backlinks to sites from its database. I
think they are going the msn way or they are 'revolutionising' the
search AGAIN!! They might have come up with an AWESOME new algorithm
which's impossible to tweak.
We all tend to blame google for being so strict on its policies, but
the fact is, since google has become popular, every tom, dick and
harry wanted to screw google's ass. People are having complex about
google's success. They always try to find a way so that they can screw
But, the reality is that, all these things are leading google to
perfection. Now google is dominating the internet market through its
adsense campaign. Larry and Sergey are reaping gold from their
ingenious ideas.
Everyone else is jealous. Why?
Just think....

World's Biggest Dog

Hercules: The World's Biggest Dog Ever According to Guinness World Records
Hercules was recently awarded the honorable distinction of Worlds Biggest Dog by Guinness World Records.
Hercules is an English Mastiff and has a 38 inch neck and weighs 282 pounds.
With "paws the size of softballs" (reports the Boston Herald), the
three-year-old monster is far larger and heavier than his breed's
standard 200lb. limit. Hercules owner Mr. Flynn says that Hercules
weight is natural and not induced by a bizarre diet: "I fed him normal
food and he just grew".... and grew. and grew. and grew.

Thursday, April 19, 2007

Dear Mr. Bill Gates

This is a really funny letter from the Indian joker Santa Singh to our
Mr. Bill Gates.
Thought of sharing it with my readers. Read it, you will definitely
enjoy it

Dear Mr. Bill Gates,

This letter is from Santa Singh from Punjab. We have bought a computer
for our home and we found problems, which I want to bring to your

1. After connecting to internet we planned to open e-mail account and
whenever we fill the form in Hotmail in the password column, only ******
appears, but in the rest of the fields whatever we typed appears, but we
face this problem only in password field. We checked with hardware
vendor Santa Singh and he said that there is no problem in keyboard.
Because of this we open the e-mail account with password *****. I
request you to check this as we ourselves do not know what the password

2. We are unable to enter anything after we click the 'shut down '

3. There is a button 'start' but there is no "stop" button. We request
you to check this.

4. We find there is 'Run' in the menu. One of my friend clicked 'run '
has ran upto Amritsar! So, we request you to change that to "sit", so
that we can click that by sitting.

5. One doubt is that any 're-scooter' available in system? As I find
only 're-cycle', but I own a scooter at my home.

6. There is 'Find' button but it is not working properly. My wife lost
the door key and we tried a lot for tracing the key with this ' find',
but unable to trace. Is it a bug??

7. Every night I am not sleeping as I have to protect my 'mouse' from
CAT, So I suggest u to provide one DOG to kill that cat.

8. Please confirm when u are going to give me money for winning 'HEARTS'
(playing cards in games) and when are u coming to my home to collect ur

9. My child learnt 'Microsoft word' now he wants to learn 'Microsoft
sentence', so when u will provide that?

Best regards,

Santa Singh....................

Blog is screwed A bit

Hey guys, My blog is a bit screwed cause i was trying some new templates. Please Don't Mind that. I will soon build it back. there might be some glitches. Love you all



I Love you

Wednesday, April 18, 2007

Sites Where You Can Earn Money

More and more people are blogging today. It's becoming popular around the world. What is good with it is you can blog just about anything you want to talk about. Your life, day to day activities, friends, acquaintances, academic matters, small to big businesses, real estate and a lot more topics that you encounter everyday. You have freedom of expression and the rules aren't that strict. It's been a good way to make money online too.

I've started blogging on MyLot and I've found it very entertaining and profitable. MyLot is a good way to earn money without investing and membership is free. When you refer your friends, you get commission from their earnings. It also has a very friendly environment. It is for this reason that I started to scout on the net for other paid to blog sites. It wasn't easy at the start but after visiting blogs, forums and search engines, I was able to join in a lot of them. I made my own list and thought that maybe it's better to include it in my blog so I could help other individuals who want to work online, either to keep themselves busy, a part time job or later on a full time online job.

Another such site is senserely which share its online revenue with you using adsense.

There are some sites which pay you for doing your routine works using their services. One such site is Slashmysearch.
It pays you for searching using its cool search engine. Isn't that cool? You can use it for searching what you are looking for and you will be paid for it. cool na?

A site which pays you for clicking on ads is Adbux . This one is pretty original and payout is also low i.e. $5 which can be credited to your paypal account.

Globalcashclicks is a same sort of site which pays you for clicking on ads and have minimal payout of $1. Which is really cool..

Wordlinx is a similar website but sometimes payments are quite low and sometimes there are no ads to click:(

Another help for ABAPpers

Hey you can use this template for ALV

use "REUSE_ALV_GRID_DISPLAY" function to show itab below.
I calculated Z fields as X/Y*100
Customer X Y Z
1 1 2 50
2 3 4 75
3 2 5 40
4 1 10 10

When I set grid to show totals by customer It works like that.

Customer X Y Z
1 1 2 50
2 3 4 75
3 2 5 40
4 1 10 10
TOTAL 7 21 175


*& Report ZALVTEST1 *
*& *
*& *
*& *


Data: v_temp type p decimals 2.
Data: v_f1_sum type i,
v_f2_sum type i.
dATA: BEGIN OF struct_customer,
field3 type i,
END OF struct_customer.



field3 type i,
field3 type i,





* text
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM FILL_ITAB . DATA: L_CTR TYPE I. ITAB-CUSTOMER = 1.ITAB-FIELD1 = 1.ITAB-FIELD2 = 2.APPEND ITAB. CLEAR ITAB. ITAB-CUSTOMER = 2.ITAB-FIELD1 = 3.ITAB-FIELD2 = 4.APPEND ITAB. CLEAR ITAB. ITAB-CUSTOMER = 3.ITAB-FIELD1 = 2.ITAB-FIELD2 = 5.APPEND ITAB. CLEAR ITAB. ITAB-CUSTOMER = 4.ITAB-FIELD1 = 1.ITAB-FIELD2 = 10.APPEND ITAB. CLEAR ITAB. LOOP AT ITAB. v_temp = itab-field1 / itab-field2. itab-field3 = v_temp * 100. modify itab. V_f1_sum = v_f1_sum + itab-field1. V_f2_sum = v_f2_sum + itab-field2. ENDLOOP. ENDFORM. " FILL_ITAB *&---------------------------------------------------------------------* *& Form FILL_CAT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM FILL_CAT . DATA: L_FIELDCAT TYPE SLIS_FIELDCAT_ALV. CLEAR L_FIELDCAT. L_FIELDCAT-COL_POS = 1. L_FIELDCAT-TABNAME = 'ITAB'. L_FIELDCAT-FIELDNAME = 'CUSTOMER'. L_FIELDCAT-REF_TABNAME = 'KNA1'. L_FIELDCAT-REF_FIELDNAME = 'KUNNR'. L_FIELDCAT-KEY = 'X'. APPEND L_FIELDCAT TO I_FIELDTAB. CLEAR L_FIELDCAT. CLEAR L_FIELDCAT. L_FIELDCAT-COL_POS = 3. L_FIELDCAT-TABNAME = 'ITAB'. L_FIELDCAT-FIELDNAME = 'FIELD1'. * L_FIELDCAT-DO_SUM = 'X'. L_FIELDCAT-No_zero = 'X'. L_FIELDCAT-seltext_l ='VALUE1'. L_FIELDCAT-seltext_M ='VALUE1'. L_FIELDCAT-seltext_S ='VALUE1'. * L_FIELDCAT-KEY = 'X'. APPEND L_FIELDCAT TO I_FIELDTAB. CLEAR L_FIELDCAT. L_FIELDCAT-COL_POS = 4. L_FIELDCAT-TABNAME = 'ITAB'. L_FIELDCAT-FIELDNAME = 'FIELD2'. * L_FIELDCAT-DO_SUM = 'X'. L_FIELDCAT-No_zero = 'X'. L_FIELDCAT-seltext_l ='VALUE2'. L_FIELDCAT-seltext_M ='VALUE2'. L_FIELDCAT-seltext_S ='VALUE2'. * L_FIELDCAT-KEY = 'X'. APPEND L_FIELDCAT TO I_FIELDTAB. CLEAR L_FIELDCAT. L_FIELDCAT-COL_POS = 5. L_FIELDCAT-TABNAME = 'ITAB'. L_FIELDCAT-FIELDNAME = 'FIELD3'. * L_FIELDCAT-DO_SUM = 'X'. L_FIELDCAT-No_zero = 'X'. L_FIELDCAT-seltext_l ='VALUE3'. L_FIELDCAT-seltext_M ='VALUE3'. L_FIELDCAT-seltext_S ='VALUE3'. APPEND L_FIELDCAT TO I_FIELDTAB. ENDFORM. " FILL_CAT *&---------------------------------------------------------------------* *& Form DISPLAY_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text

*& Form SET_SORT
* text
* --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM SET_SORT . I_LAYOUT-ZEBRA = 'X'. DATA: LS_SORT TYPE SLIS_SORTINFO_ALV. CLEAR LS_SORT. LS_SORT-SPOS = 1. LS_SORT-FIELDNAME = 'CUSTOMER'. LS_SORT-TABNAME = 'ITAB'. LS_SORT-UP = 'X'. APPEND LS_SORT TO RS_SORT. ENDFORM. " SET_SORT *&---------------------------------------------------------------------* *& Form FILL_EVENT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text
* <-- p2 text *----------------------------------------------------------------------* FORM FILL_EVENT . DATA: L_I_EVENT TYPE SLIS_ALV_EVENT. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = I_EVENTS. READ TABLE I_EVENTS WITH KEY NAME = SLIS_EV_AFTER_LINE_OUTPUT INTO L_I_EVENT. IF SY-SUBRC = 0. MOVE FORMNAME_AFTER_LINE_OUTPUT TO L_I_EVENT-FORM. MODIFY I_EVENTS FROM L_I_EVENT INDEX SY-TABIX. ENDIF. ENDFORM. " FILL_EVENT *&---------------------------------------------------------------------* *& Form AFTER_LINE_OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM LINE_OUTPUT using RS_LINEINFO TYPE SLIS_LINEINFO. DATA: L_TABIX LIKE SY-TABIX. DATA: L_TABIX1 LIKE SY-TABIX. data: str_kunnr like struct_customer. check RS_LINEINFO-tabindex ne 0. L_TABIX = RS_LINEINFO-tabindex. read table itab index l_tabix. l_tabix1 = RS_LINEINFO-tabindex + 1. struct_customer-customer = itab-customer. read table itab into str_kunnr index l_tabix1 transporting customer. if sy-subrc <> 0.

v_temp = ( v_f1_sum / v_f2_sum ) * 100.

uline at (45).


uline at (45).

write: / sy-vline , 'Total',
12 sy-vline , (9) v_f1_sum,
23 sy-vline , (9) v_f2_sum,
34 sy-vline , (9) v_temp decimals 0,
45 sy-vline.

*uline at (46).



Tuesday, April 17, 2007

Sites of the day

Adbux allows you to earn money by clicking on the ads they shoew you for 15 seconds.
The great thing about this is that you get paid $0.01 per page viewed and you get paid the same amount if your referrals view the pages too.

They have low payout of 5 bucks which can be credited to your Paypal account.

SlashMySearch allows you to earn money for searching through its search engine. You have to search genuinely cause it won't pay you for click but for your activity within the site. you have cool offers and payout is $25. We all use some search engine for searching. Why not this. Moreover its collabrated with snap, which allows you to see a snapshot of the site you are going to visit. A cool google alternative.

Why I feel sleepy in my office??

Now I came to know

The Reason lies here

I am just bringing a meaning to the word

About Sarah-Jane Dias

This year, Sarah Jane Dias has been crowned Miss India World 2007. She is also the official winner of this year’s Miss India beauty contest. Twenty four years old Sarah Jane Dias is a model and VJ in Channel [V]. Sarah Jane studied at Wadi Al Kabir in Oman. She then studied in another Indian School for two years. During her school years, Sarah enjoyed theatre and music and participated in various competitions. In 1995, Sarah won Miss India Oman.

Sarah’s family was very happy with her achievements. Sarah’s father, Eustace Dias, is a marketing manager in an oil company in Muscat. He expected his daughter to be in the top three. He said that it was her childhood dream to participate in Miss India contest and as a father he always supported her. Sarah’s sister, Ellen-Rose Dias was also very proud with Sarah’s achievements.

Sarah wants have a career in music and food and wants to travel around the world. Addictive to food and forgiving nature, Sarah likes dancing, singing, and traveling.
During the three weeks training period, Sarah Jane Dias was in big trouble because of her physique. She successfully overcame the challenge.

One of the crucial points for Sarah winning the contest was the question answer session. Sarah Jane was asked “If you had to convince a rural woman to participate in the Miss India contest, how you would do it?” she said, “I would prompt her that she possesses every quality to be Miss India. And if she wins, she would bring numerous improvements in her village that will make her win indispensable."
After hearing her name Sarah Jane could not believe that she became the winner. I am quoting from Times of India:
Teary-eyed and bewildered, 23-year-old Sarah-Jane said, "When they announced my name, for a moment, I couldn't breathe and the earth beneath my feet just felt swept away. I quickly gained my composure and hurriedly moved on to be crowned, lest it went to someone else," she giggled amidst sobs.
The victory was also special for her because it was Easter Sunday. According to Sarah, it could not have been more pleasant and she wanted to wear this crown forever.
Some more information about Sarah Jane Dias:

Real name: Sarah-Jane Dias

Nick name: KiKi. Her friends also call her Goosey.

Zodiac sign: Sagittarius.

First word after her birth: Who turned off the music?

Favorite actors: Hugh Jackman, Tay Diggs, Brad Pitt, Colin Farrell, Will Smith, Orlando Bloom.

Favorite superhero: Cheetara from Thunder Cats.

Favorite game: Basketball.

Favorite player: Jordon baby!!!

Favorite band: Sting.


Review of Miss India 2007 Official Website

After two days, the final competition of Pantaloons Femina Miss India 2007 will take place. It is the most popular beauty contest in India. As the competition is ahead, people will search about the show and the contestants. The official website of Miss India is the best place to find all about the competition. Here is a review of the website. The website is powered by
Web address: website would work best in Internet explorer. The main feature of this website is that it is very simply designed and does not contain many images. So the page takes short time to upload. The yellow colored masthead contains the contest logo and pictures of four finalists. The information is given in two columns below the mast head.

This page is empty. I do not know when they would give information. May be when the competition is over.

Photo Gallery: The photo gallery link would take you to the India Times photo gallery of Pataloons’ Femina Miss India 2007. You would find pictures of the contestants and the judges taken during various events. To see the pictures you need to register India Times.

Celebrity Snippets: An interesting section containing two articles: Trivia and Celebrity quotes. The Trivia article contains interesting information about former Miss India winners. In the celebrity quotes, you would find what other Indian film and television actors and other professionals related to glamour world think about Miss India.

Regional Round-up: In this section you would find two articles and a photo slideshow of the regional round of Miss India contest.

Daily Round-up: Contains three articles: the presentation ceremony of twenty five finalists, announcement of the expert panel, and about Pantaloons and Femina jointly organizing this year Miss India competition.

Astro Bytes: I like this section because it talks about the twelve zodiac signs.
Pageant Archives: This section is dedicated to former Miss India winners who left their marks in various fields.

Contestant Profile: Contains all the information about the twenty five finalists of Pantaloons’ Femina Miss India 2007. You can also get information about SMS voting.
Chat Transcripts: See what the experts involved in the contest and contestants say about the competition.

Still pictures, videos and picture gallery: A beauty contest website without pictures and picture galleries is unthinkable. You will find picture of the day, picture gallery, wallpapers, videos in the second column.
Designers, Nutritionist and Trainers: These people can be compared to the sculptors who chips off the rough ages and makes the contestants look more beautiful, bright, and shining. These pages would give you information about the designers, trainers, and other experts involved in Miss India 2007 contest.

So far, the website is well designed but there are few minor glitches. Some sections like, 'Rules' do not contain any information. There are some images that do not open up. These problems should be taken care of.


Monday, April 16, 2007

Turn NOTEPAD into a dairy!

Here is a real cool tip for people who use notepad to write down any info on a day to day basis... It simply serves as a virtual diary!

  • Open a notepad and type .LOG (case sensitive) as the first line.

  • Save and close the file.

  • Double-click the file to open it and notice that Notepad appends the current date and time and places the cursor on the next line.

  • Type your notes and then save and close the file. Each time you open the file, Notepad repeats the process, appending the time and date and placing the cursor below it

The Hidden Influencers of Digg

A new generation of hidden influencers is taking root online, fueled by a love affair with a growing number of Digg-like websites that let users vote on their favorite submissions. These sites are the next wave in the social networking craze - popularized by MySpace and Facebook, writes The Wall Street Journal.
Digg is one of the most prominent of these sites, which are variously labeled social bookmarking or social news. Others include (recently purchased by Conde Nast), (bought by Yahoo), and Netscape relaunched last June with a similar format.
To find the key influencers, the Wall Street Journal analyzed more than 25,000 submissions across six major sites. At Digg, which has 900,000 registered users, 30 people were responsible for submitting one-third of postings on the home page.
The hidden influencers of these sites are often ordinary people who vote on hundreds of pieces of web content daily. For example, 18-year-old Smaran Dayal, a high-school student who submits some 40 stories a week on Digg, has become a go-to source there for news about Apple.
These influencers are now getting offers by marketers to vote on products and services. Though, companies like Digg are fighting back against Payola schemes, tracking and kicking off influential users who are caught 'digging' for cash.


Keyboard Tracker

A new device has been introduced to the marketplace that is a huge danger to anyone who uses a PC that is not theirs. It is known as a key tracker and it sits between the keyboard and the PC. As can be seen in the pictures it is very discreet but is probably one of the most dangerous items of equipment to personal information that is readily available. These devices record every key that is pressed on the keyboard. Due to it's position (it sits between the keyboard and the PC) the information is logged by the tracker before the PC knows about it and as such is very difficult for the PC to detect. They are available in both USB and PS2 formats so pretty much any PC can be logged. The user puts the tracker in line, leaves it there for a set amount of time and then retrieves it. They can then download the data onto their own PC.

If you intend to use a PC that is not yours (ie hotel business centre, internet café, airport etc) I would advise looking at the back of the PC to see if one of these trackers has been placed in line (scrambling under a desk is the better alternative to losing your email details). If you cannot get to see the back of the PC, I would suggest you don't use it for anything personal. If a tracker is there and you do not notice it, whoever placed it there (could be any user of that PC before you) will be able to recall all of your keystrokes - logins, passwords etc.
These trackers cost less than £30 and they are definitely out there already.


What do graphic designers do when they get bored?

They do all this sort of stuff.
Really cool Pictures

The New Titanic

Here are the Pics of "Explorer of the seas"

Investors: Avoid These 5 Common Tax Mistakes

Today I thought of publishing an article on Investments. Well Its not cool to have money that you can't invest. but before investing somewhere, please read through this so that you won't feel bad about your decision.

For many investors, and even some tax professionals, sorting through the complex IRS rules on investment taxes can be a nightmare. Pitfalls abound, and the penalties for even simple mistakes can be severe. As April 15 rolls around, keep the following five common tax mistakes in mind - and help keep a little more money in your own pocket.
1. Failing To Offset Gains
Normally, when you sell an investment for a profit, you owe a tax on the gain. One way to lower that tax burden is to also sell some of your losing investments. You can then use those losses to offset your gains.
Say you own two stocks. You have a gain of $1,000 on the first stock, and a loss of $1,000 on the second. If you sell your winning stock, you will owe tax on the $1,000 gain. But if you sell both stocks, your $1,000 gain will be offset by your $1,000 loss. That's good news from a tax standpoint, since it means you don't have to pay any taxes on either position.
Sounds like a good plan, right? Well, it is, but be aware it can get a bit complicated. Under what is commonly called the "wash sale rule," if you repurchase the losing stock within 30 days of selling it, you can't deduct your loss. In fact, not only are you precluded from repurchasing the same stock, you are precluded from purchasing stock that is "substantially identical" to it - a vague phrase that is a constant source of confusion to investors and tax professionals alike. Finally, the IRS mandates that you must match long-term and short-term gains and losses against each other first.
2. Miscalculating The Basis Of Mutual Funds
Calculating gains or losses from the sale of an individual stock is fairly straightforward. Your basis is simply the price you paid for the shares (including commissions), and the gain or loss is the difference between your basis and the net proceeds from the sale. However, it gets much more complicated when dealing with mutual funds.
When calculating your basis after selling a mutual fund, it's easy to forget to factor in the dividends and capital gains distributions you reinvested in the fund. The IRS considers these distributions as taxable earnings in the year they are made. As a result, you have already paid taxes on them. By failing to add these distributions to your basis, you will end up reporting a larger gain than you received from the sale, and ultimately paying more in taxes than necessary.
There is no easy solution to this problem, other than keeping good records and being diligent in organizing your dividend and distribution information. The extra paperwork may be a headache, but it could mean extra cash in your wallet at tax time.
3. Failing To Use Tax-managed Funds
Most investors hold their mutual funds for the long term. That's why they're often surprised when they get hit with a tax bill for short term gains realized by their funds. These gains result from sales of stock held by a fund for less than a year, and are passed on to shareholders to report on their own returns -- even if they never sold their mutual fund shares.
Recently, more mutual funds have been focusing on effective tax-management. These funds try to not only buy shares in good companies, but also minimize the tax burden on shareholders by holding those shares for extended periods of time. By investing in funds geared towards "tax-managed" returns, you can increase your net gains and save yourself some tax-related headaches. To be worthwhile, though, a tax-efficient fund must have both ingredients: good investment performance and low taxable distributions to shareholders.
4. Missing Deadlines
Keogh plans, traditional IRAs, and Roth IRAs are great ways to stretch your investing dollars and provide for your future retirement. Sadly, millions of investors let these gems slip through their fingers by failing to make contributions before the applicable IRS deadlines. For Keogh plans, the deadline is December 31. For traditional and Roth IRA's, you have until April 15 to make contributions. Mark these dates in your calendar and make those deposits on time.
5. Putting Investments In The Wrong Accounts
Most investors have two types of investment accounts: tax-advantaged, such as an IRA or 401(k), and traditional. What many people don't realize is that holding the right type of assets in each account can save them thousands of dollars each year in unnecessary taxes.
Generally, investments that produce lots of taxable income or short-term capital gains should be held in tax advantaged accounts, while investments that pay dividends or produce long-term capital gains should be held in traditional accounts. For example, let's say you own 200 shares of Duke Power, and intend to hold the shares for several years. This investment will generate a quarterly stream of dividend payments, which will be taxed at 15% or less, and a long-term capital gain or loss once it is finally sold, which will also be taxed at 15% or less. Consequently, since these shares already have a favorable tax treatment, there is no need to shelter them in a tax-advantaged account.
In contrast, most treasury and corporate bond funds produce a steady stream of interest income. Since, this income does not qualify for special tax treatment like dividends, you will have to pay taxes on it at your marginal rate. Unless you are in a very low tax bracket, holding these funds in a tax-advantaged account makes sense because it allows you to defer these tax payments far into the future, or possibly avoid them altogether.

Interview With God

This may make you to think about what you are doing

Sunday, April 15, 2007

Some Reviews about my site

I got some reviews from I couldn't help posting them..................I'm so happy that someone is taking time to review my blog. Thanks a lot buddies


2. 2007-04-11 18:43:15 Johnhttp://www.ginzotechsolutions.comGreat blog. This guy really spends some time adding content. A lot of blogs only have a couple articles, but this one is loaded. great job!.

3. 2007-04-11 15:08:40 busanbillhttp://www.billteacher.infoI love it! You've haven't left anything out The latest news, saw the 2008 stadium in Bejing China Saw the child prodigy who has already performed surgery at 11 yrs Amazing stuff and all in your blog Your blog really is the blog that says it all It shows that you are having fun too!

Callback and Subclassing

Well today I thought of writing something which could be of some use to someone. So I thought of writing on one of my faviorite subjects......Visual Basic. I have been loving VB all my college life because of its ease of use and the power with which it comes. its a really cool language which can help you in getting the most out of a Windows PC. Today i'm gonna write on Callback and subclassing using Windows VB by the means of windows API. Read on......

Windows deals with two types of messages: control messages and notification messages. Although sending a control message is just a matter of using the SendMessage API function, you'll see that intercepting a notification message is much more difficult and requires that you adopt an advanced programming technique known as window subclassing. But in order to understand how this technique works, you need to know what the AddressOf keyword does and how you can use it to set up a callback procedure.

Callback Techniques

Callback and subclassing capabilities are relatively new to Visual Basic, in that they weren't possible until version 5. What made these techniques available to Visual Basic programmers was the introduction of the new AddressOf keyword under Visual Basic 5. This keyword can be used as a prefix for the name of a routine defined in a BAS module, and evaluates the 32-bit address of the first statement of that routine.

System timers

To show this keyword in action I'll show you how you can create a timer without a Timer control. Such a timer might be useful, for example, when you want to periodically execute a piece of code located in a BAS module, and you don't want to add a form to the application just to get a pulse at regular intervals. Setting up a system timer requires only a couple of API functions:

Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent_
As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long

For our purposes, we can ignore the first two arguments to the SetTimer function and just pass the uElapse value (which corresponds to the Interval property of a Timer control) and the lpTimerFunc value (which is the address of a routine in our Visual Basic program). This routine is known as the callback procedure because it's meant to be called from Windows and not from the code in our application. The SetTimer function returns the ID of the timer being created or 0 in case of error:

Dim timerID As Long
' Create a timer that sends a notification every 500 milliseconds.
timerID = SetTimer(0, 0, 500, AddressOf Timer_CBK)

You need the return value when it's time to destroy the timer, a step that you absolutely must perform before closing the application if you don't want the program to crash:

' Destroy the timer created previously.
KillTimer 0, timerID

Let's see now how to build the Timer_CBK callback procedure. You derive the number and types of the arguments that Windows sends to it from the Windows SDK documentation or from MSDN:

Sub Timer_CBK(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal idEvent As Long, ByVal SysTime As Long)
' Just display the system time in a label control.
Form1.lblTimer = SysTime
End Sub

In this implementation, you can safely ignore the first three parameters and concentrate on the last one, which receives the number of milliseconds elapsed since the system started. This particular callback routine doesn't return a value and is therefore implemented as a procedure; you'll see later that in most cases callback routines return values to the operating system and therefore are implemented as functions. As usual, you'll find on the companion CD a complete demonstration program that contains all the routines described in this section.

Windows enumeration

Interesting and useful examples of using callback techniques are provided by the EnumWindows and EnumChildWindows API functions, which enumerate the top-level windows and the child windows of a given window, respectively. The approach used by these functions is typical of most API functions that enumerate Windows objects. Instead of loading the list of windows in an array or another structure, these functions use a callback procedure in the main application for each window found. Inside the callback function, you can do what you want with such data, including loading it into an array, a ListBox or a TreeView control. The syntax for these functions is the following:

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long

Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, _
ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

hWndParent is the handle of the parent window. lpEnumFunc is the address of the callback function. And lParam is a parameter passed to the callback function; this value can be used when the same callback routine is used for different purposes in the application. The syntax of the callback function is the same for both EnumWindows and EnumChildWindows:

Function EnumWindows_CBK(ByVal hWnd As Long, ByVal lParam As Long) As Long
' Process the window's data here.
End Function

where hWnd is the handle of the window found, and lParam is the value passed as the last argument to EnumWindows or EnumChildWindows. This function should return 1 to ask the operating system to continue the enumeration or 0 to stop the enumeration.

It's easy to create a reusable procedure that builds on these API functions to return an array with the handles of all the child windows of a given window:

' An array of Longs holding the handles of all child windows
Dim windows() As Long
' The number of elements in the array.
Dim windowsCount As Long

' Return an array of Longs holding the handles of all the child windows
' of a given window. If hWnd = 0, return the top-level windows.
Function ChildWindows(ByVal hWnd As Long) As Long()
windowsCount = 0 ' Reset the result array.
If hWnd Then
EnumChildWindows hWnd, AddressOf EnumWindows_CBK, 1
EnumWindows AddressOf EnumWindows_CBK, 1
End If
' Trim uninitialized elements and return to caller.
ReDim Preserve windows(windowsCount) As Long
ChildWindows = windows()
End Function

' The callback routine, common to both EnumWindows and EnumChildWindows
Function EnumWindows_CBK(ByVal hWnd As Long, ByVal lParam As Long) As Long
If windowsCount = 0 Then
' Create the array at the first iteration.
ReDim windows(100) As Long
ElseIf windowsCount >= UBound(windows) Then
' Make room in the array, if necessary.
ReDim Preserve windows(windowsCount + 100) As Long
End If
' Store the new item.
windowsCount = windowsCount + 1
windows(windowsCount) = hWnd
' Return 1 to continue the enumeration process.
EnumWindows_CBK = 1
End Function

On the companion CD, you'll find the source code of an application—also shown in Figure A-8—that displays the hierarchy of all the windows that are currently open in the system. This is the code that loads the TreeView control with the window hierarchy. Thanks to the recursion technique, the code is surprisingly compact:

Private Sub Form_Load()
ShowWindows TreeView1, 0, Nothing
End Sub

Sub ShowWindows(tvw As TreeView, ByVal hWnd As Long, ParentNode As Node)
Dim winHandles() As Long
Dim i As Long, Node As MSComctlLib.Node

If ParentNode Is Nothing Then
' If no Parent node, let's add a "desktop" root node.
Set ParentNode = tvw.Nodes.Add(, , , "Desktop")
End If
' Retrieve all the child windows.
winHandles() = ChildWindows(hWnd)
For i = 1 To UBound(winHandles)
' Add a node for this child window--WindowDescription is a routine
' (not shown here) that returns a descriptive string for the window.
Set Node = tvw.Nodes.Add(ParentNode.Index, tvwChild, , _
' Recursively call this routine to show this window's children.
ShowWindows tvw, winHandles(i), Node
End Sub

Subclassing Techniques

Now that you know what a callback procedure is, comprehending how subclassing works will be a relatively easy job.

Basic subclassing

You already know that Windows communicates with applications via messages, but you don't know yet how the mechanism actually works at a lower level. Each window is associated with a window default procedure, which is called any time a message is sent to the window. If this procedure were written in Visual Basic, it would look like this:

Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
End Function

The four parameters that a window procedure receives are exactly the arguments that you (or the operating system) pass to the SendMessage when you send a message to a given window. The purpose of the window procedure is to process all the incoming messages and react appropriately. Each class of windows—top-level windows, MDI windows, TextBox controls, ListBox controls, and so on—behave differently because their window procedures are different.

The principle of the subclassing technique is very simple: You write a custom window procedure and you ask Windows to call your window procedure instead of the standard window procedure associated with a given window. The code in your Visual Basic application traps all the messages sent to the window before the window itself (more precisely, its default window procedure) has a chance to process them, as I explain in the following illustration:

To substitute the standard window procedure with your customized procedure, you must use the SetWindowLong API function, which stores the address of the custom routine in the internal data table that is associated with each window:

Const GWL_WNDPROC = -4
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal ndx As Long, ByVal newValue As Long) As Long

hWnd is the handle of the window. ndx is the index of the slot in the internal data table where you want to store the value. And newValue is the 32-bit value to be stored in the internal data table at the position pointed to by nxd. This function returns the value that was previously stored in that slot of the table; you must store such a value in a variable because you must definitely restore it before the application terminates or the subclassed window is closed. If you don't restore the address of the original window procedure, you're likely to get a GPF. In summary, this is the minimal code that subclasses a window:

Dim saveHWnd As Long        ' The handle of the subclassed window
Dim oldProcAddr As Long ' The address of the original window procedure

Sub StartSubclassing(ByVal hWnd As Long)
saveHWnd = hWnd
oldProcAddr = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub

Sub StopSubclassing()
SetWindowLong saveHWnd, GWL_WNDPROC, oldProcAddr
End Sub

Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' Process the incoming messages here.
End Function

Let's focus on what the custom window procedure actually does. This procedure can't just process a few messages and forget about the others. On the contrary, it's responsible for correctly forwarding all the messages to the original window procedure; otherwise, the window wouldn't receive all the vital messages that inform it when it has to resize, close, or repaint itself. In other words, if the window procedure stops all messages from reaching the original window procedure the application won't work as expected any longer. The API function that does the message forwarding is CallWindowProc:

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long

lpPrevWndFunc is the address of the original window procedure—the value that we saved in the oldProcAddr variable—and the other arguments are those received by the custom window procedure.

Let's see a practical example of the subclassing technique. When a top-level window—a form, in Visual Basic parlance—moves, the operating system sends it a WM_MOVE message. The Visual Basic runtime eats this message without exposing it as an event to the application's code, but you can write a custom window procedure that intercepts it before Visual Basic sees it:

Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' Send the message to the original window procedure, and then
' return to Windows the return value from the original procedure.
WndProc = CallWindowProc(oldProcAddr, hWnd, uMsg, wParam, lParam)
' See if this is the message we're waiting for.
If uMsg = WM_MOVE Then
' The window has moved.
End If
End Function

I've prepared a demonstration program that uses the code described in this section to trap a few messages related to forms, such as WM_MOVE, WM_RESIZING, and WM_APPACTIVATE. (See Figure A-9.) The last message is important because it lets you determine when an application loses and regains the input focus, something that you can't easily do in pure Visual Basic code. For example, the Windows hierarchy utility shown in Figure A-8 might subclass this message to automatically refresh its contents when the user switches to another application and then goes back to the utility.

You can generally process the incoming messages before or after calling the CallWindowProc API function. If you're interested only in knowing when a message is sent to the window, it's often preferable to trap it after the Visual Basic runtime has processed it because you can query updated form's properties. Remember, Windows expects that you return a value to it, and the best way to comply with this requirement is by using the value returned by the original window procedure. If you process a message before forwarding it to the original procedure, you can change the values in wParam or lParam, but this technique requires an in-depth knowledge of the inner workings of Windows. Any error in this phase is fatal because it prevents the Visual Basic application from working correctly.

Of all the advanced programming techniques you can employ in Visual Basic, subclassing is undoubtedly the most dangerous one. If you make a mistake in the custom window procedure, Windows won't forgive you and won't give you a chance to fix the error. For this reason, you should always save your code before running the program in the environment. Moreover, you should never stop a running program using the End button, an action which immediately stops the running program and prevents the Unload and Terminate events from executing, therefore depriving you of the opportunity to restore the original window procedure.

A class for subclassing

Although the code presented in the previous version works flawlessly, it doesn't meet the requirements of real-world applications. The reason is simple: In a complex program, you usually subclass multiple forms and controls. This practice raises a couple of interesting problems:

  • You can't use simple variables to store the window's handle and the address of the original window procedure—as the previous simplified example does—but you need an array or a collection to account for multiple windows.
  • The custom window procedure must reside in a BAS form, so the same procedure must serve multiple subclassed windows and you need a way to understand which window each message is bound to.

The best solution to both problems is to build a class module that manages all the subclassing chores in the program. I've prepared such a class, named MsgHook, and as usual you'll find it on the companion CD. Here's an abridged version of its source code:

' The MsgHook.cls class module
Event AfterMessage(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long, retValue As Long)

Private m_hWnd As Long ' Handle of the window being subclassed

' Start the subclassing.
Sub StartSubclass(ByVal hWnd As Long)
' Terminate current subclassing, if necessary.
If m_hWnd Then StopSubclass
' Store argument in member variable.
m_hWnd = hWnd
' Add a new item to the list of subclassed windows.
If m_hWnd Then HookWindow Me, m_hWnd
End Sub

' Stop the subclassing.
Sub StopSubclass()
' Delete this item from the list of subclassed windows.
If m_hWnd Then UnhookWindow Me
End Sub

' This procedure is called when a message is sent to this window.
' (It's Friend because it's meant to be called by the BAS module only.)
Friend Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long, _
ByVal oldWindowProc As Long) As Long

Dim retValue As Long, Cancel As Boolean
' Call original window procedure.
retValue = CallWindowProc(oldWindowProc, hWnd, uMsg, wParam, lParam)
' Call the application.
' The application can modify the retValue argument, if desired.
RaiseEvent AfterMessage(hWnd, uMsg, wParam, lParam, retValue)
' Return the value to Windows.
WndProc = retValue
End Function

' Stop the subclassing when the object goes out of scope.
Private Sub Class_Terminate()
If m_hWnd Then StopSubclass
End Sub

As you see, the class communicates with its clients through the AfterMessage event, which is called immediately after the original window procedure has processed the message. From the client application's standpoint, subclassing a window has become just a matter of responding to an event, an action very familiar to all Visual Basic programmers.

Now analyze the code in the BAS module in which the subclassing actually occurs. First of all, you need an array of UDTs, where you can store information about each window being subclassed:

' The WndProc.Bas module
Type WindowInfoUDT
hWnd As Long ' Handle of the window being subclassed
oldWndProc As Long ' Address of the original window procedure
obj As MsgHook ' The MsgHook object serving this window
End Type
' This array stores data on subclassed windows.
Dim WindowInfo() As WindowInfoUDT
' This is the number of elements in the array.
Dim WindowInfoCount As Long

The HookWindow and UnhookWindow procedures are called by the MsgHook class's StartSubclass and StopSubclass methods, respectively:

' Start the subclassing of a window.
Sub HookWindow(obj As MsgHook, ByVal hWnd As Long)
' Make room in the array, if necessary.
If WindowInfoCount = 0 Then
ReDim WindowInfo(10) As WindowInfoUDT
ElseIf WindowInfoCount > UBound(WindowInfo) Then
ReDim Preserve WindowInfo(WindowInfoCount + 9) As WindowInfoUDT
End If
WindowInfoCount = WindowInfoCount + 1

' Store data in the array, and start the subclassing of this window.
With WindowInfo(WindowInfoCount)
.hWnd = hWnd
Set .obj = obj
.oldWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
End With
End Sub

' Stop the subclassing of the window associated with an object.
Sub UnhookWindow(obj As MsgHook)
Dim i As Long, objPointer As Long
For i = 1 To WindowInfoCount
If WindowInfo(i).obj Is obj Then
' We've found the object that's associated with this window.
SetWindowLong WindowInfo(i).hWnd, GWL_WNDPROC, _
' Remove this element from the array.
WindowInfo(i) = WindowInfo(WindowInfoCount)
WindowInfoCount = WindowInfoCount - 1
Exit For
End If
End Sub

The last procedure left to be seen in the BAS module is the custom window procedure. This procedure has to search for the handle of the target window of the incoming message, among those stored in the WindowInfo array and notify the corresponding instance of the MsgHook class that a message has arrived:

' The custom window procedure
Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Dim i As Long, obj As MsgHook
Const WM_DESTROY = &H2

' Find this handle in the array.
For i = 1 To WindowInfoCount
If WindowInfo(i).hWnd = hWnd Then
' Notify the object that a message has arrived.
WndProc = WindowInfo(i)obj.WndProc(hWnd, uMsg, wParam, lParam,_
' If it's a WM_DESTROY message, the window is about to close
' so there is no point in keeping this item in the array.
If uMsg = WM_DESTROY Then WindowInfo(i).obj.StopSubclass
Exit For
End If
End Function

The preceding code looks for the window handle in the array using a simple linear search; when the array contains only a few items, this approach is sufficiently fast and doesn't add a significant overhead to the class. If you plan to subclass more than a dozen forms and controls, you should implement a more sophisticated search algorithm, such as a binary search or a hash table.

In general, a window is subclassed until the client application calls the StopSubclass method of the related MsgHook object or until the object itself goes out of scope. (See the code in the class's Terminate event procedure.) The code in the WndProc procedure uses an additional trick to ensure that the original window procedure is restored before the window is closed. Because it's already subclassing the window, it can trap the WM_DESTROY message, which is always the last message (or at least one of the last messages) sent to a window before it closes. When this message is detected, the code immediately stops subclassing the window.

Using the MsgHook class

Using the MsgHook class is pretty simple: You assign an instance of it to a WithEvents variable, and then you invoke its StartSubclass method to actually start the subclassing. For example, you can trap WM_MOVE messages using this code:

Dim WithEvents FormHook As MsgHook

Private Sub Form_Load()
Set FormHook = New MsgHook
FormHook.StartSubclass Me.hWnd
End Sub

Private Sub FormHook_AfterMessage(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long, retValue As Long)
Const WM_MOVE = &H3
If uMsg = WM_MOVE Then
lblStatus.Caption = "The window has moved."
End If
End Sub

If you want to subclass other forms or controls, you have to create multiple instances of the MsgHook class—one for each window to be subclassed—and assign them to distinct WithEvents variables. And of course you have to write the proper code in each AfterMessage event procedure. The complete class provided on the companion CD supports some additional features, including a BeforeMessage event that fires before the original window procedure processes the message and an Enabled property that lets you temporarily disable the subclassing for a given window. Keep in mind that the MsgHook class can subclass only windows belonging to the current application; interprocess window subclassing is beyond the current capabilities of the Visual Basic and requires some C/C++ wizardry.

The MsgHook class module encapsulates most of the dangerous details of the subclassing technique. When you turn it into an ActiveX DLL component—or use the version provided on the companion CD—you can safely subclass any window created by the current application. You can even stop an interpreted program without any adverse effects because the End button doesn't prevent the Terminate event from firing if the class has been compiled in a separate component. The compiled version also solves most—but not all—of the problems that occur when an interpreted code enters break mode, during which the subclassing code can't respond to messages. In such situations, you usually get an application crash, but the MsgHook class prevents it from happening. I plan to release a more complete version of this class, which I'll make available for download from my Web site at

More subclassing examples

Now that you have a tool that implements all the nitty-gritty details of subclassing, you might finally see how subclassing can actually help you deliver better applications. The examples I show in this section are meant to be just hints of what you can really do with this powerful technique. As usual, you'll find all the code explained in this section in a sample application provided on the companion CD and shown in Figure A-10.

Windows sends Visual Basic forms a lot of messages that the Visual Basic runtime doesn't expose as events. Sometimes you don't have to manipulate incoming parameters because you're subclassing the form only to find out when the message arrives. There are many examples of such messages, including WM_MOUSEACTIVATE (the form or control is being activated with the mouse), WM_TIMECHANGE (system date and time has changed), WM_DISPLAYCHANGE (the screen resolution has changed), WM_COMPACTING (Windows is low in memory, and is asking applications to release as much memory as possible), and WM_QUERYOPEN (a form is about to be restored to normal size from an icon).

Many other messages can't be dealt with so simply, though. For example, the WM_GETMINMAXINFO message is sent to a window when the user begins to move or resize it. When this message arrives, lParam contains the address of a MINMAXINFO structure, which in turn holds information about the region to which the form can be moved and the minimum and maximum size that the window can take. You can retrieve and modify this data, thus effectively controlling a form's size and position when the user resizes or maximizes it. (If you carefully look at Figure A-10, you'll see from the buttons in the window's caption that this form is maximized, even if it doesn't take the entire screen estate.) To move this information into a local structure, you need the CopyMemory API function:

X As Long
Y As Long
End Type
ptReserved As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type

Private Sub FormHook_AfterMessage(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long, retValue As Long)
Select Case uMsg
' Windows is querying the form for its
' minimum and maximum size and position.
' Read contents of structure pointed to by lParam.
CopyMemory mmInfo, ByVal lParam, Len(mmInfo)
With mmInfo
' ptMaxSize is the size of the maximized form.
.ptMaxSize.X = 600
.ptMaxSize.Y = 400
' ptMaxPosition is the position of the maximized form.
.ptMaxPosition.X = 100
.ptMaxPosition.Y = 100
' ptMinTrackSize is the minimum size of a form when
' resized with the mouse.
.ptMinTrackSize.X = 300
.ptMinTrackSize.Y = 200
' ptMinTrackSize is the maximum size of a form when
' resized with the mouse (usually equal to ptMaxSize).
.ptMaxTrackSize.X = 600
.ptMaxTrackSize.Y = 400
End With
' Copy the data back into the original structure in memory.
CopyMemory ByVal lParam, mmInfo, Len(mmInfo)
' Return 0 to say that the structure has been modified.
retValue = 0
End Select
End Sub

By subclassing the WM_MENUSELECT message, you can add a professional touch to your application. This message fires whenever the user highlights a menu item using the mouse or arrow keys, and you can employ it for displaying a short explanation of the menu item, as most commercial programs do (as shown in Figure A-10). The problem with this message is that you have to process the values stored in wParam and lParam to extract the caption of the highlighted menu item:

' Put this code inside a FormHook_AfterMessage event procedure.
' The menu item identifier is in the low-order word of wParam.
' The menu handle is in lParam.
Dim mnuId As Long, mnuCaption As String, length As Long
mnuId = (wParam And &HFFFF&)
' Get the menu caption.
mnuCaption = Space$(256)
length = GetMenuString(lParam, mnuId, mnuCaption, Len(mnuCaption), 0)
mnuCaption = Left$(mnuCaption, length)
Select Case mnuCaption
Case "&New"
lblStatus.Caption = "Create a new file"
Case "&Open"
lblStatus.Caption = "Open an existing file"
Case "&Save"
lblStatus.Caption = "Save a file to disk"
Case "E&xit"
lblStatus.Caption = "Exit the program"
End Select

WM_COMMAND is a multipurpose message that a form receives on many occasions—for example, when a menu command has been selected or when a control sends the form a notification message. You can trap EN_HSCROLL and EN_VSCROLL notification messages that TextBox controls send their parent forms when their edit area has been scrolled:

' Put this code inside a FormHook_AfterMessage event procedure.
' If this is a notification from a control, lParam holds its handle.
If lParam = txtEditor.hwnd Then
' In this case, the notification message is in the
' high-order word of wParam.
Select Case (wParam \ &H10000)
' The TextBox control has been scrolled horizontally.
' The TextBox control has been scrolled vertically.
End Select
End If

Of course, you can subclass any control that exposes the hWnd property, not just forms. For example, TextBox controls receive a WM_CONTEXTMENU message when the user right-clicks on them. The default action for this message is to display the default edit pop-up menu, but you can subclass the TextBox control to suppress this action so that you might display your own pop-up menu. To achieve this result, you need to write code in the BeforeMessage event procedure and you must set the procedure's Cancel parameter to False to ask the MsgHook class not to execute the original window procedure. (This is one of the few cases when it's safe to do so.)

Dim WithEvents TextBoxHook As MsgHook

Private Sub Form_Load()
Set TextBoxHook = New MsgHook
TextBoxHook.StartSubclass txtEditor.hWnd
End Sub

Private Sub TextBoxHook_BeforeMessage(hWnd As Long, uMsg As Long, _
wParam As Long, lParam As Long, retValue As Long, Cancel As Boolean)
' Show a custom popup menu.
PopupMenu mnuMyCustomPopupMenu
' Cancel the default processing (i.e. the default context menu).
Cancel = True
End If
End Sub

This appendix has taken you on quite a long journey through API territory. But as I told you at the beginning, these pages only scratch the surface of the immense power that Windows API functions give you, especially if you couple them with subclassing techniques. The MsgHook class on the companion CD is a great tool for exploring these features because you don't have to worry about the implementation details, and you can concentrate on the code that produces the effects you're interested in.

If you want to learn more about this subject, I can only suggest that you get a book, such as Visual Basic Programmer's Guide to the Win32 API by Dan Appleman, specifically on this topic. You should also always have the Microsoft Developer Network at hand for the official documentation of the thousands of functions that Windows exposes. Become an expert in API programming, and you'll see that there will be very little that you can't do in Visual Basic.

Featured Post

Domain and blog for Sale