This Blog Has Been Moved !

This Blog Has been moved to http://aleemkhan.wordpress.com

Windows Vista which Microsoft promised as the Operating System that will change computing is already in uncharted waters even before its over-delayed release, and now abandoning the WinFS Project is like the last nail in the grave for Vista.

WinFS Team announced that they are not going to deliver WinFS and the research and ““innovation”” will be handed to the SQL-Server and ADO.NET teams and may appear into the next versions of both products.
http://blogs.msdn.com/winfs/archive/2006/06/23/644706.aspx

It is hard to imagine how an organization as prominent as Microsoft can get away with such a failure. Vista has been their major focus for more than 5-6 years; they have over 2000 people on Vista alone. WinFS to me seemed to be the strongest pillar of Vista after Indigo.

Recently a lot has been coming out of Microsoft about bad project management and other issues especially on the Vista Project. Philip Su in the Vista team http://blogs.msdn.com/philipsu/archive/2006/06/14/631438.aspx explains why Vista is slipped so late mostly due to management issues.
I just heard the news that Scobleizer is leaving Microsoft, his blog and Channel has always been a great source about what’s happening inside Microsoft. I wonder if he will still continue to work at Channel 9.

http://news.bbc.co.uk/2/hi/technology/5070940.stm
Installed Windows Vista Beta 2 on my HP nc6120 Notebook, just having fun with the UI at the moment, have'nt gone down to checking development experience. I was surprised to run it almost without any trouble. I thought driver issues and performance will really give me trouble, but it automaticlly adjusted to the graphics capability of my system and I had to install not a single driver.

The Features which could not be supported by my modest built-in 915 Intel Chip Graphic Card were automatically diabled like the 3D Flip View to toggle windows.

I installed Beta 1before this, but that could run nothing, finally Beta 2 seems to be stable enough to give me a good experience.

Its beta and everyone expects issues, infact i saw a few menus features which were not working but still I should say that substantial work has been done in Vista, atleast from the appearance point of view. A lot of basic tasks are rearranged from the older version of windows.

Have a look at some of the Screen shots.

















One of the things I really miss and loved working with was Win32, not that I am of the view that is flawless, but the control that I have over my application when I am writing code is awsome. Ofcourse, all .NET abstraction has countless advantages and is definately the future, but ocassionally its always nice to dig back to bottom.

Recently someone asked this on microsoft.public.dotnet.csharp.general newsgroup, that if you are calling a library function .NET which is some Dll, and is showing a MessageBox on some error or a "Trial" Message etc, how you would Supress/Hide that Message Box in .NET.

I wrote this following class DisableModalDialog to do the exact thing. To use the class see the following click event to see how u can disable/enable dialog boxes.

private void button1_Click(object sender, System.EventArgs e)
{
DisableModalDialog dmd = new DisableModalDialog();

dmd.DisableMessageBox();

MessageBox.Show("Hello");
MessageBox.Show("Hello");
MessageBox.Show("Hello");
MessageBox.Show("Hello");
MessageBox.Show("Hello");
MessageBox.Show("Hello");

dmd.EnableMessageBox();

}




// Class to Enable/Disable Windows Dialog Boxes
// NOTE : This Class Will Only Disable Dialog Boxes in Current Thread
public class DisableModalDialog
{
// Constructor
public DisableModalDialog() {}

public void DisableMessageBox()
{
this.myCallbackDelegate = new HookProc(this.MyHookCallbackFunction);
hHOOK = SetWindowsHookEx(HookType.WH_CALLWNDPROC, this.myCallbackDelegate, IntPtr.Zero, (uint)AppDomain.GetCurrentThreadId());
}

public void EnableMessageBox()
{
UnhookWindowsHookEx(hHOOK);
}

private IntPtr hHOOK;
private IntPtr OrigDlgProc;

private HookProc myCallbackDelegate = null;
delegate int HookProc(int code, IntPtr v1, IntPtr v2);

private CustomWindowProc myCallBackWndProcDelegate = null;
delegate IntPtr CustomWindowProc(IntPtr hwnd,uint uMsg,IntPtr wParam,IntPtr lParam);

[DllImport("user32.dll")]
private static extern IntPtr SetWindowsHookEx(HookType hook, HookProc callback,
IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll")]
private static extern IntPtr UnhookWindowsHookEx(IntPtr hhk);

[DllImport("user32.dll")]
private static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]
private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, CustomWindowProc dwNewLong);

[DllImport("user32.dll")]
private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

//[DllImport("user32.dll")]
//private static extern IntPtr SetClassLong(IntPtr hWnd, int nIndex, CustomWindowProc dwNewLong);

//[DllImport("user32.dll")]
//private static extern IntPtr DefWindowProc(IntPtr hWnd, uint Msg, IntPtr wParam,IntPtr lParam);

[DllImport("user32.dll")]
private static extern IntPtr DefDlgProc(IntPtr hDlg, uint Msg, IntPtr wParam,IntPtr lParam);


private enum HookType : int
{
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = 10,
WH_FOREGROUNDIDLE = 11,
WH_CALLWNDPROCRET = 12,
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
}

[StructLayout(LayoutKind.Sequential)]
private struct CWPSTRUCT
{
public IntPtr lparam;
public IntPtr wparam;
public int message;
public IntPtr hwnd;
}

//private static int WM_CREATE = 0x0001;
//private static int HC_ACTION = 0;
//private static int GCL_WNDPROC = (-24);

private static int GWL_WNDPROC = (-4);
private static int WM_INITDIALOG = 0x0110;
private static int WM_SHOWWINDOW = 0x0018;
private static int WM_CLOSE = 0x0010;

// Hook Function to Hook Current Thread Messages
private int MyHookCallbackFunction(int code, IntPtr wParam, IntPtr lParam)
{
CWPSTRUCT cwpStruct = (CWPSTRUCT)System.Runtime.InteropServices.Marshal.PtrToStructure(lParam,typeof(CWPSTRUCT));
if(cwpStruct.message == WM_INITDIALOG)
{
myCallBackWndProcDelegate = new CustomWindowProc(this.MyCustomDialogProc);
this.OrigDlgProc = (IntPtr) SetWindowLong(cwpStruct.hwnd, GWL_WNDPROC, this.myCallBackWndProcDelegate);

}
return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
}

// Custom Dialog Procedure for Handling Dialog Messages
private IntPtr MyCustomDialogProc(IntPtr hwnd,uint uMsg,IntPtr wParam,IntPtr lParam)
{
if(uMsg == WM_SHOWWINDOW)
{
SetWindowLong(hwnd,GWL_WNDPROC, this.OrigDlgProc);
uMsg = (uint) WM_CLOSE;
}

return DefDlgProc(hwnd,uMsg,wParam,lParam);
}
}

Its been a while since I have been here, over the last few months a lot of things were changing and I had to settle down to start all this stuff. The Major change is that I joined Vertscape Infotech and have planned to settle here in Dubai, atleast for a few years.

Also, I wanted to get back to blogging with a new spirit :), so I have been looking at various other options for blogging like wordpress.com which provides with additional content pages. Infact I was working on a personal blog site, but it was taking more time than I initially thought so I got out of it. I tried wordpress but it lacks the HTML edit like the Blogger which gives me total control over my Blog.

So, I am sticking to Blogger and hoping they'll add support for aditional content pages soon. Anyway to live up to the new spirit I changed the template for my Blog. I liked the Luxinterior Dark Template of the Community Server, but this one is even better.

This template is originally developed by Nikhil Kothari for his website http://www.nikhilk.net , Someone has developed this for Community Server also, anyway I took the template and changed it for Blogger.com. I think its really nice and specially the page transition effect. :)

Cheers!