Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31

Удаление файлов в каталоге после завершения определенного процесса

10.08.2014, 13:28. Показов 6532. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "WaitThread.h"
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TWaitThread::TWaitThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TWaitThread::Execute()
{
 FreeOnTerminate = true;
 NameThreadForDebugging(UnicodeString(L"Test"));
 
 Synchronize(ButtonDisable);
 
 STARTUPINFO cif;
 ZeroMemory(&cif,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pi;
 
 if (CreateProcess(TEXT("cmd.exe"),NULL,
    NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true)
  {
   WaitForSingleObject(pi.hProcess, INFINITE);
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
  }
  Synchronize(ButtonEnable);
  DeleteDir(L"c:\\test\\");
}
//---------------------------------------------------------------------------
void __fastcall TWaitThread::ButtonDisable()
{
 Form1->Button1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TWaitThread::ButtonEnable()
{
 Form1->Button1->Enabled = true;
}
//---------------------------------------------------------------------------
bool __fastcall TWaitThread::DeleteDir(UnicodeString DirName)
{
TSearchRec sr;
if (DirName.Length())
 {
 if (!FindFirst(DirName+L"\\*.*",faAnyFile,sr))
 do
  {
  if (!(sr.Name==L"." || sr.Name==L".."))// это удалять не надо
   if (((sr.Attr & faDirectory) == faDirectory ) ||
   (sr.Attr == faDirectory))// найдена папка
    {
    FileSetAttr(DirName+L"\\"+sr.Name, faDirectory );// сброс всяких read-only
    DeleteDir(DirName+L"\\"+sr.Name);//рекурсивно удаляем содержимое
    RemoveDir(DirName + L"\\"+sr.Name);// удаляем теперь уже пустую папку
    }
    else// иначе найден файл
    {
    FileSetAttr(DirName+L"\\"+sr.Name, 0);// сброс всяких read-only
    DeleteFile(DirName+L"\\"+sr.Name);// удаляем файл
    }
  }
 while (!FindNext(sr));// ищем опять, пока не найдем все
 FindClose(sr);
 }
RemoveDir(DirName);
return true;
}
//----------------------------------------------------------------------------
void __fastcall StartWaitThread()
{
 TWaitThread *wait = new TWaitThread(false);
}
//----------------------------------------------------------------------------
Добавлено через 1 минуту
съедает корневую папку

Добавлено через 20 секунд
А нужно чтобы корневая папка осталась

Добавлено через 3 минуты
http://www.cyberguru.ru/cpp-bu... age29.html

Добавлено через 49 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
 
#ifndef WaitThreadH
#define WaitThreadH
//---------------------------------------------------------------------------
class TWaitThread: public TThread
{
private:
public:
  __fastcall TWaitThread(bool CreateSuspended);
  //__fastcall ~TestThread();
  void __fastcall Execute();
  void __fastcall ButtonEnable(); //Synchronize
  void __fastcall ButtonDisable(); //Synchronize
  bool __fastcall DeleteDir(UnicodeString DirName); //Synchronize
};
void __fastcall StartWaitThread();
//---------------------------------------------------------------------------
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2014, 13:28
Ответы с готовыми решениями:

Запуск программы после завершения определенного процесса
Товарищи, приветствую вас всех! Прошу помощи срочно. Укажите что не так пожалуйста. Вот батник: set process=calc.exe goto checker ...

Удаление папок и файлов из указанной папки после завершения программы
Здравствуйте. Мне нужен скрипт vbs для удаления файлов и папок из указанной папки после завершения просмотра файла презентации...

Поиск и удаление определённого файла в определённом каталоге
Как в каталоге LOCAL (там же много папок) найти и удалить файл readmy.doc в cmd?

57
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 19:29  [ТС]
Студворк — интернет-сервис помощи студентам
Папка удаляется и создаеться до завершения процесса

Добавлено через 8 минут
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
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
  ShellExecute(0,"open",START.c_str(),PLUS.c_str(),NULL,SW_SHOW);
}
bool IsProcessRun(char* pName)
{
  HANDLE Hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if(Hndl == INVALID_HANDLE_VALUE) return false;
  PROCESSENTRY32 ProcessEntry;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(Hndl, &ProcessEntry);
  while (Loop)
   {
     if (strcmp(ProcessEntry.szExeFile, pName) == 0)
       {
         CloseHandle(Hndl);
         return true;
       }
     Loop = Process32Next(Hndl, &ProcessEntry);
   }
  return false;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  pName = AnsiString(ExtractFileName(START)).c_str();
  if(! IsProcessRun(pName))
   {
   if(TDirectory::Exists(L"C:\\TEST")) TDirectory::Delete(L"C:\\TEST", true);
   TDirectory::CreateDirectory(L"C:\\TEST");
   }
  Application->ProcessMessages();
}
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
11.08.2014, 19:29
Полный код покажи. Что такое START? Что такое PLUS?
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 19:39  [ТС]
Весь

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
#include <vcl.h>
#pragma hdrstop
#include <Tlhelp32.h>
#include "Unit1.h"
 
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
TForm1 *Form1;
 
char* pName;
AnsiString PLUS;
AnsiString START;
 
__fastcall TForm1::TForm1(TComponent* Owner)
   :TForm(Owner)
{
}
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
  ShellExecute(0,"open",START.c_str(),PLUS.c_str(),NULL,SW_SHOW);  // Запуск exe
}
bool IsProcessRun(char* pName)
{
  HANDLE Hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if(Hndl == INVALID_HANDLE_VALUE) return false;
  PROCESSENTRY32 ProcessEntry;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(Hndl, &ProcessEntry);
  while (Loop)
   {
     if (strcmp(ProcessEntry.szExeFile, pName) == 0)
       {
         CloseHandle(Hndl);
         return true;
       }
     Loop = Process32Next(Hndl, &ProcessEntry);
   }
  return false;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  pName = AnsiString(ExtractFileName(START)).c_str();
  if(! IsProcessRun(pName))
   {
   if(TDirectory::Exists(L"C:\\TEST")) TDirectory::Delete(L"C:\\TEST", true);
   TDirectory::CreateDirectory(L"C:\\TEST");
   }
  Application->ProcessMessages();
}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.08.2014, 20:21
И где задается имя процесса? Переменная START не инициализируется в приведенном коде.
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 20:24  [ТС]
Из вашей темы брал: Узнать запущен ли процесс и выполнить действие

Добавлено через 2 минуты
Здесь нашел!
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
11.08.2014, 20:33
Ну дык в этой теме имя процесса как раз-то и задается явно...
В общем так
Если тебе просто надо запустить стороннюю программу с какими-то параметрами, дождаться окончания ее работы и удалить какую-то папку после этого - то вот пример. В примере запускается файл 1.bat с параметром 192.168.0.1. Содержимое bat-файла следующее:
Code
1
2
cls
ping -t %1
Сам батник лежит ряжом с ехе.
При запуске программы и нажатии на кнопку открывается окно DOS и начинает пинговать адрес, указанный в параметре до тех пор, пока пользователь не закроет это окно. После этого происходит пересоздание папки, не раньше, ни позже.
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
#include <vcl.h>
#pragma hdrstop
#include <System.IOUtils.hpp>
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
 
String START = ExtractFilePath(Application->ExeName) + "1.bat";
String PLUS = "192.168.0.1";
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
  SHELLEXECUTEINFO SEI = {0};
  SEI.cbSize = sizeof(SHELLEXECUTEINFO);
  SEI.fMask = SEE_MASK_NOCLOSEPROCESS;
  SEI.hwnd = NULL;
  SEI.lpVerb = L"open";
  SEI.lpFile = START.c_str();
  SEI.lpParameters = PLUS.c_str();
  SEI.lpDirectory = NULL;
  SEI.nShow = SW_SHOW;
  SEI.hInstApp = NULL;
  ShellExecuteEx(&SEI); // <<== Здесь батник запускается
  WaitForSingleObject(SEI.hProcess, INFINITE); // <<== Здесь ждем, пока окно ДОС не закроют
  if(TDirectory::Exists(L"C:\\TMP\\111\\222")) // <<== Когда дождались - папку удаляем
   {
     TDirectory::Delete(L"C:\\TMP\\111\\222", true);
     TDirectory::CreateDirectory(L"C:\\TMP\\111\\222");
   }
}
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 20:39  [ТС]
А как можно без командной строки ?

Добавлено через 38 секунд
Не хочется черную консоль видеть
0
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
11.08.2014, 20:40
Насчет батника, где-то на форуме когда то нашел функцию самоуничтожения:
C++
1
2
3
String sFile = Application->ExeName;
WinExec(((AnsiString)getenv("COMSPEC") + " /c ping -n 1 localhost > nul & del /F \"" + sFile + "\"").c_str() , SW_HIDE);
Application->Terminate();
Так вот, нельзя ли код из батника занести в WinExec() ?
Она как раз и запускается как "SW_HIDE" так что ее не будет видно невооруженным глазом
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 20:42  [ТС]
C++
1
system("ping  192.168.0.1");
Так тоже консоль будет видна

Добавлено через 42 секунды
Желательно от батника избавиться

Добавлено через 18 секунд
И от окна консоли
0
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
11.08.2014, 20:48
Цитата Сообщение от D1973 Посмотреть сообщение
Сам батник лежит ряжом с ехе.
При запуске программы и нажатии на кнопку открывается окно DOS и начинает пинговать адрес, указанный в параметре до тех пор, пока пользователь не закроет это окно. После этого происходит пересоздание папки, не раньше, ни позже.
Это смешно...
Раз уж на то пошло, то может вот так:
Цитата Сообщение от CheshireCat Посмотреть сообщение
1. как именно ты собираешься "отслеживать"?
2. зачем искать? функция создания нового процесса (API CreateProcess()) вернет либо валидный хэндл запущенного процесса, либо NULL. На этом хэндле и жди функцией WaitForSingleObject(). Все.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.08.2014, 20:53
Еще как смешно, ибо пинговать следовало бы программно, а не через батники...
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 20:55  [ТС]
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
include <winsock.h>
 
#define HOST_NAME "www.sources.ru"  // Любое доменное имя
#define WINSOCK_VERSION 0x0101  // Версия винсока 1.1
#define NO_FLAGS 0  // Флаги не указываем
// В RFC 792 определены значения сообщений ICMP
#define ICMP_ECHO 8 // An ICMP echo message
#define ICMP_ECHOREPLY 0    // An ICMP echo reply message
#define ICMP_HEADERSIZE 8   
 
struct ip // Структура заголовка IP
{
BYTE ip_verlen; // Version and header length
BYTE ip_tos;    // Type of service
WORD ip_len;    // Total packet length 
UINT ip_id; // Datagram identification 
WORD ip_fragoff;    // Fragment offset 
BYTE ip_ttl;    // Time to live 
BYTE ip_proto;  // Protocol
UINT ip_chksum; // Checksum 
IN_ADDR ip_src_addr;    // Source address 
IN_ADDR ip_dst_addr;    // Destination address 
BYTE ip_data[1];    // Variable length data area
};
 
struct icmp // Структура заголовка ICMP
{
BYTE icmp_type; // Type of message
BYTE icmp_code; // Type "sub code" (zero for echos)
WORD icmp_cksum;    // 1's complement checksum
HINSTANCE icmp_id;  // Unique ID (the instance handle)
WORD icmp_seq;  // Tracks multiple pings
BYTE icmp_data[1];  // The start of optional data
};
 
char szPingBuffer[100];
 
 
HINSTANCE hInstance;
 
 
WORD InternetChksum(LPWORD lpwIcmpData, WORD wDataLength)
{
long    lSum;   // Store the summation
WORD    wOddByte;   // Left over byte from the summation
WORD    wAnswer;    // The 1's complement checksum
 
lSum = 0L;
 
while (wDataLength > 1)
{
lSum += *lpwIcmpData++;
wDataLength -= 2;
}
 
// Handle the odd byte if necessary and make sure the top half is zero
if (wDataLength == 1)
{
wOddByte = 0;
*((LPBYTE) &wOddByte) = *(LPBYTE)lpwIcmpData;   // One byte only
lSum += wOddByte;
}
 
// Add back the carry outs from the 16 bits to the low 16 bits
lSum = (lSum >> 16) + (lSum & 0xffff);  // Add high-16 to low-16
lSum += (lSum >> 16);   // Add carry
wAnswer = (WORD)~lSum;  // 1's complement, then truncate 
// to 16 bits
return(wAnswer);
}
 
 
BOOL DoPingOperation(HANDLE hInstance)
{
// Локальные переменные
int iPacketSize;    // размер ICMP-пакета 
int iHostAddrLength;    // Длина адреса сетевого компьютера
int iIPHeadLength;  // Длина заголовка IP-датаграммы
int iReceivedBytes; // Количество принятых байтов
int iSentBytes; // Количество посланных байтов
int nProtocol;  // Номер протокола ICMP
int iSocketError;   // Значение кода ошибки
PDWORD pdwTimeStamp;    // Счетчик "тиков" при передаче
DWORD dwReturnTime; // Счетчик "тиков" при приеме
DWORD dwRoundTrip;  // Счетчик "тиков" среднего времени пробега
// Структуры, описанные в WINSOCK.H
SOCKADDR_IN sockAddrLocal;  // Структуры адреса сокета
SOCKADDR_IN sockAddrHost;   // 
SOCKET hSocket; // Дескриптор сокета
LPHOSTENT lpHostEntry;  // Структура данных с
// информацией о сетевом компьютере
LPPROTOENT lpProtocolEntry; // Структура данных с информацией о протоколе
 
BYTE IcmpSendPacket[1024];  // Буфер для посылаемых данных
BYTE IcmpRecvPacket[4096];  // Буфер для принимаемых данных 
 
struct icmp *pIcmpHeader;   // Указатель на структуру ICMP
struct ip *pIpHeader;   // Указатель на структуру-заголовок IP
LPSTR lpszHostName; // Указатель на удаленный сервер времени
 
lpszHostName = HOST_NAME;
 
if ((lpHostEntry = gethostbyname(HOST_NAME)) == NULL) {
wsprintf(szPingBuffer, "Could not get %s IP address."(LPSTR)lpszHostName);
return(FALSE);
}
 
sockAddrLocal.sin_family = AF_INET;
sockAddrLocal.sin_addr = *((LPIN_ADDR) *lpHostEntry->h_addr_list);
 
// В случае простого сокета, мы должны указывать протокол
if ((lpProtocolEntry = getprotobyname("icmp")) == NULL)
nProtocol = IPPROTO_ICMP;
else
nProtocol = lpProtocolEntry->p_proto;
 
// Создаем простой сокет и указываем ICMP в качестве протокола
if ((hSocket = socket(PF_INET, SOCK_RAW, nProtocol)) == INVALID_SOCKET)
{
wsprintf(szPingBuffer, "Could not create a RAW socket.");
return(FALSE);
}
 
pIcmpHeader = (struct icmp *) IcmpSendPacket;   // Point at the data area
pIcmpHeader->icmp_type = ICMP_ECHO; // then fill in the data.
pIcmpHeader->icmp_code = 0; // Use the Sockman instance 
pIcmpHeader->icmp_id = hInstance;   // handle as a unique ID.
pIcmpHeader->icmp_seq = 0;  // It's important to reset
pIcmpHeader->icmp_cksum = 0;    // the checksum to zero.
 
//Значение счетчика "тиков" располагается в необязательной области данных
pdwTimeStamp = (PDWORD)&IcmpSendPacket[ICMP_HEADERSIZE];
*pdwTimeStamp = GetTickCount();
iPacketSize = ICMP_HEADERSIZE + sizeof(DWORD);
pIcmpHeader->icmp_cksum = InternetChksum((LPWORD)pIcmpHeader, iPacketSize);
 
if (pIcmpHeader->icmp_cksum !=0 )
{ 
iSentBytes = sendto(hSocket, (LPSTR) IcmpSendPacket, iPacketSize, 
NO_FLAGS, (LPSOCKADDR) &sockAddrLocal, sizeof(sockAddrLocal));
if (iSentBytes == SOCKET_ERROR) {
closesocket(hSocket);
wsprintf(szPingBuffer,
"The sendto() function returned a socket error.");
return(FALSE);
}
 
if (iSentBytes != iPacketSize)  {
closesocket(hSocket);
wsprintf(szPingBuffer,
"Wrong number of bytes sent: %d", iSentBytes);
return(FALSE);
}
 
iHostAddrLength = sizeof(sockAddrHost);
 
iReceivedBytes = recvfrom(hSocket, (LPSTR) IcmpRecvPacket, 
sizeof(IcmpRecvPacket), NO_FLAGS, (LPSOCKADDR) &sockAddrHost,
&iHostAddrLength);
}
else {
closesocket(hSocket);
wsprintf(szPingBuffer, "Checksum computation error! Result was zero!");
return(FALSE);
}
 
closesocket(hSocket);
 
if (iReceivedBytes == SOCKET_ERROR) { 
iSocketError = WSAGetLastError();
if (iSocketError == 10004) {
wsprintf(szPingBuffer,
"Ping operation for %s was cancelled.", 
(LPSTR)lpszHostName);
dwRoundTrip = 0;
return(TRUE);
}
else {
wsprintf(szPingBuffer,
"Socket Error from recvfrom(): %d", iSocketError);
return(FALSE);
}
}
 
dwReturnTime = GetTickCount();
dwRoundTrip = dwReturnTime - *pdwTimeStamp;
 
// Указываем на IP-заголовок принятого пакета
pIpHeader = (struct ip *)IcmpRecvPacket;
 
// Извлекаем биты 4-7 и преобразуем количество З2-битных слов в количество байтов
iIPHeadLength = (pIpHeader->ip_verlen >> 4) << 2;
 
// Проверяем длину, чтобы удостовериться, что ICMP-заголовок принят
if (iReceivedBytes < iIPHeadLength + ICMP_HEADERSIZE) {
wsprintf(szPingBuffer, "Received packet was too short.");
return(FALSE);
}
 
// Указываем на ICMP-сообщение, следующее сразу за IP-заголовком
pIcmpHeader = (struct icmp *) (IcmpRecvPacket + iIPHeadLength);
 
// Проверяем, что мы приняли именно "эхо"-ответ
if (pIcmpHeader->icmp_type != ICMP_ECHOREPLY) {
wsprintf(szPingBuffer,
"Received packet was not an echo reply to your ping.");
return(FALSE);
}
 
// Проверяем, принадлежит ли этот пакет нашей программе
if (pIcmpHeader->icmp_id != (HINSTANCE)hInstance) {
wsprintf(szPingBuffer,
"Received packet was not sent by this program.");
return(FALSE);
}
 
// Да, этот пакет был послан нашей программой. Обратите
// внимание на IP-адрес и имя удаленного компьютера,
// пославшего "эхо"-ответ
lstrcpy(lpszHostName, (LPSTR)lpHostEntry->h_name);
wsprintf(szPingBuffer,
"Round-trip travel time to %s [%s] was %d milliseconds.",
(LPSTR)lpszHostName, (LPSTR)inet_ntoa(sockAddrHost.sin_addr), 
dwRoundTrip);
 
return(TRUE); 
}
 
 
void main ()
{
WSADATA wsaData;
 
WSAStartup(WINSOCK_VERSION, &wsaData);
 
DoPingOperation(hInstance);
MessageBox(NULL, szPingBuffer, "www.sources.ru", MB_OK|MB_ICONSTOP);
 
WSACleanup();
}

http://www.cyberguru.ru/cpp-so... -ping.html
0
Модератор
 Аватар для D1973
9926 / 6463 / 2457
Регистрация: 21.01.2014
Сообщений: 27,416
Записей в блоге: 3
11.08.2014, 20:55
Цитата Сообщение от D1973 Посмотреть сообщение
то вот пример
Вы понимаете, что такое ПРИМЕР???
Я понятия не имею, какая там должна программа у тебя запускаться, ты же до сих пор не удосужился об этом сообщить! Поэтому для примера я запустил bat-файл, дождался его остановки и удалил папку. Поставь в значение переменной START имя своей (СВОЕЙ) программы, в значение переменной PLUS - список параметров для запуска этой программы или "", если параметров нет.
Что непонятно???
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 20:59  [ТС]
Запуск простой программы (EXE - файла)

Добавлено через 42 секунды
С возможностью параметрами запуска
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.08.2014, 21:00
Цитата Сообщение от Adahaxta Посмотреть сообщение
Запуск простой программы (EXE - файла)
С возможностью параметрами запуска
Пример данного действия уже был продемонстрирован.
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 21:01  [ТС]
Через ключ как здесь:Узнать запущен ли процесс и выполнить действие
Там же исходники и брал все
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.08.2014, 21:03
Что значит "через ключ", о Гиборин-скиталец?
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 21:05  [ТС]
У программы не может быть ключа запуска ?
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 21:06  [ТС]
chrome.exe --disable-hang-monitor
0
11.08.2014, 21:06

Не по теме:

Знаю, как решаются вопросы методом "через магазин" :drink:
Но вот "... через ключ" ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2014, 21:06
Помогаю со студенческими работами здесь

Перезапуск процесса после его завершения
Доброго суток. Бат вообще не знаю. создаваться будет бат программно(Delphi). Нужно реализовать такой алгоритм - пока работает процесс...

Выполнение скрипта после завершения процесса
Ребят нужна помощь, есть вот такой код start &quot;запуск SAMP&quot; /wait &quot;G:\GTASA\samp.exe&quot; TASKLIST | FIND &quot;samp.exe&quot; || ( REN...

Скрипты Linux, удаление файлов из каталога, подсчет файлов в каталоге
С linux столкнулась не по своей воле, но приходиться изучать, я совсершенно еще зеленая в Линуксе, если есть проффесионалы, могли бы...

После завершения процесса он остается в режиме ожидания
Доброго времени суток! Написал небольшую консольную програмку на C++, работает под убунтой, задача ее простая - читать данные из com...

Выполнение команды после завершения процесса (программы)
Необходимо наладить резервное копирование базы данных после завершения приложения, но что то не работает... CHCP 1251 START...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru