А вот и ты. Это использует LocalStorage для хранения счетчика в качестве переменной и увеличивает его при каждом нажатии кнопки. LocalStorage может хранить только строки, поэтому для добавления 1 требуется сначала преобразование в int.
Я не могу встроить код непосредственно в этот ответ из-за ограничений SO. Вот код и работающий JSFiddle .
HTML:
Javascript:
// This function increases the count
function clickButtonFunction() {
console.log('run');
//Check to see if the localstorage variable exists. If it does not, this is the first time coming to the page, and we need to initalize it to 0
if (localStorage.getItem("clickCounter") === null) {
// Store
localStorage.setItem("clickCounter", "0");
}
// Get the value from local storage
var value = parseInt(localStorage.getItem("clickCounter"));
// Incrememtnt the count by 1
var newValue = value + 1
//Write the value back to local storage
localStorage.setItem("clickCounter", newValue);
// Write the value to the div
document.getElementById("clickCounter").innerHTML = newValue
}
// Reset local storage to 0
function clickReset() {
localStorage.setItem("clickCounter", "0");
// Write the value to the div
document.getElementById("clickCounter").innerHTML = '0'
}
https://jsfiddle.net/tLyva5oq/
В будущем вы должны действительно включить в свой вопрос свои попытки решения проблемы.
См. http://support.microsoft.com/kb/99115 , "ИНФОРМАЦИЯ: Препятствование, чтобы Консоль Исчезла".
идея состоит в том, чтобы использовать GetConsoleScreenBufferInfo, чтобы решить, что курсор не переместился от начальных 0,0 положений.
Пример кода от @tomlogic, на основе Статьи базы знаний, на которую ссылаются:
// call in main() before printing to stdout
// returns TRUE if program is in its own console (cursor at 0,0) or
// FALSE if it was launched from an existing console.
// See http://support.microsoft.com/kb/99115
#include <stdio.h>
#include <windows.h>
int separate_console( void)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
if (!GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE), &csbi))
{
printf( "GetConsoleScreenBufferInfo failed: %lu\n", GetLastError());
return FALSE;
}
// if cursor position is (0,0) then we were launched in a separate console
return ((!csbi.dwCursorPosition.X) && (!csbi.dwCursorPosition.Y));
}
Я верю cmd.exe
наборы CMDCMDLINE и CMDEXTVERSION environemntal переменные, когда он запускается. Таким образом, если они установлены, Ваша программа была по всей вероятности запущена от оболочки.
Это не является надежным, но это - что-то.
также возможно определить Ваш родительский PID в некоторых замысловатых и возможно ненадежные пути, или таким образом, я собираюсь. Можно хотеть изучить это.
Как насчет того, чтобы ожидать нажатия клавиши, когда Вы отображаете сообщение об ошибке, и не другие времена?
Я видел код, который выполняет
if (!GetConsoleTitle(NULL, 0) && GetLastError() == ERROR_SUCCESS) {
// Console
} else {
// GUI
}
НО ... Я обнаружил, что AttachConsole ()
более полезен
На C ++ (вне моей головы, а я не программист на C ++)
if (!AttachConsole(ATTACH_PARENT_PROCESS)) {
// GUI
} else {
// Console, and you have a handle to the console that already exists.
}
более эффективен. Кроме того, если вы оказались в среде графического интерфейса пользователя и хотели бы оставаться там как можно дольше, но позже обнаружите, что произошло что-то катастрофическое, что действительно могло бы использовать дамп в окно консоли (вы не можете написать поле редактирования окно, чтобы выделить его или присоединить к системному журналу NT и вызвать MessageBox ()
), тогда вы можете AllocConsole ()
позже в процессе, когда методы графического интерфейса не работают .