Показать сообщение отдельно
Старый 15.08.2007, 14:07
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
о работе с реестром см.
http://flasher.ru/forum/showthread.php?t=81193&page=6 пост №60
Совершенно правильный вопрос.
Хэндл при завершении работы (штатном) самого первого экземпляра меняется на запись "none". Удалять ключ AppHwnd совсем не обязательно.
Для нештатных ситуаций такой способ не подходит.
Поэтому
Код:
mdm.Application.doEvents();
formTitle = mdm.Forms.MainForm.title = "form";
appTitle = mdm.Application.title = "app";
var wList = mdm.System.getWindowList();
var appList:Array = new Array();
var i = 0;
while (wList[i][1]) {
	if (wList[i][0] == formTitle || wList[i][0] == appTitle) {
		appList.push(wList[i][1]);
	}
	i++;
}
hwnd = appList[1];
if (hwnd) {
	mdm.System.sendMessage(hwnd, 0x0112, 0xF120, 1);
	mdm.System.setWindowFocus(hwnd);
	mdm.Application.exit();
}
Здесь все основано на том факте, что в списке окон wList окно второго экземпляра приложения находится выше чем окно ранее запущенного экземпляра. и при добавлении в массив appList хэндл уже запущенного окна (если таковое присутствует) оказывается под номером 1, а хэндл второго под номером 0. Действительно, должен признать, что в этом случае нужно проверять наличие в списке wList и титла на кнопке приложения в таскбаре: когда оно свернуто принудительно только так его можно найти. Поэтому присутствует строчка mdm.Application.title="...", где устанавливается титл на этой кнопке.
Должно работать. В принципе, это твой исходный вариант, только переработанный.
FormTitle и ApplicationTitle можно указать статически в самом компиляторе. Но в этом случае к ним не получишь доступ так просто. И придется писать в условии сравнения титлов сам титл. Не поручусь, что это всегда работает, особенно когда титл русский или необычные символы там есть. Поэтому, лучше назначать их динамически в коде.


Последний раз редактировалось alexcon314; 15.08.2007 в 14:50.