Archive for December, 2008

Moving Windows remotely with .NET

A colleague of mine has a dual-monitor windows system.

Unfortunatly he has a different monitor setup for home and work (work – 2nd monitor on the left; home – 2nd monitor on the right). Now when you work with certain Java applications which save their position on their own you come to the point where an window pops up out of the viewing range.

Now you hav nearly now way to move that window, because you can’t click it. Moving over the task bar doesn’t work either. So I wrote a simple Application which can move the lost window back into the viewing range.

Here a bit out of the c# code:

[ DllImport("user32.dll") ]
static extern IntPtr GetForegroundWindow(); 

[DllImportAttribute("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

[DllImport("user32.dll", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint);

...
private void timer1_Tick(object sender, System.EventArgs e)
{
	IntPtr temp  = GetForegroundWindow();
	if( me != temp)
	{
		window = temp;
		label1.Text = window.ToString();
			RECT t = new RECT();
		bool r = GetWindowRect(window, out t);

		posx = t.Location.X;
		posy = t.Location.Y;
		sizex = t.Width;
		sizey = t.Height;
		label1.Text = label1.Text + "\nx: "  + t.Location.X+ "\ny: " + t.Location.Y
				+"\nwidth: "+sizex + "\nheight: " + sizey;
		}
	}

private void button2_Click(object sender, System.EventArgs e)
{
	//right
	posx = posx +10;
	MoveWindow((IntPtr)window, posx, posy , sizex, sizey, true);
}

This is just to get a basic idea what I’ve done here. You can also look at the complete source code yourself (vs2003 project is attached) or just use the application as is (although it is pretty ugly – more like a proof of concept.

downloads:

follow-up here

    , ,

    No Comments

    use yahoo finance streaming api

    In the past I used this ruby script to poll for the current stock data and put it into a database to create a little history.

    Recently I saw a new feature on the yahoo finance homepage. Now it is possible to enable a streaming option and then you get a live update on certain values via AJAX. So I thought why not get this feature and let yahoo stream the content to the client instead of polling the server from time to time.

    So I tried to capture the javascript request with wireshark, so that I could reproduce it. This is what it looks like:

    GET /streamer/1.0?s=^GDAXI,USD=X&o=^N225,LHS.F,JI4.F,EEX.F,HEI.F,CBK.F,PRE.F,NDX1.F&k=c10,g00,h00,l10,p20,t10&j=c10,l10,p20,t10&r=0&marketid=us_market&callback=parent.yfs_u1f&mktmcb=parent.yfs_mktmcb&gencallback=parent.yfs_gencb HTTP/1.1
    Host: streamerapi.finance.yahoo.com

    Here is what I got on this request so far:

    parameter ‘s’ -> symbol on the main site (what you currently looking at)

    parameter ‘o’ -> that is the ticker on the top

    parameter ‘k’ and ‘j’ -> that are the values that are transfered

    c10 -> unknown

    g00 -> day low

    h00 -> day high

    l10 -> current price

    p20 -> unknown

    t10 -> timstamp

    a00 -> ask

    b00 -> bid

    With that data you can build a Push-Client with your own custom data. Here is a sample Request for what I needed.

    wget -Obla 'http://streamerapi.finance.yahoo.com/streamer/1.0?s=^GDAXI,USD=X&o=BEI.F,SIE.F,PRA.F&k=l10,a00,b00,g00,h00&j=l10,a00,b00,g00,h00&r=0&marketid=us_market&callback=parent.yfs_u1f&mktmcb=parent.yfs_mktmcb&gencallback=parent.yfs_gencb'

    (Streaming the current ‘ask’, ‘bid’ and ‘price’ values for the stocks ‘BEI.F’,’SIE.F’ and ‘PRA.F’.)

    The response for that looks like that:

    
    
    
    
    
    
    
    
    

    No you can parse that document for the requested Data. But be carefull because the html structure is never closing (at least not as lang as the streaming goes on).

    , , ,

    11 Comments