Вызов внешнего приложения gps из VB.NET в CF 3.5 и возврат в приложение VB.NET - PullRequest
1 голос
/ 02 декабря 2008

Я пишу приложение в VB.NET, которое позволяет пользователю вызывать Garmin Mobile XT для получения маршрута.

У меня есть форма, которая остается открытой за Garmin и после выхода из Garmin позволяет пользователю вернуться.

Иногда, однако, эта форма автоматически скрывается ОС WM.

Есть идеи, как можно заставить форму оставаться на месте - или я могу поставить галочку при запуске своего приложения, чтобы проверить, запущено ли уже приложение и скрыта ли форма, и заставить форму вернуться наверх?

Я попытался установить форму для TopMost, но это означает, что приложение GPS не может быть видно, так как моя форма находится выше всего приложения GPS.

Я пытался перехватить закрывающий обработчик для формы, но он не срабатывает - я думаю, потому что WM OS просто скрывает форму и фактически не закрывает ее.

Я попытался поймать обработчик деактивации формы, чтобы предотвратить потерю фокуса, но затем он делает то же самое, что и свойство TopMost, и я не вижу приложение GPS.

У кого-нибудь есть идеи о том, куда я могу пойти отсюда, потому что у меня сейчас нет ни малейшего понятия!

Спасибо, Адам

1 Ответ

1 голос
/ 20 февраля 2009

Я считаю, что это должно быть сделано как в «обычном» VB / VBA, через API OS. Получите файл справки winAPI: -).

Теперь я предлагаю, чтобы ваше приложение повторяло все окна, найдите ваше приложение GPS, используя:

HWND FindWindow (

LPCTSTR lpClassName,  // pointer to class name
LPCTSTR lpWindowName  // pointer to window name    );

и затем вы можете изменить его Z-порядок (разместите его выше или ниже какого-либо другого определенного ветра):

BOOL SetWindowPos (

HWND hWnd,    // handle of window
HWND hWndInsertAfter, // placement-order handle
int X,    // horizontal position
int Y,    // vertical position
int cx,   // width
int cy,   // height
UINT uFlags   // window-positioning flags    );

, или просто попросите восстановить его (что должно автоматически привести его к высшему Z-порядку), используя:

BOOL SetWindowPlacement (

HWND hWnd,    // handle of window
CONST WINDOWPLACEMENT *lpwndpl    // address of structure with position

данные);

...