Как достоверно узнать, запущен ли процесс уже на WM 5.0 PPC
От: Trinity-2001 Россия  
Дата: 28.07.08 16:40
Оценка:
Привет!
Вопрос такой — как достоверно узнать, запущено приложение уже на WM 5.0 PPC или нет? Раньше пробовала через поиск окна посредством FindWindow. Работает этот вариант не всегда правильно, потому что главное окно у меня скрыто с самого начала. Хотела попробовать через создание мьютекса, например — вроде на WM есть функция CreateMutex. Только вот не знаю, как подобрать условия уникальности для этого мьютекса — на обычном ПК это было бы легко. А вот что на WM можно взять для уникальности? Если есть предложения получше, то буду только рада.

Или для уникальности просто взять строчку типа:
#define APP_GUID _T("MyAppClientClass-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn") (сзади GUID соответственно)
Re: Как достоверно узнать, запущен ли процесс уже на WM 5.0
От: Trinity-2001 Россия  
Дата: 28.07.08 16:51
Оценка:
И еще — может, кто-нибудь все-таки ответит на мой вопрос про окна в WM? (чуть ниже в ветке торчит)
Re: Как достоверно узнать, запущен ли процесс уже на WM 5.0
От: dabeat_bf Украина http://alexmogurenko.com
Дата: 29.07.08 05:27
Оценка:
Здравствуйте, Trinity-2001, Вы писали:

T2>Привет!

T2>Хотела попробовать через создание мьютекса, например — вроде на WM есть функция CreateMutex. Только вот не знаю, как подобрать условия T2>уникальности для этого мьютекса — на обычном ПК это было бы легко. А вот что на WM можно взять для уникальности? Если есть предложения получше, то T2>буду только рада.

я на шарпе вот так делал:



[DllImport("coredll.dll")]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, bool bInitialOwner, string lpName);

[DllImport("coredll.dll")]
public static extern bool ReleaseMutex(IntPtr hMutex);

[DllImport("coredll.dll")]
public static extern int GetLastError();


static void Main()
{
            IntPtr hMutex = IntPtr.Zero;


            hMutex = CreateMutex(IntPtr.Zero, false, "App_name");

            if (CMAPI.GetLastError() == 183)
            {
                MessageBox.Show("blah blah blah");
                ReleaseMutex(hMutex);
                return;
            }
            else
            {
                ReleaseMutex(hMutex);
                Application.Run(new RemoteForm());
            }
}
Re[2]: Как достоверно узнать, запущен ли процесс уже на WM 5
От: Trinity-2001 Россия  
Дата: 29.07.08 11:02
Оценка:
Ну, вообще, Вы через мьютекс предлагаете, как я и думала. У меня еще несколько вопросов возникло:
1. Не знаете, как через Win32 API найти окно моего приложения, даже если оно скрыто? Это вообще возможно? (на WM, в частности)
2. Как насчет моих вопросов в этой теме:

здесь
Автор: Trinity-2001
Дата: 25.07.08
Re[3]: Как достоверно узнать, запущен ли процесс уже на WM 5
От: dabeat_bf Украина http://alexmogurenko.com
Дата: 29.07.08 12:40
Оценка:
Здравствуйте, Trinity-2001, Вы писали:

T2>Ну, вообще, Вы через мьютекс предлагаете, как я и думала. У меня еще несколько вопросов возникло:

T2>1. Не знаете, как через Win32 API найти окно моего приложения, даже если оно скрыто? Это вообще возможно? (на WM, в частности)

а чем вас не устравиает FindWindow или EnumWindows?


T2>2. Как насчет моих вопросов в этой теме:

T2>здесь
Автор: Trinity-2001
Дата: 25.07.08


эт надо МСДН читать, думаю это баг/фича вин мобайл... мне как-то не приходилось не фулскриновые приложения писать
Re: Как достоверно узнать, запущен ли процесс уже на WM 5.0
От: ovr  
Дата: 29.07.08 14:35
Оценка:
Здравствуйте, Trinity-2001, Вы писали:

T2>Или для уникальности просто взять строчку типа:

T2>#define APP_GUID _T("MyAppClientClass-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn") (сзади GUID соответственно)

Если знаешь имя процесса, то можно использовать функции Process32First, Process32Next из toolhelp. При необходимости ты и хенд на процесс получишь, если он тебе необходим.
Re[4]: Как достоверно узнать, запущен ли процесс уже на WM 5
От: Trinity-2001 Россия  
Дата: 31.07.08 17:00
Оценка:
Здравствуйте, dabeat_bf, Вы писали:

_>а чем вас не устравиает FindWindow или EnumWindows?


Не устраивает функция FindWindow (изначально через нее все делалось). Почему-то она не находит нужное окно сразу после запуска приложения, когда главное окно скрыто. А потом после того, как окно хоть раз показалось, даже если оно скрыто, уже находит... Мне такое поведение показалось очень странным. В итоге сразу после запуска я почему-то могла запустить 2 копии приложения, и мне это не понравилось, поэтому я решила поискать альтернативный вариант.
Re: Как достоверно узнать, запущен ли процесс уже на WM 5.0
От: Аноним  
Дата: 08.08.08 11:47
Оценка:
T2>Привет!
T2>Вопрос такой — как достоверно узнать, запущено приложение уже на WM 5.0 PPC или нет? Раньше пробовала через поиск окна посредством FindWindow. Работает этот вариант не всегда правильно, потому что главное окно у меня скрыто с самого начала. Хотела попробовать через создание мьютекса, например — вроде на WM есть функция CreateMutex. Только вот не знаю, как подобрать условия уникальности для этого мьютекса — на обычном ПК это было бы легко. А вот что на WM можно взять для уникальности? Если есть предложения получше, то буду только рада.

T2>Или для уникальности просто взять строчку типа:

T2>#define APP_GUID _T("MyAppClientClass-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn") (сзади GUID соответственно)


Для тех же самых целей использовал CreateMutex() в одном из приложений. В качестве ключа уникальности использовал простую строку (14 символов). Работает без нареканий.
Re[5]: Как достоверно узнать, запущен ли процесс уже на WM 5
От: Alexander Shargin Россия RSDN.ru
Дата: 08.08.08 17:16
Оценка:
Здравствуйте, Trinity-2001, Вы писали:

T2>Не устраивает функция FindWindow (изначально через нее все делалось). Почему-то она не находит нужное окно сразу после запуска приложения, когда главное окно скрыто.


Функция FindWindow так себя не ведёт. Что-то не в порядке у тебя с окнами. Либо изначально окно не top-level, либо у него правильный заголовок ещё не выставлен, либо ещё что-то. Видимость/невидимость окна на работу FindWindow никак не влияет.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re: Как достоверно узнать, запущен ли процесс уже на WM 5.0
От: AGolovnev  
Дата: 13.08.08 16:31
Оценка:
Здравствуйте, Trinity-2001, Вы писали:

T2>Привет!

T2>Вопрос такой — как достоверно узнать, запущено приложение уже на WM 5.0 PPC или нет? Раньше пробовала через поиск окна посредством FindWindow. Работает этот вариант не всегда правильно, потому что главное окно у меня скрыто с самого начала. Хотела попробовать через создание мьютекса, например — вроде на WM есть функция CreateMutex. Только вот не знаю, как подобрать условия уникальности для этого мьютекса — на обычном ПК это было бы легко. А вот что на WM можно взять для уникальности? Если есть предложения получше, то буду только рада.

T2>Или для уникальности просто взять строчку типа:

T2>#define APP_GUID _T("MyAppClientClass-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn") (сзади GUID соответственно)

Если не поздно, то я бы Mutex заменил на ATOM — он как-то по-легче...
... << RSDN@Home 1.2.0 alpha 4 rev. 1099>>
Re[2]: Как достоверно узнать, запущен ли процесс уже на WM 5
От: Alexander Shargin Россия RSDN.ru
Дата: 13.08.08 17:38
Оценка:
Здравствуйте, AGolovnev, Вы писали:

AG>Если не поздно, то я бы Mutex заменил на ATOM — он как-то по-легче...


А разве GlobalAddAtom обеспечивает атомарность создания объекта?
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.