Look at the TextBox.SelectionStart property - it gives the current caret position. If it is zero, and the SelectionLength is zero, the cursor is at the start and no text is selected.
[edit]
BTW: You don't want this in KeyDown - you want it in KeyPress:
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
TextBox tb = sender as TextBox;
if (tb != null)
{
if (tb.SelectionStart == 0 && tb.SelectionLength == 0 && e.KeyChar == '0')
{
e.Handled = true;
}
}
}
[/edit]