Form - Submit hidden field (select)
Since Drupal 7, Field API is in core so you don't have to worry about Fields when editing a node form. In Drupal 6, you have to add an #after_build function to do this. 

You need to create a hook_form_alter function to alter the user_register_form. (or hook_form_FORM_ID_alter).

I can't remember the structure of form fields. Install devel module and you can see the entire $form array nicely.

 &lt;?php
    function mymodule_form_user_register_form_alter(&amp;$form, &amp;$form_state) {
      dpm($form); // Make sure you have Devel module installed. 
      $field_name = 'field_myfield';
      $value = $_GET['somekey']; // populate this var from the URL params as you mentioned in your question. 

      if (isset($form[$field_name][LANGUAGE_NONE][0])) {
        if (empty($value)) {
          $form['#access'] = FALSE;
          drupal_set_message(t('Please use correct URL'), 'warning'); // in case the value is not set, hide the form and issue a warning. 
          return;
        }
        // #options is an array like this: array('key' =&gt; 'value', 'key2' =&gt; 'value2'); 
        // Make sure you set the key of this array in $value. if your $value is a value, you'll need to array_flip and find the key instead. 
        $form[$field_name][LANGUAGE_NONE][0]['#type'] = 'value'; // this element will not be rendered at all
        $form[$field_name][LANGUAGE_NONE][0]['#value'] = $value; // this value will be passed to $form_state['values']
      }
    }


Calling the form using drupal_get_form DOES fire all form_alters as necessary. 
If you are trying to use this form with a direct menu router, set page callback in the menu router item to drupal_get_form and 
array('user_register_form'), as the page arguments