Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
1

Зашить стороннее приложение в ресурсы и запускать только в определенном случае

03.09.2012, 07:17. Показов 2475. Ответов 21
Метки нет (Все метки)

Привет всем. Незнаю как это правильно называется, но я хочу сделать какбы оболочку для исполняемого .exe файла, не имея при том его исходников, например для калькулятора виндоуса calc.exe. Мне интересно можно ли написать код(оболочку) на С# который поглотит в себя calc.exe, что б ограничить возможность запуска калькулятора и запустить в таком случае его можно будет только с помощю другого приложения CalcLauncher. Я знаю что процессы можно запускать с входными параметрами
C#
1
System.Diagnostics.Process.Start("calc.exe", "параметр");
Это можно использовать и только конкретный параметр запустит калькулятор.
Но я не знаю как сделать так что б исполняемый .exe файл поглотить другим кодом или зашифровать его в такой формат что б можно было прочитать только с помощю другой написаной мной программы лаунчера. Высказывайте свои мысли по этому поводу, каждый совет очень важен, так как я не знаю как такие вещи называются, незнаю что искать. Спасибо всем за будущие ответы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2012, 07:17
Ответы с готовыми решениями:

Зашить иконки кнопок в приложение
Добрый день, есть ли способ зашивать иконки кнопок в экзешник чтобы не таскать с собой папку с...

Освобождаются ли ресурсы в данном случае
в событии нажатия кнопки из главной формы создается child форма так: yesNo wDialog = new...

Внедрение в стороннее приложение
Народ, вопрос таки простой, как называется явление внедрения в стороннюю программы или игру. И...

Запустить стороннее приложение
Имеется программа c:\test.exe и рядом с ней есть файл test.txt, который открывается в этой...

21
Темная сторона .Net
590 / 487 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
03.09.2012, 19:55 2
Вам рефлексия поможет.Но дело будет трудноватое.
0
Почетный модератор
21283 / 9017 / 1081
Регистрация: 11.04.2010
Сообщений: 11,015
03.09.2012, 20:25 3
Dzib, испортите в каком-нибудь экзешнике первый или второй байт.
Своей прогой его восстанавливаете и запускаете

Шучу конечно. А вообще хотелось бы уточнить (а то и заголовок похоже неправильно оформлен стал):
Вы хотите запускать любое взятое стороннее приложение только если Ваша программа дает на это разрешение? То есть файл находится сам по себе, а Ваша прога - сама по себе?

Либо Вы хотите запускать чужое приложение из ресурсов своего
(вот второе щас я вообще засомневался, что имеет место быть в контексте первого поста)
0
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.09.2012, 21:48 4
Памирыч,

Не по теме:

чего неясно, человек винлокер пишет :DD

0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
04.09.2012, 00:22  [ТС] 5
Да нет, никаких винлокеров я не пишу. Я античит хочу сделать для игрушки.
Вы хотите запускать любое взятое стороннее приложение только если Ваша программа дает на это разрешение? То есть файл находится сам по себе, а Ваша прога - сама по себе?
Мне подходят оба варианта, какой из них будет легче.

Добавлено через 1 час 18 минут
Я написал код программы которая запускает файл из ресурсов.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;
 
namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] b = Resource.SuperCalc;
            FileStream fs = new FileStream("SuperCalc.exe", FileMode.Create);
            fs.Write(b, 0, b.Length);
            fs.Close();
            Process.Start("SuperCalc.exe");
            Console.ReadLine();
 
            
        }
    }
}
Но даний вариант не подходит, потому что создается SuperCalc.exe в таком виде что его можно скопировать кудато и потом запустить без моей программы, а мне нужно что б этот файл был бесполезный если его запускать без моего приложения. Но вариант, что б файл создавался в другой папке тоже не подойдет, так как он должен быть в той же папке что и моя программа. Подскажите мне как это реализировать.
0
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.09.2012, 06:47 6
Сделать файл скрытым, хотя бы
0
Заблокирован
04.09.2012, 08:19 7
Цитата Сообщение от Dzib Посмотреть сообщение
потому что создается SuperCalc.exe в таком виде что его можно скопировать кудато и потом запустить без моей программы
При запуске проверять свой путь и если он не соответствует тому, что вам необходимо тут же закрывать. Или проверять свою директорию на наличие файла с именем вашей программы.
Цитата Сообщение от Dzib Посмотреть сообщение
Я написал код программы которая запускает файл из ресурсов.
Каждый раз не стоит вытягивать из ресурсов, а только после проверки на отсутствие.
0
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,513
04.09.2012, 09:40 8
Цитата Сообщение от Dzib Посмотреть сообщение
скопировать кудато и потом запустить без моей программы
проверять наличие запущенной стартовой программы
ах да, файл-то чужой
0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
04.09.2012, 11:58  [ТС] 9
Народ мне нужно что б файл калькулятора нельзя было запустить, если только запуск не идет с помощю моей программы. В даном случае, создается полноценный калькулятор который можно спокойно скопировать в удалённое место и уже запускать без моей программы. Может можно например както возсоздать файл и запустить его не создавая совсем или создавая виртуально? Или что б он создавался в закодированом виде, а моя программа както могла б в момент запуска раскодировать?
Ещё я видел в подобных случаях люди пишут dll файлы и "хукают" их в приложения, в моем случае в калькулятор, только не ясно что примерно там писать в дллке.
0
Заблокирован
04.09.2012, 12:07 10
Цитата Сообщение от Dzib Посмотреть сообщение
Народ мне нужно что б файл калькулятора нельзя было запустить, если только запуск не идет с помощю моей программы.
Можно поинтересоваться, для чего это надо? Возможно, после того, как вы нам это объясните, будет легче вам помочь.
0
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,513
04.09.2012, 12:12 11
Dzib, а как получаешь данные с калькулятора, если он абсолютно чужой? 2+2 получил, закрыл, удалил
0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
04.09.2012, 13:18  [ТС] 12
Для написания античита для одной игршки. В игре есть .exe файл который запускает клиент игры. В клиенте игроки подменяют файлы что дает им приемущество. Я своим приложениям буду проверять подлинность файлов и мне нужно контролировать .exe клиента(запустить, остановить и зависимость .exe файла от моей програмы) Если изменю серийник на сервере и в .exe клиента то из старого .exe файла некто не сможет зайти, но мне ненужно что б этот новый попался в руки игрокам в таком виде что б они могли его отдельно запустить.
0
433 / 298 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.09.2012, 13:25 13
Цитата Сообщение от Dzib Посмотреть сообщение
Для написания античита для одной игршки. В игре есть .exe файл который запускает клиент игры. В клиенте игроки подменяют файлы что дает им приемущество. Я своим приложениям буду проверять подлинность файлов и мне нужно контролировать .exe клиента(запустить, остановить и зависимость .exe файла от моей програмы) Если изменю серийник на сервере и в .exe клиента то из старого .exe файла некто не сможет зайти, но мне ненужно что б этот новый попался в руки игрокам в таком виде что б они могли его отдельно запустить.
Задача не осуществима. Так как в любом случае ты будешь извлекать файл => его можно будет выдрать.
А как я понимаю сам exe игры ты менять не можешь. PS и да же если можешь то не автор => нарушаешь лиц соглашение
А если ты автор то зачем писать лаунчер? Если есть другие методы защиты
0
55 / 55 / 14
Регистрация: 26.04.2010
Сообщений: 177
04.09.2012, 16:53 14
На самом деле у компании Aladdin был такой замечательный аппаратный ключик, API которого позволяло навесить на любой файл такую вот оболочку. Без ключика файл запустить было нельзя. А с ключиком файл распаковывался в отдельный поток в оперативной памяти, и можно было с ним работать. Если такой вариант проходит, то вот ссылочка: http://www.aladdin-rd.ru/catalog/hasp/HASP_HL_Pro. На самом деле есть ещё и программы-эмуляторы этого ключика, но тсссссс!..
0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
04.09.2012, 23:03  [ТС] 15
дороговатый продукт, но спасибо за инфу.

Задача не осуществима. Так как в любом случае ты будешь извлекать файл => его можно будет выдрать.
А как я понимаю сам exe игры ты менять не можешь. PS и да же если можешь то не автор => нарушаешь лиц соглашение
А если ты автор то зачем писать лаунчер? Если есть другие методы защиты
Насчет авторских прав там проблем нет, сам exe менять можно, но исходников нет. Задача осуществима, так как видел люди делали похожые вещи. Они на асемблере внедряют свои дллки в exe файл, меняют точку входа, но я незнаю что находится в этих длл.
И видимо не обезательно извлекать файл. Нашел такое:
[ссылки на сторонние форумы запрещены]
Но я сам не могу разобратся.

Добавлено через 4 часа 6 минут
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
using System;
using System.Runtime.InteropServices;
 
/* 
 * Title: CMemoryExecute.cs
 * Description: Runs an EXE in memory using native WinAPI. Very optimized and tiny.
 * 
 * Developed by: affixiate 
 * Release date: December 10, 2010
 * Released on: [url]http://opensc.ws[/url]
 * Credits:
 *          MSDN ([url]http://msdn.microsoft.com[/url])
 *          NtInternals ([url]http://undocumented.ntinternals.net[/url])
 *          Pinvoke ([url]http://pinvoke.net[/url])
 *          
 * Comments: If you use this code, I require you to give me credits. Don't be a ripper! ;]
 */
 
// ReSharper disable InconsistentNaming
public static unsafe class CMemoryExecute
{
    public struct STARTUPINFO
    {
        public uint cb;
        public string lpReserved;
        public string lpDesktop;
        public string lpTitle;
        public uint dwX;
        public uint dwY;
        public uint dwXSize;
        public uint dwYSize;
        public uint dwXCountChars;
        public uint dwYCountChars;
        public uint dwFillAttribute;
        public uint dwFlags;
        public short wShowWindow;
        public short cbReserved2;
        public IntPtr lpReserved2;
        public IntPtr hStdInput;
        public IntPtr hStdOutput;
        public IntPtr hStdError;
    }
 
    /// <summary>
    /// Runs an EXE (which is loaded in a byte array) in memory.
    /// </summary>
    /// <param name="exeBuffer">The EXE buffer.</param>
    /// <param name="hostProcess">Full path of the host process to run the buffer in.</param>
    /// <param name="optionalArguments">Optional command line arguments.</param>
    /// <returns></returns>
    public static bool Run(byte[] exeBuffer, string hostProcess, string optionalArguments = "")
    {
        // STARTUPINFO
        STARTUPINFO StartupInfo = new STARTUPINFO();
        StartupInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
        StartupInfo.wShowWindow = SW_HIDE;
 
        var IMAGE_SECTION_HEADER = new byte[0x28]; // pish
        var IMAGE_NT_HEADERS = new byte[0xf8]; // pinh
        var IMAGE_DOS_HEADER = new byte[0x40]; // pidh
        var PROCESS_INFO = new int[0x4]; // pi
        var CONTEXT = new byte[0x2cc]; // ctx
 
        byte* pish;
        fixed (byte* p = &IMAGE_SECTION_HEADER[0])
            pish = p;
 
        byte* pinh;
        fixed (byte* p = &IMAGE_NT_HEADERS[0])
            pinh = p;
 
        byte* pidh;
        fixed (byte* p = &IMAGE_DOS_HEADER[0])
            pidh = p;
 
        byte* ctx;
        fixed (byte* p = &CONTEXT[0])
            ctx = p;
 
        // Set the flag.
        *(uint*)(ctx + 0x0 /* ContextFlags */) = CONTEXT_FULL;
 
        // Get the DOS header of the EXE.
        Buffer.BlockCopy(exeBuffer, 0, IMAGE_DOS_HEADER, 0, IMAGE_DOS_HEADER.Length);
 
        /* Sanity check:  See if we have MZ header. */
        if (*(ushort*)(pidh + 0x0 /* e_magic */) != IMAGE_DOS_SIGNATURE)
            return false;
 
        var e_lfanew = *(int*)(pidh + 0x3c);
 
        // Get the NT header of the EXE.
        Buffer.BlockCopy(exeBuffer, e_lfanew, IMAGE_NT_HEADERS, 0, IMAGE_NT_HEADERS.Length);
 
        /* Sanity check: See if we have PE00 header. */
        if (*(uint*)(pinh + 0x0 /* Signature */) != IMAGE_NT_SIGNATURE)
            return false;
 
        // Run with parameters if necessary.
        if (!string.IsNullOrEmpty(optionalArguments))
            hostProcess += " " + optionalArguments;
 
        if (!CreateProcess(null, hostProcess, IntPtr.Zero, IntPtr.Zero, false, CREATE_SUSPENDED, IntPtr.Zero, null, ref StartupInfo, PROCESS_INFO))
            return false;
 
        var ImageBase = new IntPtr(*(int*)(pinh + 0x34));
        NtUnmapViewOfSection((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, ImageBase);
        if (VirtualAllocEx((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, ImageBase, *(uint*)(pinh + 0x50 /* SizeOfImage */), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE) == IntPtr.Zero)
            Run(exeBuffer, hostProcess, optionalArguments); // Memory allocation failed; try again (this can happen in low memory situations)
 
        fixed (byte* p = &exeBuffer[0])
            NtWriteVirtualMemory((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, ImageBase, (IntPtr)p, *(uint*)(pinh + 84 /* SizeOfHeaders */), IntPtr.Zero);
 
        for (ushort i = 0; i < *(ushort*)(pinh + 0x6 /* NumberOfSections */); i++)
        {
            Buffer.BlockCopy(exeBuffer, e_lfanew + IMAGE_NT_HEADERS.Length + (IMAGE_SECTION_HEADER.Length * i), IMAGE_SECTION_HEADER, 0, IMAGE_SECTION_HEADER.Length);
            fixed (byte* p = &exeBuffer[*(uint*)(pish + 0x14 /* PointerToRawData */)])
                NtWriteVirtualMemory((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, (IntPtr)((int)ImageBase + *(uint*)(pish + 0xc /* VirtualAddress */)), (IntPtr)p, *(uint*)(pish + 0x10 /* SizeOfRawData */), IntPtr.Zero);
        }
 
        NtGetContextThread((IntPtr)PROCESS_INFO[1] /* pi.hThread */, (IntPtr)ctx);
        NtWriteVirtualMemory((IntPtr)PROCESS_INFO[0] /* pi.hProcess */, (IntPtr)(*(uint*)(ctx + 0xAC /* ecx */)), ImageBase, 0x4, IntPtr.Zero);
        *(uint*)(ctx + 0xB0 /* eax */) = (uint)ImageBase + *(uint*)(pinh + 0x28 /* AddressOfEntryPoint */);
        NtSetContextThread((IntPtr)PROCESS_INFO[1] /* pi.hThread */, (IntPtr)ctx);
        NtResumeThread((IntPtr)PROCESS_INFO[1] /* pi.hThread */, IntPtr.Zero);
 
 
        return true;
    }
 
    #region WinNT Definitions
 
    private const uint CONTEXT_FULL = 0x10007;
    private const int CREATE_SUSPENDED = 0x4;
    private const int MEM_COMMIT = 0x1000;
    private const int MEM_RESERVE = 0x2000;
    private const int PAGE_EXECUTE_READWRITE = 0x40;
    private const ushort IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ
    private const uint IMAGE_NT_SIGNATURE = 0x00004550; // PE00
    
    private static short SW_SHOW = 5;
    private static short SW_HIDE = 0;
    private const uint STARTF_USESTDHANDLES = 0x00000100;
    private const uint STARTF_USESHOWWINDOW = 0x00000001;
 
 
    #region WinAPI
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, int[] lpProcessInfo);
 
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
 
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern uint NtUnmapViewOfSection(IntPtr hProcess, IntPtr lpBaseAddress);
 
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern int NtWriteVirtualMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, IntPtr lpNumberOfBytesWritten);
 
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern int NtGetContextThread(IntPtr hThread, IntPtr lpContext);
 
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern int NtSetContextThread(IntPtr hThread, IntPtr lpContext);
 
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern uint NtResumeThread(IntPtr hThread, IntPtr SuspendCount);
    #endregion
 
    #endregion
}
Скопировал код, так как нельзя ссылки на другие форумы писать, но я немогу в этом разобратся, говорят на 64-разрядной не запустится, кто с таким работал?
0
433 / 298 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
05.09.2012, 00:12 16
Цитата Сообщение от Dzib Посмотреть сообщение
Насчет авторских прав там проблем нет, сам exe менять можно, но исходников нет. Задача осуществима, так как видел люди делали похожые вещи. Они на асемблере внедряют свои дллки в exe файл, меняют точку входа, но я незнаю что находится в этих длл.
Вы точно читали внимательно лицензионное соглашение? Уверены?
Цитата Сообщение от Dzib Посмотреть сообщение
сам exe менять можно
Если нету исходников то есть это не opensourсe проект, то менять нельзя А другие ну они как и вы нарушают
А то что вы нашли это работает по типу артмани Если я верно понял код. Такие вещи лучше всего писать на C/C++
0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
05.09.2012, 01:12  [ТС] 17
Вы точно читали внимательно лицензионное соглашение? Уверены?
Нет никакого соглашения, игра была написана под заказ больше чем 10 лет назад и продана закажчиками многим людям с парвом делать с этим все что хочеш, но без исходников)
А то что вы нашли это работает по типу артмани Если я верно понял код. Такие вещи лучше всего писать на C/C++
Почему?)
Кстате раз вы затронули тему о артмани и вы знаете тип её работы, может подскажете каким спосбом от неё лучше защитить сторонний .exe файл?
0
605 / 580 / 157
Регистрация: 29.06.2010
Сообщений: 1,611
05.09.2012, 15:06 18
таки... античит, насколько я понимаю, необходим для клиент-серверных игр... а взломать сервер арт-мани - это или новое жесткое извращение, или ву-ду =))

по поводу лаунчера:
если менять исходники другой программы нельзя, то вижу только 1 способ решения проблемы:
при запуске через лаунчер устанавливать какой либо булевский параметр в истину и запускать приложение. При закрытии приложения, соответственно, сбрасывать этот самый параметр.

так же необходимо будет или добавлять методы на обработчики событий винды (в частности на запуск новых процессов), или просто с некоторой периодичностью опрашивать все исполняемые процессы. если запущен процесс игры, и вышеназванный флаг не стоит, то закрывать процесс. если флаг стоит - то бог с ним)

в прочем такую же(почти) фишку можно провернуть и с артмони, тока не смотреть на булевский параметр совсем, а закрывать сразу)

Добавлено через 44 минуты

Если анализировать все запущенные процессы через определённый интервал, то как-то так:
C#
1
2
3
4
5
6
          System.Diagnostics.Process[] processes= System.Diagnostics.Process.GetProcesses();
 
           foreach (System.Diagnostics.Process instance in processes)
              if (instance.ProcessName==%YourProcName%)
                if(! %YourBoolFlag%)
                   instance.Close();
0
5 / 5 / 3
Регистрация: 21.08.2012
Сообщений: 205
05.09.2012, 17:19  [ТС] 19
если менять исходники другой программы нельзя, то вижу только 1 способ решения проблемы:
при запуске через лаунчер устанавливать какой либо булевский параметр в истину и запускать приложение. При закрытии приложения, соответственно, сбрасывать этот самый параметр.
Спасибо за мысли ваши, но я не до конца понимаю зачем это, обясните поподробнее. Как это решыт проблему с тем что exe файл просто скопируют в другу папку в то время когда он создается, потом из папки клиента удалят мою програму и уже из клиента будут запускать exe без моей программы.

в прочем такую же(почти) фишку можно провернуть и с артмони, тока не смотреть на булевский параметр совсем, а закрывать сразу)
Через имя процесса нет смысла следить за артмани, потому что очень много версий и у каждой свое название. Даже если и следить то не за именем процеса а за точкой входа(EntryPointAddress), это более надежный метод но все же придется найти все версии артмани которые существуют в мире, тоже не хорошый вариант. Читал что артмани устанавливает свой драйвер, можно следить за наличием этого драйвера и если таков находится в системе то тогда не давать запускать игру. Но я незнаю к сожелению как это делается.
0
Почетный модератор
Эксперт .NET
8692 / 3644 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
05.09.2012, 17:28 20
Dzib, Вам действительно не подойдет C#. Вам нужно реализовать метод (способ) который используется протекторами. Далеко не все из ныне существующих могут гарантировать, что после их использования приложение будет работать нормально. Так что подумайте, а тот ли способ Вам нужен?
Цитата Сообщение от Dzib Посмотреть сообщение
говорят на 64-разрядной не запустится, кто с таким работал?
Он и обычные exe x86 далеко не все запустит. Видел его когда-то...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2012, 17:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Запустить стороннее приложение
Привет всем :) Например есть программа (консолная) что делать чтоб при запуске форму запустит...

Передать текст в стороннее приложение
Здравствуйте. Возможно ли написать в Pascal ABS такую программу: 1)Открывает игру. 2)Подставляет...

Как запустить стороннее приложение?
Можно ли запускать из своей программы другую, например MS Word? Если да то как?

Встроить стороннее приложение в форму
При в строении стороннего приложения, возникла проблема 1)Он открывает не в форме(т.е. отдельно от...

Как развернуть стороннее приложение
Приветствую, сразу к делу Допустим у меня есть свернутый firefox. Мне надо его развернуть. Делаю...

Как закрыть стороннее приложение
Всем привет, требуется закрыть стороннее приложение (пожарный сервер), правой клик по иконке в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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